|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- /*
- * 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.fonts.truetype;
-
- import java.io.ByteArrayInputStream;
- import java.io.EOFException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Arrays;
-
- import org.junit.Before;
- import org.junit.Test;
-
- import static org.junit.Assert.assertEquals;
- import static org.junit.Assert.assertTrue;
- import static org.junit.Assert.fail;
-
- /**
- * A test class for org.apache.fop.truetype.FontFileReader
- */
- public class FontFileReaderTestCase {
- private FontFileReader fontReader;
- private final InputStream in;
- private final byte[] byteArray;
-
- /**
- * Constructor - initialises an array that only needs to be created once. It creates a byte[]
- * of form { 0x00, 0x01, 0x02, 0x03..., 0xff};
- */
- public FontFileReaderTestCase() {
- byteArray = new byte[256];
- for (int i = 0; i < 256; i++) {
- byteArray[i] = (byte) i;
- }
- in = new ByteArrayInputStream(byteArray);
- }
-
- /**
- * sets up the test subject object for testing.
- */
- @Before
- public void setUp() {
- try {
- fontReader = new FontFileReader(in);
- } catch (Exception e) {
- fail("Error: " + e.getMessage());
- }
- }
-
- /**
- * the "destructor" method.
- *
- */
- public void tearDown() {
- fontReader = null;
- }
-
- /**
- * Test readTTFByte()
- * @throws IOException exception
- */
- @Test
- public void testReadTTFByte() throws IOException {
- for (int i = 0; i < 256; i++) {
- assertEquals((byte) i, fontReader.readTTFByte());
- }
- }
-
- /**
- * Test seekSet() - check that it moves to the correct position and enforce a failure case.
- * @throws IOException exception
- */
- @Test
- public void testSeekSet() throws IOException {
- fontReader.seekSet(10);
- assertEquals(10, fontReader.readTTFByte());
- try {
- fontReader.seekSet(257);
- fail("FileFontReaderTest Failed testSeekSet");
- } catch (IOException e) {
- // Passed
- }
- }
-
- /**
- * Test skip() - check that it moves to the correct position and enforce a failure case.
- * @throws IOException exception
- */
- @Test
- public void testSkip() throws IOException {
- fontReader.skip(100);
- assertEquals(100, fontReader.readTTFByte());
- try {
- // 100 (seekAdd) + 1 (read() = 1 byte) + 156 = 257
- fontReader.skip(156);
- fail("FileFontReaderTest Failed testSkip");
- } catch (IOException e) {
- // Passed
- }
- }
-
- /**
- * Test getCurrentPos() - 3 checks:
- * 1) test with seekSet(int)
- * 2) test with skip(int)
- * 3) test with a readTTFByte() (this moves the position by the size of the data being read)
- * @throws IOException exception
- */
- @Test
- public void testGetCurrentPos() throws IOException {
- fontReader.seekSet(10);
- fontReader.skip(100);
- assertEquals(110, fontReader.getCurrentPos());
- fontReader.readTTFByte();
- assertEquals(111, fontReader.getCurrentPos());
- }
-
- /**
- * Test getFileSize()
- */
- @Test
- public void testGetFileSize() {
- assertEquals(256, fontReader.getFileSize());
- }
-
- /**
- * Test readTTFUByte()
- * @throws IOException exception
- */
- @Test
- public void testReadTTFUByte() throws IOException {
- for (int i = 0; i < 256; i++) {
- assertEquals(i, fontReader.readTTFUByte());
- }
- }
-
- /**
- * Test readTTFShort() - Test positive and negative numbers (two's compliment).
- * @throws IOException exception
- */
- @Test
- public void testReadTTFShort() throws IOException {
- // 0x0001 = 1
- assertEquals("Should have been 1 (0x0001)", 1, fontReader.readTTFShort());
- // 0x0203 = 515
- assertEquals(515, fontReader.readTTFShort());
- // now test negative numbers
- fontReader.seekSet(250);
- // 0xfafb
- assertEquals(-1285, fontReader.readTTFShort());
- }
-
- /**
- * Test readTTFUShort() - Test positive and potentially negative numbers (two's compliment).
- * @throws IOException exception
- */
- @Test
- public void testReadTTFUShort() throws IOException {
- // 0x0001
- assertEquals(1, fontReader.readTTFUShort());
- // 0x0203
- assertEquals(515, fontReader.readTTFUShort());
- // test potential negatives
- fontReader.seekSet(250);
- // 0xfafb
- assertEquals((250 << 8) + 251, fontReader.readTTFUShort());
- }
-
- /**
- * Test readTTFShort(int) - test reading ahead of current position and behind current position
- * and in both cases ensure that our current position isn't changed.
- * @throws IOException exception
- */
- @Test
- public void testReadTTFShortWithArg() throws IOException {
- // 0x6465
- assertEquals(25701, fontReader.readTTFShort(100));
- assertEquals(0, fontReader.getCurrentPos());
- // read behind current position (and negative)
- fontReader.seekSet(255);
- // 0xfafb
- assertEquals(-1285, fontReader.readTTFShort(250));
- assertEquals(255, fontReader.getCurrentPos());
- }
-
- /**
- * Test readTTFUShort(int arg) - test reading ahead of current position and behind current
- * position and in both cases ensure that our current position isn't changed.
- * @throws IOException exception
- */
- @Test
- public void testReadTTFUShortWithArg() throws IOException {
- // 0x6465
- assertEquals(25701, fontReader.readTTFUShort(100));
- assertEquals(0, fontReader.getCurrentPos());
- // read behind current position (and potential negative)
- fontReader.seekSet(255);
- // 0xfafb
- assertEquals(64251, fontReader.readTTFUShort(250));
- assertEquals(255, fontReader.getCurrentPos());
- }
-
- /**
- * Test readTTFLong()
- * @throws IOException exception
- */
- @Test
- public void testReadTTFLong() throws IOException {
- // 0x00010203
- assertEquals(66051, fontReader.readTTFLong());
- // test negative numbers
- fontReader.seekSet(250);
- // 0xf0f1f2f3
- assertEquals(-84148995, fontReader.readTTFLong());
- }
-
- /**
- * Test readTTFULong()
- * @throws IOException exception
- */
- @Test
- public void testReadTTFULong() throws IOException {
- // 0x00010203
- assertEquals(66051, fontReader.readTTFULong());
- // test negative numbers
- fontReader.seekSet(250);
- // 0xfafbfcfd
- assertEquals(4210818301L, fontReader.readTTFULong());
- }
-
- /**
- * Test readTTFString() - there are two paths to test here:
- * 1) A null terminated string
- * 2) A string not terminated with a null (we expect this to throw an EOFException)
- * @throws IOException exception
- */
- @Test
- public void testReadTTFString() throws IOException {
- byte[] strByte = {(byte)'t', (byte)'e', (byte)'s', (byte)'t', 0x00};
- fontReader = new FontFileReader(new ByteArrayInputStream(strByte));
- assertEquals("test", fontReader.readTTFString());
- try {
- // not NUL terminated
- byte[] strByteNoNull = {(byte)'t', (byte)'e', (byte)'s', (byte)'t'};
- fontReader = new FontFileReader(new ByteArrayInputStream(strByteNoNull));
- assertEquals("test", fontReader.readTTFString());
- fail("FontFileReaderTest testReadTTFString Fails.");
- } catch (EOFException e) {
- // Pass
- }
- }
-
- /**
- * Test readTTFString(int arg)
- * @throws IOException exception
- */
- @Test
- public void testReadTTFStringIntArg() throws IOException {
- byte[] strByte = {(byte)'t', (byte)'e', (byte)'s', (byte)'t'};
- fontReader = new FontFileReader(new ByteArrayInputStream(strByte));
- assertEquals("test", fontReader.readTTFString(4));
- try {
- fontReader = new FontFileReader(new ByteArrayInputStream(strByte));
- assertEquals("test", fontReader.readTTFString(5));
- fail("FontFileReaderTest testReadTTFStringIntArg Fails.");
- } catch (EOFException e) {
- // Pass
- }
- }
-
- /**
- * Test readTTFString(int arg1, int arg2)
- */
- public void testReadTTFString2IntArgs() {
- // currently the same as above
- }
-
- /**
- * Test getBytes()
- * @throws IOException exception
- */
- @Test
- public void testGetBytes() throws IOException {
- byte[] retrievedBytes = fontReader.getBytes(0, 256);
- assertTrue(Arrays.equals(byteArray, retrievedBytes));
- }
- }
|