blob: f43eb0646520d4bf7ed2828e6363d4e1017502a9 [file] [log] [blame]
/*
* 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.afp.modca;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.apache.fop.afp.modca.triplets.AbstractTriplet;
import org.apache.fop.afp.modca.triplets.AttributeQualifierTriplet;
import org.apache.fop.afp.modca.triplets.CommentTriplet;
import org.apache.fop.afp.modca.triplets.ObjectAreaSizeTriplet;
import org.apache.fop.afp.modca.triplets.Triplet;
import org.junit.Before;
/**
* Test {@link AbstractTripletStructuredObject}
*/
public abstract class AbstractTripletStructuredObjectTestCase<S extends AbstractTripletStructuredObject>
extends AbstractStructuredObjectTestCase<AbstractTripletStructuredObject> {
private static final List<AbstractTriplet> TRIPLETS;
static {
List<AbstractTriplet> triplets = new ArrayList<AbstractTriplet>();
triplets.add(new CommentTriplet((byte) 0x01, "test comment"));
triplets.add(new AttributeQualifierTriplet(1, 1));
triplets.add(new ObjectAreaSizeTriplet(10, 20));
TRIPLETS = Collections.unmodifiableList(triplets);
}
private AbstractTripletStructuredObject emptyStructuredObject
= new AbstractTripletStructuredObject() { };
@Before
public void setUp() throws Exception {
AbstractTripletStructuredObject sut = getSut();
for (AbstractTriplet triplet : TRIPLETS) {
sut.addTriplet(triplet);
}
}
/**
* Test getTripletLength() - ensure a sum of all enclosing object lengths is returned.
*/
public void testGetTripletLength() {
int dataLength = 0;
for (Triplet t : TRIPLETS) {
dataLength += t.getDataLength();
}
assertEquals(dataLength, getSut().getTripletDataLength());
assertEquals(0, emptyStructuredObject.getTripletDataLength());
}
/**
* Test hasTriplets()
*/
public void testHasTriplets() {
assertTrue(getSut().hasTriplets());
assertFalse(emptyStructuredObject.hasTriplets());
}
/**
* Test writeTriplets() - Ensure the triplets are written properly.
*
* @throws IOException -
*/
public void testWriteObjects() throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for (AbstractTriplet triplet : TRIPLETS) {
triplet.writeToStream(baos);
}
byte[] expected = baos.toByteArray();
baos.reset();
getSut().writeTriplets(baos);
assertTrue(Arrays.equals(expected, baos.toByteArray()));
baos.reset();
// Ensure it doesn't die if no data has been added
emptyStructuredObject.writeTriplets(baos);
byte[] emptyArray = baos.toByteArray();
assertTrue(Arrays.equals(emptyArray, new byte[0]));
}
/**
* Test hasTriplet() - ensure both positive and negative values are returned.
*/
public void testHasTriplet() {
for (AbstractTriplet triplet : TRIPLETS) {
assertTrue(getSut().hasTriplet(triplet.getId()));
assertFalse(emptyStructuredObject.hasTriplet(triplet.getId()));
}
CommentTriplet notInSystem = new CommentTriplet((byte) 0x30, "This should return false");
assertFalse(getSut().hasTriplet(notInSystem.getId()));
}
/**
* Test addTriplet() - mostly tested above, but check boundary cases
*/
public void testAddTriplet() {
// ensure null doesn't kill it... not sure what else to test
getSut().addTriplet(null);
}
/**
* Test addTriplets() - ensure all triplets are added.
*/
public void testAddTriplets() {
// Tested on empty object
List<AbstractTriplet> expectedList = TRIPLETS;
emptyStructuredObject.addTriplets(expectedList);
// checks equals() on each member of both lists
assertEquals(expectedList, emptyStructuredObject.getTriplets());
// Add a list to an already populated list
getSut().addTriplets(expectedList);
List<AbstractTriplet> newExpected = new ArrayList<AbstractTriplet>(expectedList);
newExpected.addAll(expectedList);
assertEquals(newExpected, getSut().getTriplets());
// Ensure null doesn't throw exception
emptyStructuredObject.addTriplets(null);
}
}