/*
* 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.type1;
import java.io.IOException;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.apache.fop.fonts.type1.PostscriptParser.PSDictionary;
import org.apache.fop.fonts.type1.PostscriptParser.PSElement;
import org.apache.fop.fonts.type1.PostscriptParser.PSFixedArray;
import org.apache.fop.fonts.type1.PostscriptParser.PSSubroutine;
import org.apache.fop.fonts.type1.PostscriptParser.PSVariable;
import org.apache.fop.fonts.type1.PostscriptParser.PSVariableArray;
public class PostscriptParserTestCase {
private PostscriptParser parser;
private String eol = new String(new byte[] {13});
private String postscriptElements =
"/myVariable 100 def" + eol
+ "/-| {def} executeonly def" + eol
+ "/myFixedArray 6 array" + eol
+ "0 1 5 {1 index exch /.notdef put } for" + eol
+ "dup 1 /a put" + eol
+ "dup 2 /b put" + eol
+ "dup 3 /c put" + eol
+ "dup 4 /d put" + eol
+ "readonly def" + eol
+ "/myVariableArray [ { this } { is } { a } { test } ] no access def" + eol
+ "/refVarSubr myValue -|";
@Before
public void setUp() {
parser = new PostscriptParser();
}
/**
* Tests parsing an example Postscript document and verifying what
* has been read.
* @throws IOException
*/
@Test
public void testPostscriptParsing() throws IOException {
List<PSElement> elements = parser.parse(postscriptElements.getBytes());
assertEquals(elements.size(), 5);
assertTrue(elements.get(0) instanceof PSVariable);
assertTrue(elements.get(2) instanceof PSFixedArray);
assertTrue(elements.get(3) instanceof PSVariableArray);
PSFixedArray fixedArray = (PSFixedArray)elements.get(2);
assertEquals(fixedArray.getEntries().size(), 4);
assertEquals(fixedArray.getEntries().get(2), "dup 2 /b put ");
PSVariableArray variableArray = (PSVariableArray)elements.get(3);
assertEquals(variableArray.getEntries().size(), 4);
/* Currently only variable arrays containing subroutines are supported, though
* this can be modified to support single values and also strip out unnecessary
* characters like the { } below. */
assertEquals(variableArray.getEntries().get(0).trim(), "{ this }");
}
/**
* Tests that the correct element is returned given the operator and element ID provided
*/
@Test
public void testCreateElement() {
assertTrue(parser.createElement("/custDictionary", "dict", -1) instanceof PSDictionary);
assertEquals(parser.createElement("/Private", "dict", -1), null);
assertTrue(parser.createElement("/aFixedArray", "array", -1) instanceof PSFixedArray);
assertTrue(parser.createElement("/aVariableArray", "[", -1) instanceof PSVariableArray);
assertTrue(parser.createElement("/aSubroutine", "{", -1) instanceof PSSubroutine);
}
}