/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* $Id$ */ package org.apache.fop.render.ps.fonts; import java.io.IOException; import org.junit.Before; import org.junit.Test; import org.mockito.InOrder; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; /** * Test class for unit testing PSTTFTableOutputStream */ public class PSTTFTableOutputStreamTestCase { private PSTTFGenerator mockGen; private PSTTFTableOutputStream tableOut; @Before public void setUp() { mockGen = mock(PSTTFGenerator.class); tableOut = new PSTTFTableOutputStream(mockGen); } /** * Test streamTable() - several paths to test (2. and 3. test corner cases): * 1) that a table of length < PSTTFGenerator.MAX_BUFFER_SIZE invokes the correct methods in * PSTTFGenerator. * 2) that a table of length > PSTTFGenerator.MAX_BUFFER_SIZE and * length == n * PSTTFGenerator.MAX_BUFFER_SIZE is split up and the methods in PSTTFGenerator * are invoked. * 3) that a table of length > PSTTFGenerator.MAX_BUFFER_SIZE but * length != n * PSTTFGenerator.MAX_BUFFER_SIZE is split up and the methods in PSTTFGenerator * are invoked. * @throws IOException file write error. */ @Test public void testStreamTable() throws IOException { byte[] byteArray = new byte[PSTTFGenerator.MAX_BUFFER_SIZE * 3]; tableOut.streamTable(byteArray, 0, 10); InOrder inOrder = inOrder(mockGen); inOrder.verify(mockGen).startString(); inOrder.verify(mockGen).streamBytes(byteArray, 0, 10); inOrder.verify(mockGen).endString(); setUp(); // reset all all the method calls /* We're going to run this 3 times to ensure the proper method calls are invoked and all * the bytes are streamed */ tableOut.streamTable(byteArray, 0, byteArray.length); inOrder = inOrder(mockGen); for (int i = 0; i < 3; i++) { int offset = PSTTFGenerator.MAX_BUFFER_SIZE * i; inOrder.verify(mockGen).startString(); inOrder.verify(mockGen).streamBytes(byteArray, offset, PSTTFGenerator.MAX_BUFFER_SIZE); inOrder.verify(mockGen).endString(); } setUp(); // reset all the method calls tableOut.streamTable(byteArray, 0, PSTTFGenerator.MAX_BUFFER_SIZE + 1); inOrder = inOrder(mockGen); inOrder.verify(mockGen).startString(); inOrder.verify(mockGen).streamBytes(byteArray, 0, PSTTFGenerator.MAX_BUFFER_SIZE); inOrder.verify(mockGen).endString(); inOrder.verify(mockGen).startString(); inOrder.verify(mockGen).streamBytes(byteArray, PSTTFGenerator.MAX_BUFFER_SIZE, 1); inOrder.verify(mockGen).endString(); } }