blob: 3832084058b1cd33ae826080a02a171bdf61de35 [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.pdf;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
/**
* A test class for {@link VersionController}.
*/
public class VersionControllerTestCase {
private PDFDocument doc;
@Before
public void setUp() {
doc = new PDFDocument("test");
}
@Test
public void testGetVersion() {
// These do the same thing
for (Version version : Version.values()) {
if (version.compareTo(Version.V1_4) >= 0) {
VersionController fixedVC = VersionController.getFixedVersionController(version);
assertEquals(version, fixedVC.getPDFVersion());
}
VersionController dynamicVC = VersionController.getDynamicVersionController(version,
doc);
assertEquals(version, dynamicVC.getPDFVersion());
}
}
/**
* Tests that the setter methods work at setting the underlying version.
* Here there is a disparity between the two objects, the fixed version will
* throw an exception if the setter is invoked. The dynamic version will
* allow the version to be changed, if the new version is greater than the
* version already set.
*/
@Test
public void testSetVersion() {
// Create every type of expected PDFVersion
for (Version originalVersion : Version.values()) {
// Compare against every type of Version
for (Version setVersion : Version.values()) {
testDynamicController(originalVersion, setVersion);
testFixedController(originalVersion, setVersion);
}
}
}
/**
* The fixed implementation will throw an exception if an attempt is made to change its
* version.
*
* @param originalVersion the version given to the constructor when PDFVersion instantiated
* @param setVersion the version being set
*/
private void testFixedController(Version originalVersion, Version setVersion) {
if (originalVersion.compareTo(Version.V1_4) >= 0) {
VersionController fixedVC = VersionController
.getFixedVersionController(originalVersion);
try {
fixedVC.setPDFVersion(setVersion);
if (setVersion.compareTo(originalVersion) != 0) {
fail("The FixedVersionController should throw an exception if an attempt to change "
+ "the version is made");
}
} catch (IllegalStateException e) {
// PASS
}
// Changes are NOT allowed, the original version is immutable
assertEquals(originalVersion, fixedVC.getPDFVersion());
// The document version is NEVER changed
assertEquals(Version.V1_4, doc.getPDFVersion());
// the /Version parameter shouldn't be present in the document catalog
assertNull(doc.getRoot().get("Version"));
} else {
try {
VersionController.getFixedVersionController(originalVersion);
fail("Versions < 1.4 aren't allowed.");
} catch (IllegalArgumentException e) {
// PASS
}
}
}
/**
* The dynamic implementation allows the version to be changed. However, the version given in
* the constructor will be the version set in the header of the PDF document. Any change to the
* version will then be made in the document catalog.
*
* @param originalVersion the version given to the constructor when PDFVersion instantiated
* @param setVersion the version being set
*/
private void testDynamicController(Version originalVersion, Version setVersion) {
VersionController testSubj = VersionController.getDynamicVersionController(originalVersion,
doc);
testSubj.setPDFVersion(setVersion);
PDFName nameVersion = new PDFName(setVersion.toString());
if (originalVersion.compareTo(setVersion) < 0) {
versionShouldChange(setVersion, testSubj, nameVersion);
} else {
versionShouldNotChange(originalVersion, testSubj);
}
doc.getRoot().put("Version", null);
}
private void versionShouldNotChange(Version originalVersion, VersionController testSubj) {
assertEquals(originalVersion, testSubj.getPDFVersion());
assertNull(doc.getRoot().get("Version"));
}
private void versionShouldChange(Version setVersion, VersionController testSubj,
PDFName nameVersion) {
assertEquals(setVersion, testSubj.getPDFVersion());
assertEquals(nameVersion.toString(), doc.getRoot().get("Version").toString());
}
}