diff --git a/build.xml b/build.xml
index c04db3d0e0..bf960aa88e 100644
--- a/build.xml
+++ b/build.xml
@@ -797,7 +797,6 @@ under the License.
-
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/OpenXML4JTestDataSamples.java b/src/ooxml/testcases/org/apache/poi/openxml4j/OpenXML4JTestDataSamples.java
new file mode 100755
index 0000000000..62291d37bd
--- /dev/null
+++ b/src/ooxml/testcases/org/apache/poi/openxml4j/OpenXML4JTestDataSamples.java
@@ -0,0 +1,148 @@
+/* ====================================================================
+ 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.
+==================================================================== */
+
+package org.apache.poi.openxml4j;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+
+/**
+ * Centralises logic for finding/opening sample files for ooxml4j unit tests
+ *
+ * @author jmicich
+ */
+public final class OpenXML4JTestDataSamples {
+
+ private static final String IN_DIR_PROP_NAME = "openxml4j.testdata.input";
+ private static final String COMP_IN_DIR_PROP_NAME = "openxml4j.compliance.input";
+
+ private static File _sampleInputDir;
+ private static File _sampleOutputDir;
+ private static File _complianceSampleInputDir;
+
+ private OpenXML4JTestDataSamples() {
+ // no instances of this class
+ }
+
+ public static InputStream openSampleStream(String sampleFileName) {
+ File f = getSampleFile(sampleFileName);
+ try {
+ return new FileInputStream(f);
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ public static String getSampleFileName(String sampleFileName) {
+ // TODO - investigate allowing read/write access for package opened on stream
+ return getSampleFile(sampleFileName).getAbsolutePath();
+ }
+
+ public static File getSampleFile(String sampleFileName) {
+ File dir = getSampleInputDir();
+ File f = new File(dir, sampleFileName);
+ if (!f.exists()) {
+ throw new RuntimeException("Specified sample file '"
+ + f.getAbsolutePath() + "' does not exist");
+ }
+ if (f.isDirectory()) {
+ throw new RuntimeException("Specified sample file '"
+ + f.getAbsolutePath() + "' is a directory");
+ }
+ return f;
+ }
+
+ public static File getOutputFile(String outputFileName) {
+ File dir = getSampleOutputDir();
+ return new File(dir, outputFileName);
+ }
+
+
+ public static InputStream openComplianceSampleStream(String sampleFileName) {
+ File f = getComplianceSampleFile(sampleFileName);
+ try {
+ return new FileInputStream(f);
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ private static File getComplianceSampleFile(String sampleFileName) {
+ File dir = getComplianceSampleInputDir();
+ File f = new File(dir, sampleFileName);
+ if (!f.exists()) {
+ throw new RuntimeException("Specified sample file '"
+ + f.getAbsolutePath() + "' does not exist");
+ }
+ if (f.isDirectory()) {
+ throw new RuntimeException("Specified sample file '"
+ + f.getAbsolutePath() + "' is a directory");
+ }
+ return f;
+ }
+ public static String getComplianceSampleFileName(String sampleFileName) {
+ return getComplianceSampleFile(sampleFileName).getAbsolutePath();
+ }
+ private static File getComplianceSampleInputDir() {
+ if (_complianceSampleInputDir == null) {
+ _complianceSampleInputDir = getAndCheckDirByProperty(COMP_IN_DIR_PROP_NAME);
+ }
+ return _complianceSampleInputDir;
+ }
+
+
+ private static File getSampleInputDir() {
+ if (_sampleInputDir == null) {
+ _sampleInputDir = getAndCheckDirByProperty(IN_DIR_PROP_NAME);
+ }
+ return _sampleInputDir;
+ }
+
+ private static File getAndCheckDirByProperty(String propName) {
+ String dirName = System.getProperty(propName);
+ File dir = new File(dirName);
+ if (!dir.exists()) {
+ throw new RuntimeException("Specified '" + propName + "' directory: '"
+ + dirName + "' does not exist");
+ }
+ if (!dir.isDirectory()) {
+ throw new RuntimeException("Specified '" + propName + "' directory: '"
+ + dirName + "' is a not a proper directory");
+ }
+ return dir;
+ }
+
+ private static File getSampleOutputDir() {
+ if (_sampleOutputDir == null) {
+ File dir = new File(System.getProperty("java.io.tmpdir"), "poifiles");
+ if (dir.exists()) {
+ if (!dir.isDirectory()) {
+ throw new RuntimeException("Specified output directory: '"
+ + dir.getAbsolutePath() + "' is a not a proper directory");
+ }
+ } else {
+ if (!dir.mkdirs()) {
+ throw new RuntimeException("Failed to create directory: '"
+ + dir.getAbsolutePath() + "'");
+ }
+ }
+ _sampleOutputDir = dir;
+ }
+ return _sampleOutputDir;
+ }
+
+}
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/TestCore.java b/src/ooxml/testcases/org/apache/poi/openxml4j/TestCore.java
deleted file mode 100755
index 26bf0ce0fe..0000000000
--- a/src/ooxml/testcases/org/apache/poi/openxml4j/TestCore.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/* ====================================================================
- 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.
-==================================================================== */
-
-package org.apache.poi.openxml4j;
-
-import java.io.File;
-
-import org.apache.log4j.Logger;
-import org.apache.log4j.PropertyConfigurator;
-
-/**
- * Core helper for tests.
- *
- * @author Julien Chable
- * @version 1.0
- */
-public class TestCore {
-
- private String testRootPath; // Test root path
-
- /**
- * All sample document are normally located at this place.
- */
- private static String pathRootProject; // Project root path
-
- /**
- * Demo logger
- */
- private static Logger logger = Logger.getLogger("org.apache.poi.openxml4j.test");
-
- static {
- pathRootProject = System.getProperty("user.dir") + File.separator + "bin";
-
- // Log4j configuration
- //PropertyConfigurator.configure(pathRootProject + File.separator
- // + "config.log4j");
- }
-
- /**
- * Constructor. Initialize the demo.
- *
- */
- public TestCore(Class cl) {
- init(cl);
- }
-
- /**
- * Initialize the test root path
- */
- public void init(Class cl) {
- String packageName = cl.getPackage().getName();
- // replace . by /
- String sep = File.separator;
- if (sep.equals("\\")) {
- sep = "\\\\";
- }
- testRootPath = pathRootProject + File.separator
- + packageName.replaceAll("\\.", sep)
- + File.separator;
- }
-
- // Accessors
-
- /**
- * Gets the test root path.
- *
- * @return The test root path.
- */
- public String getTestRootPath() {
- return testRootPath;
- }
-
- /**
- * Sets the test root path.
- *
- * @param testRoot
- */
- public void setTestRootPath(String testRoot) {
- this.testRootPath = testRoot;
- }
-
- /**
- * @return the logger
- */
- public static Logger getLogger() {
- return logger;
- }
-}
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/AllTests.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/AllOpenXML4JTests.java
similarity index 76%
rename from src/ooxml/testcases/org/apache/poi/openxml4j/opc/AllTests.java
rename to src/ooxml/testcases/org/apache/poi/openxml4j/opc/AllOpenXML4JTests.java
index 4b2cc45a56..12bc3888b2 100755
--- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/AllTests.java
+++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/AllOpenXML4JTests.java
@@ -20,19 +20,25 @@ package org.apache.poi.openxml4j.opc;
import junit.framework.Test;
import junit.framework.TestSuite;
-public class AllTests {
+import org.apache.poi.openxml4j.opc.compliance.AllOpenXML4JComplianceTests;
+import org.apache.poi.openxml4j.opc.internal.AllOpenXML4JInternalTests;
+
+public final class AllOpenXML4JTests {
public static Test suite() {
- TestSuite suite = new TestSuite(
- "Functional tests for org.apache.poi.openxml4j.opc");
- suite.addTestSuite(TestListParts.class);
+
+ TestSuite suite = new TestSuite(AllOpenXML4JTests.class.getName());
+ suite.addTestSuite(TestContentType.class);
suite.addTestSuite(TestFileHelper.class);
+ suite.addTestSuite(TestListParts.class);
suite.addTestSuite(TestPackage.class);
suite.addTestSuite(TestPackageCoreProperties.class);
suite.addTestSuite(TestPackagePartName.class);
- suite.addTestSuite(TestPackagingURIHelper.class);
- suite.addTestSuite(TestContentType.class);
suite.addTestSuite(TestPackageThumbnail.class);
+ suite.addTestSuite(TestPackagingURIHelper.class);
+ suite.addTestSuite(TestRelationships.class);
+ suite.addTest(AllOpenXML4JComplianceTests.suite());
+ suite.addTest(AllOpenXML4JInternalTests.suite());
return suite;
}
}
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/OUTPUT/TestCreatePackageOUTPUT.docx b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/OUTPUT/TestCreatePackageOUTPUT.docx
deleted file mode 100755
index 3da1daeb98..0000000000
Binary files a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/OUTPUT/TestCreatePackageOUTPUT.docx and /dev/null differ
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/OUTPUT/TestPackageRemovePartRecursiveTMP.docx b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/OUTPUT/TestPackageRemovePartRecursiveTMP.docx
deleted file mode 100755
index c8c43dce69..0000000000
Binary files a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/OUTPUT/TestPackageRemovePartRecursiveTMP.docx and /dev/null differ
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/OUTPUT/TestPackageThumbnailOUTPUT.docx b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/OUTPUT/TestPackageThumbnailOUTPUT.docx
deleted file mode 100755
index a41daa5ec5..0000000000
Binary files a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/OUTPUT/TestPackageThumbnailOUTPUT.docx and /dev/null differ
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestListParts.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestListParts.java
index 359c02faf8..c35f57833e 100755
--- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestListParts.java
+++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestListParts.java
@@ -17,27 +17,22 @@
package org.apache.poi.openxml4j.opc;
-import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.TreeMap;
import junit.framework.TestCase;
+import org.apache.log4j.Logger;
+import org.apache.poi.openxml4j.OpenXML4JTestDataSamples;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
-import org.apache.poi.openxml4j.opc.Package;
-import org.apache.poi.openxml4j.opc.PackageAccess;
-import org.apache.poi.openxml4j.opc.PackagePart;
-import org.apache.poi.openxml4j.opc.PackagePartName;
-import org.apache.poi.openxml4j.opc.PackagingURIHelper;
-import org.apache.poi.openxml4j.TestCore;
+public final class TestListParts extends TestCase {
+ private static Logger logger = Logger.getLogger("org.apache.poi.openxml4j.test");
-public class TestListParts extends TestCase {
+ private TreeMap expectedValues;
- TestCore testCore = new TestCore(this.getClass());
-
- TreeMap expectedValues;
-
- TreeMap values;
+ private TreeMap values;
@Override
protected void setUp() throws Exception {
@@ -86,13 +81,17 @@ public class TestListParts extends TestCase {
* List all parts of a package.
*/
public void testListParts() throws InvalidFormatException {
- String filepath = System.getProperty("openxml4j.testdata.input") + File.separator
- + "sample.docx";
+ InputStream is = OpenXML4JTestDataSamples.openSampleStream("sample.docx");
- Package p = Package.open(filepath, PackageAccess.READ);
+ Package p;
+ try {
+ p = Package.open(is);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
for (PackagePart part : p.getParts()) {
values.put(part.getPartName(), part.getContentType());
- TestCore.getLogger().debug(part.getPartName());
+ logger.debug(part.getPartName());
}
// Compare expected values with values return by the package
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java
index 8d4e3313e2..0b95bbe119 100755
--- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java
+++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java
@@ -30,33 +30,28 @@ import java.util.TreeMap;
import junit.framework.TestCase;
+import org.apache.log4j.Logger;
+import org.apache.poi.openxml4j.OpenXML4JTestDataSamples;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.openxml4j.opc.internal.ContentTypeManager;
+import org.apache.poi.openxml4j.opc.internal.FileHelper;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Namespace;
import org.dom4j.QName;
-import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
-import org.apache.poi.openxml4j.opc.internal.ContentTypeManager;
-import org.apache.poi.openxml4j.opc.internal.FileHelper;
-import org.apache.poi.openxml4j.TestCore;
-
-public class TestPackage extends TestCase {
-
- TestCore testCore = new TestCore(this.getClass());
+public final class TestPackage extends TestCase {
+ private static Logger logger = Logger.getLogger("org.apache.poi.openxml4j.test");
/**
* Test that just opening and closing the file doesn't alter the document.
*/
public void testOpenSave() throws Exception {
- File originalFile = new File(System.getProperty("openxml4j.testdata.input") + File.separator
- + "TestPackageCommon.docx");
- File targetFile = new File(System.getProperty("openxml4j.testdata.output")
- + File.separator + "TestPackageOpenSaveTMP.docx");
- assertTrue("Source file " + originalFile + " doesn't exist!", originalFile.exists());
+ String originalFile = OpenXML4JTestDataSamples.getSampleFileName("TestPackageCommon.docx");
+ File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestPackageOpenSaveTMP.docx");
- Package p = Package.open(originalFile.getAbsolutePath(),
- PackageAccess.READ_WRITE);
+ Package p = Package.open(originalFile, PackageAccess.READ_WRITE);
p.save(targetFile.getAbsoluteFile());
// Compare the original and newly saved document
@@ -70,8 +65,7 @@ public class TestPackage extends TestCase {
* the correct default content types
*/
public void testCreateGetsContentTypes() throws Exception {
- File targetFile = new File(System.getProperty("openxml4j.testdata.output") + File.separator
- + "TestCreatePackageTMP.docx");
+ File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestCreatePackageTMP.docx");
// Zap the target file, in case of an earlier run
if(targetFile.exists()) targetFile.delete();
@@ -103,11 +97,9 @@ public class TestPackage extends TestCase {
* Test package creation.
*/
public void testCreatePackageAddPart() throws Exception {
- File targetFile = new File(System.getProperty("openxml4j.testdata.output") + File.separator
- + "TestCreatePackageTMP.docx");
+ File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestCreatePackageTMP.docx");
- File expectedFile = new File(System.getProperty("openxml4j.testdata.output") + File.separator
- + "TestCreatePackageOUTPUT.docx");
+ File expectedFileFile = OpenXML4JTestDataSamples.getOutputFile("TestCreatePackageOUTPUT.docx");
// Zap the target file, in case of an earlier run
if(targetFile.exists()) targetFile.delete();
@@ -208,14 +200,11 @@ public class TestPackage extends TestCase {
* Test package opening.
*/
public void testOpenPackage() throws Exception {
- File targetFile = new File(System.getProperty("openxml4j.testdata.output")
- + File.separator + "TestOpenPackageTMP.docx");
+ File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestOpenPackageTMP.docx");
- File inputFile = new File(System.getProperty("openxml4j.testdata.input")
- + File.separator + "TestOpenPackageINPUT.docx");
+ File inputFile = OpenXML4JTestDataSamples.getSampleFile("TestOpenPackageINPUT.docx");
- File expectedFile = new File(System.getProperty("openxml4j.testdata.output")
- + File.separator + "TestOpenPackageOUTPUT.docx");
+ File expectedFile = OpenXML4JTestDataSamples.getOutputFile("TestOpenPackageOUTPUT.docx");
// Copy the input file in the output directory
FileHelper.copyFile(inputFile, targetFile);
@@ -271,14 +260,10 @@ public class TestPackage extends TestCase {
* to a file
*/
public void testSaveToOutputStream() throws Exception {
- File originalFile = new File(System.getProperty("openxml4j.testdata.input") + File.separator
- + "TestPackageCommon.docx");
- File targetFile = new File(System.getProperty("openxml4j.testdata.output") + File.separator
- + "TestPackageOpenSaveTMP.docx");
- assertTrue("Source file " + originalFile + " doesn't exist!", originalFile.exists());
+ String originalFile = OpenXML4JTestDataSamples.getSampleFileName("TestPackageCommon.docx");
+ File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestPackageOpenSaveTMP.docx");
- Package p = Package.open(originalFile.getAbsolutePath(),
- PackageAccess.READ_WRITE);
+ Package p = Package.open(originalFile, PackageAccess.READ_WRITE);
FileOutputStream fout = new FileOutputStream(targetFile);
p.save(fout);
fout.close();
@@ -295,9 +280,7 @@ public class TestPackage extends TestCase {
* reading from a file
*/
public void testOpenFromInputStream() throws Exception {
- File originalFile = new File(System.getProperty("openxml4j.testdata.input") + File.separator
- + "TestPackageCommon.docx");
- assertTrue("Source file " + originalFile + " doesn't exist!", originalFile.exists());
+ String originalFile = OpenXML4JTestDataSamples.getSampleFileName("TestPackageCommon.docx");
FileInputStream finp = new FileInputStream(originalFile);
@@ -313,18 +296,14 @@ public class TestPackage extends TestCase {
}
/**
- * TODO: fix and unable
+ * TODO: fix and enable
*/
public void disabled_testRemovePartRecursive() throws Exception {
- File originalFile = new File(System.getProperty("openxml4j.testdata.input") + File.separator
- + "TestPackageCommon.docx");
- File targetFile = new File(System.getProperty("openxml4j.testdata.output") + File.separator
- + "TestPackageRemovePartRecursiveOUTPUT.docx");
- File tempFile = new File(System.getProperty("openxml4j.testdata.output") + File.separator
- + "TestPackageRemovePartRecursiveTMP.docx");
+ String originalFile = OpenXML4JTestDataSamples.getSampleFileName("TestPackageCommon.docx");
+ File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestPackageRemovePartRecursiveOUTPUT.docx");
+ File tempFile = OpenXML4JTestDataSamples.getOutputFile("TestPackageRemovePartRecursiveTMP.docx");
- Package p = Package.open(originalFile.getAbsolutePath(),
- PackageAccess.READ_WRITE);
+ Package p = Package.open(originalFile, PackageAccess.READ_WRITE);
p.removePartRecursive(PackagingURIHelper.createPartName(new URI(
"/word/document.xml")));
p.save(tempFile.getAbsoluteFile());
@@ -372,8 +351,7 @@ public class TestPackage extends TestCase {
.createPartName("/word/webSettings.xml"),
"application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml");
- String filepath = System.getProperty("openxml4j.testdata.input") + File.separator
- + "sample.docx";
+ String filepath = OpenXML4JTestDataSamples.getSampleFileName("sample.docx");
Package p = Package.open(filepath, PackageAccess.READ_WRITE);
// Remove the core part
@@ -381,7 +359,7 @@ public class TestPackage extends TestCase {
for (PackagePart part : p.getParts()) {
values.put(part.getPartName(), part.getContentType());
- TestCore.getLogger().debug(part.getPartName());
+ logger.debug(part.getPartName());
}
// Compare expected values with values return by the package
@@ -389,7 +367,7 @@ public class TestPackage extends TestCase {
assertNotNull(values.get(partName));
assertEquals(expectedValues.get(partName), values.get(partName));
}
- // Don't save modfications
+ // Don't save modifications
p.revert();
}
@@ -411,8 +389,7 @@ public class TestPackage extends TestCase {
.createPartName("/docProps/core.xml"),
"application/vnd.openxmlformats-package.core-properties+xml");
- String filepath = System.getProperty("openxml4j.testdata.input") + File.separator
- + "sample.docx";
+ String filepath = OpenXML4JTestDataSamples.getSampleFileName("sample.docx");
Package p = Package.open(filepath, PackageAccess.READ_WRITE);
// Remove the core part
@@ -420,7 +397,7 @@ public class TestPackage extends TestCase {
for (PackagePart part : p.getParts()) {
values.put(part.getPartName(), part.getContentType());
- TestCore.getLogger().debug(part.getPartName());
+ logger.debug(part.getPartName());
}
// Compare expected values with values return by the package
@@ -428,7 +405,7 @@ public class TestPackage extends TestCase {
assertNotNull(values.get(partName));
assertEquals(expectedValues.get(partName), values.get(partName));
}
- // Don't save modfications
+ // Don't save modifications
p.revert();
}
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackageCoreProperties.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackageCoreProperties.java
index acb7cd84f4..54e21b89d3 100755
--- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackageCoreProperties.java
+++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackageCoreProperties.java
@@ -18,22 +18,20 @@
package org.apache.poi.openxml4j.opc;
import java.io.File;
+import java.io.IOException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
import junit.framework.TestCase;
+import org.apache.log4j.Logger;
+import org.apache.poi.openxml4j.OpenXML4JTestDataSamples;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.openxml4j.util.Nullable;
-import org.apache.poi.openxml4j.TestCore;
-import org.apache.log4j.Logger;
-
-public class TestPackageCoreProperties extends TestCase {
-
- TestCore testCore = new TestCore(this.getClass());
+public final class TestPackageCoreProperties extends TestCase {
/**
* Test package core properties getters.
@@ -41,13 +39,14 @@ public class TestPackageCoreProperties extends TestCase {
public void testGetProperties() {
try {
// Open the package
- Package p = Package.open(System.getProperty("openxml4j.testdata.input") + File.separator
- + "TestPackageCoreProperiesGetters.docx",
- PackageAccess.READ);
+ Package p = Package.open(OpenXML4JTestDataSamples.openSampleStream("TestPackageCoreProperiesGetters.docx"));
compareProperties(p);
p.revert();
} catch (OpenXML4JException e) {
Logger.getLogger("org.apache.poi.openxml4j.demo").debug(e.getMessage());
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
}
}
@@ -55,11 +54,9 @@ public class TestPackageCoreProperties extends TestCase {
* Test package core properties setters.
*/
public void testSetProperties() throws Exception {
- String inputPath = System.getProperty("openxml4j.testdata.input")
- + File.separator + "TestPackageCoreProperiesSetters.docx";
+ String inputPath = OpenXML4JTestDataSamples.getSampleFileName("TestPackageCoreProperiesSetters.docx");
- String outputFilename = System.getProperty("openxml4j.testdata.input")
- + File.separator + "TestPackageCoreProperiesSettersOUTPUT.docx";
+ File outputFile = OpenXML4JTestDataSamples.getOutputFile("TestPackageCoreProperiesSettersOUTPUT.docx");
// Open package
Package p = Package.open(inputPath, PackageAccess.READ_WRITE);
@@ -86,14 +83,13 @@ public class TestPackageCoreProperties extends TestCase {
props.setSubjectProperty("MySubject");
props.setVersionProperty("2");
// Save the package in the output directory
- p.save(new File(outputFilename));
+ p.save(outputFile);
// Open the newly created file to check core properties saved values.
- File fOut = new File(outputFilename);
- Package p2 = Package.open(outputFilename, PackageAccess.READ);
+ Package p2 = Package.open(outputFile.getAbsolutePath(), PackageAccess.READ);
compareProperties(p2);
p2.revert();
- fOut.delete();
+ outputFile.delete();
}
private void compareProperties(Package p) throws InvalidFormatException {
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackageThumbnail.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackageThumbnail.java
index bbf5402f48..a7b9e7b6f6 100755
--- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackageThumbnail.java
+++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackageThumbnail.java
@@ -21,47 +21,37 @@ import java.io.File;
import junit.framework.TestCase;
-import org.apache.poi.openxml4j.opc.Package;
-import org.apache.poi.openxml4j.opc.PackageAccess;
-import org.apache.poi.openxml4j.opc.PackageRelationshipTypes;
-
-import org.apache.poi.openxml4j.TestCore;
+import org.apache.poi.openxml4j.OpenXML4JTestDataSamples;
/**
* Test the addition of thumbnail in a package.
*
* @author Julien Chable
*/
-public class TestPackageThumbnail extends TestCase {
-
- TestCore testCore = new TestCore(this.getClass());
+public final class TestPackageThumbnail extends TestCase {
/**
* Test package addThumbnail() method.
*/
public void testSetProperties() throws Exception {
- String inputPath = System.getProperty("openxml4j.testdata.input")
- + File.separator + "TestPackageThumbnail.docx";
+ String inputPath = OpenXML4JTestDataSamples.getSampleFileName("TestPackageThumbnail.docx");
- String imagePath = System.getProperty("openxml4j.testdata.input")
- + File.separator + "thumbnail.jpg";
+ String imagePath = OpenXML4JTestDataSamples.getSampleFileName("thumbnail.jpg");
- String outputFilename = System.getProperty("openxml4j.testdata.output")
- + File.separator + "TestPackageThumbnailOUTPUT.docx";
+ File outputFile = OpenXML4JTestDataSamples.getOutputFile("TestPackageThumbnailOUTPUT.docx");
// Open package
Package p = Package.open(inputPath, PackageAccess.READ_WRITE);
p.addThumbnail(imagePath);
// Save the package in the output directory
- p.save(new File(outputFilename));
+ p.save(outputFile);
// Open the newly created file to check core properties saved values.
- File fOut = new File(outputFilename);
- Package p2 = Package.open(outputFilename, PackageAccess.READ);
+ Package p2 = Package.open(outputFile.getAbsolutePath(), PackageAccess.READ);
if (p2.getRelationshipsByType(PackageRelationshipTypes.THUMBNAIL)
.size() == 0)
fail("Thumbnail not added to the package !");
p2.revert();
- //fOut.delete();
+ outputFile.delete();
}
}
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestRelationships.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestRelationships.java
index 3ca1281033..972bd268a3 100755
--- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestRelationships.java
+++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestRelationships.java
@@ -19,32 +19,23 @@ package org.apache.poi.openxml4j.opc;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
-import java.io.File;
+import java.io.InputStream;
import junit.framework.TestCase;
-import org.apache.poi.openxml4j.opc.Package;
-import org.apache.poi.openxml4j.opc.PackageAccess;
-import org.apache.poi.openxml4j.opc.PackagePart;
-import org.apache.poi.openxml4j.opc.PackagePartName;
-import org.apache.poi.openxml4j.opc.PackageRelationship;
-import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
-import org.apache.poi.openxml4j.opc.PackageRelationshipTypes;
-import org.apache.poi.openxml4j.opc.PackagingURIHelper;
-import org.apache.poi.openxml4j.opc.TargetMode;
-
-import org.apache.poi.openxml4j.TestCore;
+import org.apache.log4j.Logger;
+import org.apache.poi.openxml4j.OpenXML4JTestDataSamples;
public class TestRelationships extends TestCase {
- public static final String HYPERLINK_REL_TYPE =
+ private static final String HYPERLINK_REL_TYPE =
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink";
- public static final String COMMENTS_REL_TYPE =
+ private static final String COMMENTS_REL_TYPE =
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments";
- public static final String SHEET_WITH_COMMENTS =
+ private static final String SHEET_WITH_COMMENTS =
"/xl/worksheets/sheet1.xml";
- TestCore testCore = new TestCore(this.getClass());
+ private static Logger logger = Logger.getLogger("org.apache.poi.openxml4j.test");
/**
* Test relationships are correctly loaded. This at the moment fails (as of r499)
@@ -53,10 +44,9 @@ public class TestRelationships extends TestCase {
* really look also for not yet loaded parts.
*/
public void testLoadRelationships() throws Exception {
- String filepath = System.getProperty("openxml4j.testdata.input") + File.separator
- + "sample.xlsx";
- Package pkg = Package.open(filepath, PackageAccess.READ);
- TestCore.getLogger().debug("1: " + pkg);
+ InputStream is = OpenXML4JTestDataSamples.openSampleStream("sample.xlsx");
+ Package pkg = Package.open(is);
+ logger.debug("1: " + pkg);
PackageRelationshipCollection rels = pkg.getRelationshipsByType(PackageRelationshipTypes.CORE_DOCUMENT);
PackageRelationship coreDocRelationship = rels.getRelationship(0);
PackagePart corePart = pkg.getPart(coreDocRelationship);
@@ -75,10 +65,8 @@ public class TestRelationships extends TestCase {
* type, then grab from within there by id
*/
public void testFetchFromCollection() throws Exception {
- String filepath = System.getProperty("openxml4j.testdata.input") + File.separator
- + "ExcelWithHyperlinks.xlsx";
-
- Package pkg = Package.open(filepath, PackageAccess.READ);
+ InputStream is = OpenXML4JTestDataSamples.openSampleStream("ExcelWithHyperlinks.xlsx");
+ Package pkg = Package.open(is);
PackagePart sheet = pkg.getPart(
PackagingURIHelper.createPartName(SHEET_WITH_COMMENTS));
assertNotNull(sheet);
@@ -118,10 +106,8 @@ public class TestRelationships extends TestCase {
* external hyperlinks. Check we can load these ok.
*/
public void testLoadExcelHyperlinkRelations() throws Exception {
- String filepath = System.getProperty("openxml4j.testdata.input") + File.separator
- + "ExcelWithHyperlinks.xlsx";
-
- Package pkg = Package.open(filepath, PackageAccess.READ);
+ InputStream is = OpenXML4JTestDataSamples.openSampleStream("ExcelWithHyperlinks.xlsx");
+ Package pkg = Package.open(is);
PackagePart sheet = pkg.getPart(
PackagingURIHelper.createPartName(SHEET_WITH_COMMENTS));
assertNotNull(sheet);
@@ -150,13 +136,11 @@ public class TestRelationships extends TestCase {
/*
* Excel uses relations on sheets to store the details of
- * external hyperlinks. Check we can create these ok,
+ * external hyperlinks. Check we can create these OK,
* then still read them later
*/
public void testCreateExcelHyperlinkRelations() throws Exception {
- String filepath = System.getProperty("openxml4j.testdata.input") + File.separator
- + "ExcelWithHyperlinks.xlsx";
-
+ String filepath = OpenXML4JTestDataSamples.getSampleFileName("ExcelWithHyperlinks.xlsx");
Package pkg = Package.open(filepath, PackageAccess.READ_WRITE);
PackagePart sheet = pkg.getPart(
PackagingURIHelper.createPartName(SHEET_WITH_COMMENTS));
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/AllTests.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/AllOpenXML4JComplianceTests.java
similarity index 75%
rename from src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/AllTests.java
rename to src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/AllOpenXML4JComplianceTests.java
index 56974b0caf..cd990ccf08 100755
--- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/AllTests.java
+++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/AllOpenXML4JComplianceTests.java
@@ -20,16 +20,13 @@ package org.apache.poi.openxml4j.opc.compliance;
import junit.framework.Test;
import junit.framework.TestSuite;
-public class AllTests {
+public class AllOpenXML4JComplianceTests {
public static Test suite() {
- TestSuite suite = new TestSuite(
- "Test for test.org.apache.poi.openxml4j.opc.compliance");
- // $JUnit-BEGIN$
- suite.addTestSuite(OPCCompliance_PartName.class);
- suite.addTestSuite(OPCCompliance_CoreProperties.class);
- suite.addTestSuite(OPCCompliance_PackageModel.class);
- // $JUnit-END$
+ TestSuite suite = new TestSuite(AllOpenXML4JComplianceTests.class.getName());
+ suite.addTestSuite(TestOPCCompliancePartName.class);
+ suite.addTestSuite(TestOPCComplianceCoreProperties.class);
+ suite.addTestSuite(TestOPCCompliancePackageModel.class);
return suite;
}
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/OPCCompliance_CoreProperties.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/OPCCompliance_CoreProperties.java
deleted file mode 100755
index a26fd3012e..0000000000
--- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/OPCCompliance_CoreProperties.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/* ====================================================================
- 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.
-==================================================================== */
-
-package org.apache.poi.openxml4j.opc.compliance;
-
-import java.io.File;
-import java.net.URI;
-import java.net.URISyntaxException;
-
-import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
-import org.apache.poi.openxml4j.exceptions.InvalidOperationException;
-import org.apache.poi.openxml4j.opc.ContentTypes;
-import org.apache.poi.openxml4j.opc.Package;
-import org.apache.poi.openxml4j.opc.PackageRelationshipTypes;
-import org.apache.poi.openxml4j.opc.PackagingURIHelper;
-import org.apache.poi.openxml4j.opc.TargetMode;
-
-import org.apache.poi.openxml4j.TestCore;
-import junit.framework.TestCase;
-
-/**
- * Test core properties Open Packaging Convention compliance.
- *
- * M4.1: The format designer shall specify and the format producer shall create
- * at most one core properties relationship for a package. A format consumer
- * shall consider more than one core properties relationship for a package to be
- * an error. If present, the relationship shall target the Core Properties part.
- *
- * M4.2: The format designer shall not specify and the format producer shall not
- * create Core Properties that use the Markup Compatibility namespace as defined
- * in Annex F, "Standard Namespaces and Content Types". A format consumer shall
- * consider the use of the Markup Compatibility namespace to be an error.
- *
- * M4.3: Producers shall not create a document element that contains refinements
- * to the Dublin Core elements, except for the two specified in the schema:
- * and Consumers shall consider a document
- * element that violates this constraint to be an error.
- *
- * M4.4: Producers shall not create a document element that contains the
- * xml:lang attribute. Consumers shall consider a document element that violates
- * this constraint to be an error.
- *
- * M4.5: Producers shall not create a document element that contains the
- * xsi:type attribute, except for a or
- * element where the xsi:type attribute shall be present and shall hold the
- * value dcterms:W3CDTF, where dcterms is the namespace prefix of the Dublin
- * Core namespace. Consumers shall consider a document element that violates
- * this constraint to be an error.
- *
- * @author Julien Chable
- * @version 1.0
- */
-public class OPCCompliance_CoreProperties extends TestCase {
-
- TestCore testCore = new TestCore(this.getClass());
-
- public void testCorePropertiesPart() {
- Package pkg = null;
- try {
- String filepath = System.getProperty("openxml4j.compliance.input")
- + File.separator
- + "OPCCompliance_CoreProperties_OnlyOneCorePropertiesPart.docx";
- pkg = Package.open(filepath);
- // Normally must thrown an InvalidFormatException exception.
- } catch (InvalidFormatException e) {
- fail("OPC compliance failure: the core properties is considered as invalid than it's not !");
- } finally {
- pkg.revert();
- }
- }
-
- /**
- * Test M4.1 rule.
- */
- public void testOnlyOneCorePropertiesPart() {
- Package pkg = null;
- try {
- String filepath = System.getProperty("openxml4j.compliance.input")
- + File.separator
- + "OPCCompliance_CoreProperties_OnlyOneCorePropertiesPartFAIL.docx";
- pkg = Package.open(filepath);
- // Normally must thrown an InvalidFormatException exception.
- fail("OPC compliance failure: M4.1 -> A format consumer shall consider more than one core properties relationship for a package to be an error.");
- } catch (InvalidFormatException e) {
- // DO nothing, it's the normal behavior
- } finally {
- if (pkg != null)
- pkg.revert();
- }
- }
-
- /**
- * Test M4.1 rule.
- */
- public void testOnlyOneCorePropertiesPart_AddRelationship() {
- Package pkg = null;
- try {
- String filepath = System.getProperty("openxml4j.testdata.input")
- + File.separator
- + "OPCCompliance_CoreProperties_OnlyOneCorePropertiesPart.docx";
- pkg = Package.open(filepath);
- pkg.addRelationship(PackagingURIHelper.createPartName(new URI(
- "/docProps/core2.xml")), TargetMode.INTERNAL,
- PackageRelationshipTypes.CORE_PROPERTIES);
- // Normally must thrown an InvalidFormatException exception.
- fail("OPC compliance failure: M4.1 -> A format consumer shall consider more than one core properties relationship for a package to be an error.");
- } catch (InvalidOperationException e) {
- // Do nothing, it's the normal behavior
- } catch (InvalidFormatException e) {
- // Do nothing, it's the normal behavior
- } catch (URISyntaxException e) {
- // Should never happen
- } finally {
- if (pkg != null)
- pkg.revert();
- }
- }
-
- /**
- * Test M4.1 rule.
- */
- public void testOnlyOneCorePropertiesPart_AddPart() {
- Package pkg = null;
- try {
- String filepath = System.getProperty("openxml4j.testdata.input")
- + File.separator
- + "OPCCompliance_CoreProperties_OnlyOneCorePropertiesPart.docx";
- pkg = Package.open(filepath);
- pkg.createPart(PackagingURIHelper.createPartName(new URI(
- "/docProps/core2.xml")), ContentTypes.CORE_PROPERTIES_PART);
- // Normally must thrown an InvalidFormatException exception.
- fail("OPC compliance failure: M4.1 -> A format consumer shall consider more than one core properties relationship for a package to be an error.");
- } catch (InvalidFormatException e) {
- // Do nothing, it's the normal behavior
- } catch (InvalidOperationException e) {
- // Do nothing, it's the normal behavior
- } catch (URISyntaxException e) {
- // Should never happen
- } finally {
- if (pkg != null)
- pkg.revert();
- }
- }
-
- /**
- * Test M4.2 rule.
- */
- public void testDoNotUseCompatibilityMarkup() {
- Package pkg = null;
- try {
- String filepath = System.getProperty("openxml4j.compliance.input")
- + File.separator
- + "OPCCompliance_CoreProperties_DoNotUseCompatibilityMarkupFAIL.docx";
- pkg = Package.open(filepath);
- // Normally must thrown an InvalidFormatException exception.
- fail("OPC compliance failure: M4.2 -> A format consumer shall consider the use of the Markup Compatibility namespace to be an error.");
- } catch (InvalidFormatException e) {
- // Do nothing, it's the normal behavior
- } finally {
- if (pkg != null)
- pkg.revert();
- }
- }
-
- /**
- * Test M4.3 rule.
- */
- public void testDCTermsNamespaceLimitedUse() {
- Package pkg = null;
- try {
- String filepath = System.getProperty("openxml4j.compliance.input")
- + File.separator
- + "OPCCompliance_CoreProperties_DCTermsNamespaceLimitedUseFAIL.docx";
- pkg = Package.open(filepath);
- // Normally must thrown an InvalidFormatException exception.
- fail("OPC compliance failure: M4.3 -> Producers shall not create a document element that contains refinements to the Dublin Core elements, except for the two specified in the schema: and Consumers shall consider a document element that violates this constraint to be an error.");
- } catch (InvalidFormatException e) {
- // Do nothing, it's the normal behavior
- } finally {
- if (pkg != null)
- pkg.revert();
- }
- }
-
- /**
- * Test M4.4 rule.
- */
- public void testUnauthorizedXMLLangAttribute() {
- Package pkg = null;
- try {
- String filepath = System.getProperty("openxml4j.compliance.input")
- + File.separator
- + "OPCCompliance_CoreProperties_UnauthorizedXMLLangAttributeFAIL.docx";
- pkg = Package.open(filepath);
- // Normally must thrown an InvalidFormatException exception.
- fail("OPC compliance failure: M4.4 -> Producers shall not create a document element that contains refinements to the Dublin Core elements, except for the two specified in the schema: and Consumers shall consider a document element that violates this constraint to be an error.");
- } catch (InvalidFormatException e) {
- // Do nothing, it's the normal behavior
- } finally {
- if (pkg != null)
- pkg.revert();
- }
- }
-
- /**
- * Test M4.5 rule.
- */
- public void testLimitedXSITypeAttribute_NotPresent() {
- Package pkg = null;
- try {
- String filepath = System.getProperty("openxml4j.compliance.input")
- + File.separator
- + "OPCCompliance_CoreProperties_LimitedXSITypeAttribute_NotPresentFAIL.docx";
- pkg = Package.open(filepath);
- // Normally must thrown an InvalidFormatException exception.
- fail("OPC compliance failure: M4.5 -> Producers shall not create a document element that contains refinements to the Dublin Core elements, except for the two specified in the schema: and Consumers shall consider a document element that violates this constraint to be an error.");
- } catch (InvalidFormatException e) {
- // Do nothing, it's the normal behavior
- } finally {
- if (pkg != null)
- pkg.revert();
- }
- }
-
- /**
- * Test M4.5 rule.
- */
- public void testLimitedXSITypeAttribute_PresentWithUnauthorizedValue() {
- Package pkg = null;
- try {
- String filepath = System.getProperty("openxml4j.compliance.input")
- + File.separator
- + "OPCCompliance_CoreProperties_LimitedXSITypeAttribute_PresentWithUnauthorizedValueFAIL.docx";
- pkg = Package.open(filepath);
- // Normally must thrown an InvalidFormatException exception.
- fail("OPC compliance failure: M4.5 -> Producers shall not create a document element that contains refinements to the Dublin Core elements, except for the two specified in the schema: and Consumers shall consider a document element that violates this constraint to be an error.");
- } catch (InvalidFormatException e) {
- // Do nothing, it's the normal behavior
- } finally {
- if (pkg != null)
- pkg.revert();
- }
- }
-}
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCComplianceCoreProperties.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCComplianceCoreProperties.java
new file mode 100755
index 0000000000..d2cb8f616e
--- /dev/null
+++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCComplianceCoreProperties.java
@@ -0,0 +1,208 @@
+/* ====================================================================
+ 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.
+==================================================================== */
+
+package org.apache.poi.openxml4j.opc.compliance;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+
+import org.apache.poi.openxml4j.OpenXML4JTestDataSamples;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.openxml4j.exceptions.InvalidOperationException;
+import org.apache.poi.openxml4j.opc.ContentTypes;
+import org.apache.poi.openxml4j.opc.Package;
+import org.apache.poi.openxml4j.opc.PackageRelationshipTypes;
+import org.apache.poi.openxml4j.opc.PackagingURIHelper;
+import org.apache.poi.openxml4j.opc.TargetMode;
+
+/**
+ * Test core properties Open Packaging Convention compliance.
+ *
+ * M4.1: The format designer shall specify and the format producer shall create
+ * at most one core properties relationship for a package. A format consumer
+ * shall consider more than one core properties relationship for a package to be
+ * an error. If present, the relationship shall target the Core Properties part.
+ *
+ * M4.2: The format designer shall not specify and the format producer shall not
+ * create Core Properties that use the Markup Compatibility namespace as defined
+ * in Annex F, "Standard Namespaces and Content Types". A format consumer shall
+ * consider the use of the Markup Compatibility namespace to be an error.
+ *
+ * M4.3: Producers shall not create a document element that contains refinements
+ * to the Dublin Core elements, except for the two specified in the schema:
+ * and Consumers shall consider a document
+ * element that violates this constraint to be an error.
+ *
+ * M4.4: Producers shall not create a document element that contains the
+ * xml:lang attribute. Consumers shall consider a document element that violates
+ * this constraint to be an error.
+ *
+ * M4.5: Producers shall not create a document element that contains the
+ * xsi:type attribute, except for a or
+ * element where the xsi:type attribute shall be present and shall hold the
+ * value dcterms:W3CDTF, where dcterms is the namespace prefix of the Dublin
+ * Core namespace. Consumers shall consider a document element that violates
+ * this constraint to be an error.
+ *
+ * @author Julien Chable
+ */
+public final class TestOPCComplianceCoreProperties extends TestCase {
+
+ public void testCorePropertiesPart() {
+ Package pkg;
+ try {
+ InputStream is = OpenXML4JTestDataSamples.openComplianceSampleStream("OPCCompliance_CoreProperties_OnlyOneCorePropertiesPart.docx");
+ pkg = Package.open(is);
+ } catch (InvalidFormatException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ pkg.revert();
+ }
+
+ private static String extractInvalidFormatMessage(String sampleNameSuffix) {
+
+ InputStream is = OpenXML4JTestDataSamples.openComplianceSampleStream("OPCCompliance_CoreProperties_" + sampleNameSuffix);
+ Package pkg;
+ try {
+ pkg = Package.open(is);
+ } catch (InvalidFormatException e) {
+ // expected during successful test
+ return e.getMessage();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ pkg.revert();
+ // Normally must thrown an InvalidFormatException exception.
+ throw new AssertionFailedError("expected OPC compliance exception was not thrown");
+ }
+
+ /**
+ * Test M4.1 rule.
+ */
+ public void testOnlyOneCorePropertiesPart() {
+ String msg = extractInvalidFormatMessage("OnlyOneCorePropertiesPartFAIL.docx");
+ assertEquals("OPC Compliance error [M4.1]: there is more than one core properties relationship in the package !", msg);
+ }
+
+ private static URI createURI(String text) {
+ try {
+ return new URI(text);
+ } catch (URISyntaxException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * Test M4.1 rule.
+ */
+ public void testOnlyOneCorePropertiesPart_AddRelationship() {
+ InputStream is = OpenXML4JTestDataSamples.openComplianceSampleStream("OPCCompliance_CoreProperties_OnlyOneCorePropertiesPart.docx");
+ Package pkg;
+ try {
+ pkg = Package.open(is);
+ } catch (InvalidFormatException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ URI partUri = createURI("/docProps/core2.xml");
+ try {
+ pkg.addRelationship(PackagingURIHelper.createPartName(partUri), TargetMode.INTERNAL,
+ PackageRelationshipTypes.CORE_PROPERTIES);
+ fail("expected OPC compliance exception was not thrown");
+ } catch (InvalidFormatException e) {
+ throw new RuntimeException(e);
+ } catch (InvalidOperationException e) {
+ // expected during successful test
+ assertEquals("OPC Compliance error [M4.1]: can't add another core properties part ! Use the built-in package method instead.", e.getMessage());
+ }
+ pkg.revert();
+ }
+
+ /**
+ * Test M4.1 rule.
+ */
+ public void testOnlyOneCorePropertiesPart_AddPart() {
+ String sampleFileName = OpenXML4JTestDataSamples.getComplianceSampleFileName("OPCCompliance_CoreProperties_OnlyOneCorePropertiesPart.docx");
+ Package pkg = null;
+ try {
+ pkg = Package.open(sampleFileName);
+ } catch (InvalidFormatException e) {
+ throw new RuntimeException(e);
+ }
+
+ URI partUri = createURI("/docProps/core2.xml");
+ try {
+ pkg.createPart(PackagingURIHelper.createPartName(partUri),
+ ContentTypes.CORE_PROPERTIES_PART);
+ fail("expected OPC compliance exception was not thrown");
+ } catch (InvalidFormatException e) {
+ throw new RuntimeException(e);
+ } catch (InvalidOperationException e) {
+ // expected during successful test
+ assertEquals("OPC Compliance error [M4.1]: you try to add more than one core properties relationship in the package !", e.getMessage());
+ }
+ pkg.revert();
+ }
+
+ /**
+ * Test M4.2 rule.
+ */
+ public void testDoNotUseCompatibilityMarkup() {
+ String msg = extractInvalidFormatMessage("DoNotUseCompatibilityMarkupFAIL.docx");
+ assertEquals("OPC Compliance error [M4.2]: A format consumer shall consider the use of the Markup Compatibility namespace to be an error.", msg);
+ }
+
+ /**
+ * Test M4.3 rule.
+ */
+ public void testDCTermsNamespaceLimitedUse() {
+ String msg = extractInvalidFormatMessage("DCTermsNamespaceLimitedUseFAIL.docx");
+ assertEquals("OPC Compliance error [M4.3]: Producers shall not create a document element that contains refinements to the Dublin Core elements, except for the two specified in the schema: and Consumers shall consider a document element that violates this constraint to be an error.", msg);
+ }
+
+ /**
+ * Test M4.4 rule.
+ */
+ public void testUnauthorizedXMLLangAttribute() {
+ String msg = extractInvalidFormatMessage("UnauthorizedXMLLangAttributeFAIL.docx");
+ assertEquals("OPC Compliance error [M4.4]: Producers shall not create a document element that contains the xml:lang attribute. Consumers shall consider a document element that violates this constraint to be an error.", msg);
+ }
+
+ /**
+ * Test M4.5 rule.
+ */
+ public void testLimitedXSITypeAttribute_NotPresent() {
+ String msg = extractInvalidFormatMessage("LimitedXSITypeAttribute_NotPresentFAIL.docx");
+ assertEquals("The element 'created' must have the 'xsi:type' attribute present !", msg);
+ }
+
+ /**
+ * Test M4.5 rule.
+ */
+ public void testLimitedXSITypeAttribute_PresentWithUnauthorizedValue() {
+ String msg = extractInvalidFormatMessage("LimitedXSITypeAttribute_PresentWithUnauthorizedValueFAIL.docx");
+ assertEquals("The element 'modified' must have the 'xsi:type' attribute with the value 'dcterms:W3CDTF' !", msg);
+ }
+}
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/OPCCompliance_PackageModel.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCCompliancePackageModel.java
similarity index 93%
rename from src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/OPCCompliance_PackageModel.java
rename to src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCCompliancePackageModel.java
index f54c294b0b..f135b41388 100755
--- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/OPCCompliance_PackageModel.java
+++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCCompliancePackageModel.java
@@ -30,8 +30,6 @@ import org.apache.poi.openxml4j.opc.PackageRelationshipTypes;
import org.apache.poi.openxml4j.opc.PackagingURIHelper;
import org.apache.poi.openxml4j.opc.TargetMode;
-import org.apache.poi.openxml4j.TestCore;
-
/**
* Test Open Packaging Convention package model compliance.
*
@@ -40,11 +38,9 @@ import org.apache.poi.openxml4j.TestCore;
*
* @author Julien Chable
*/
-public class OPCCompliance_PackageModel extends TestCase {
+public class TestOPCCompliancePackageModel extends TestCase {
- TestCore testCore = new TestCore(this.getClass());
-
- public OPCCompliance_PackageModel(String name) {
+ public TestOPCCompliancePackageModel(String name) {
super(name);
}
@@ -54,9 +50,8 @@ public class OPCCompliance_PackageModel extends TestCase {
* [M1.11]
*/
public void testPartNameDerivationAdditionFailure() {
- Package pkg = null;
+ Package pkg = Package.create("TODELETEIFEXIST.docx");
try {
- pkg = Package.create("TODELETEIFEXIST.docx");
PackagePartName name = PackagingURIHelper
.createPartName("/word/document.xml");
PackagePartName nameDerived = PackagingURIHelper
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/OPCCompliance_PartName.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCCompliancePartName.java
similarity index 95%
rename from src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/OPCCompliance_PartName.java
rename to src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCCompliancePartName.java
index 80f6be75e9..899c43e037 100755
--- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/OPCCompliance_PartName.java
+++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCCompliancePartName.java
@@ -78,9 +78,9 @@ import org.apache.poi.openxml4j.opc.PackagingURIHelper;
* @author Julien Chable
* @version 1.0
*/
-public class OPCCompliance_PartName extends TestCase {
+public class TestOPCCompliancePartName extends TestCase {
- public OPCCompliance_PartName(String name) {
+ public TestOPCCompliancePartName(String name) {
super(name);
}
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/AllTests.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/AllOpenXML4JInternalTests.java
similarity index 86%
rename from src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/AllTests.java
rename to src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/AllOpenXML4JInternalTests.java
index 25d140c819..338f5df455 100755
--- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/AllTests.java
+++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/AllOpenXML4JInternalTests.java
@@ -20,14 +20,11 @@ package org.apache.poi.openxml4j.opc.internal;
import junit.framework.Test;
import junit.framework.TestSuite;
-public class AllTests {
+public class AllOpenXML4JInternalTests {
public static Test suite() {
- TestSuite suite = new TestSuite(
- "Test for test.org.apache.poi.openxml4j.opc.internal");
- //$JUnit-BEGIN$
+ TestSuite suite = new TestSuite(AllOpenXML4JInternalTests.class.getName());
suite.addTestSuite(TestContentTypeManager.class);
- //$JUnit-END$
return suite;
}
}
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/TestContentTypeManager.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/TestContentTypeManager.java
index 6af3e6f544..d509272d76 100755
--- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/TestContentTypeManager.java
+++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/TestContentTypeManager.java
@@ -21,15 +21,9 @@ import junit.framework.TestCase;
import org.apache.poi.openxml4j.opc.PackagePartName;
import org.apache.poi.openxml4j.opc.PackagingURIHelper;
-import org.apache.poi.openxml4j.opc.internal.ContentTypeManager;
-import org.apache.poi.openxml4j.opc.internal.ZipContentTypeManager;
-
-import org.apache.poi.openxml4j.TestCore;
public class TestContentTypeManager extends TestCase {
- TestCore testCore = new TestCore(this.getClass());
-
/**
* Test the properties part content parsing.
*/
diff --git a/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java b/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java
index d715650528..c820f2c9bc 100644
--- a/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java
+++ b/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java
@@ -62,10 +62,10 @@ public final class TestExcelExtractor extends TestCase {
assertEquals(
"Sheet1\n" +
"1000.0\t1.0\t5.0\n" +
- "2000.0\t2.0\t\n" +
- "3000.0\t3.0\t\n" +
- "4000.0\t4.0\t\n" +
- "5000.0\t5.0\t\n" +
+ "2000.0\t2.0\n" +
+ "3000.0\t3.0\n" +
+ "4000.0\t4.0\n" +
+ "5000.0\t5.0\n" +
"Sheet2\nSheet3\n",
extractor.getText()
);
@@ -75,10 +75,10 @@ public final class TestExcelExtractor extends TestCase {
assertEquals(
"Sheet1\n" +
"1000.0\t1.0\tSUMIF(A1:A5,\">4000\",B1:B5)\n" +
- "2000.0\t2.0\t\n" +
- "3000.0\t3.0\t\n" +
- "4000.0\t4.0\t\n" +
- "5000.0\t5.0\t\n" +
+ "2000.0\t2.0\n" +
+ "3000.0\t3.0\n" +
+ "4000.0\t4.0\n" +
+ "5000.0\t5.0\n" +
"Sheet2\nSheet3\n",
extractor.getText()
);
@@ -196,15 +196,15 @@ public final class TestExcelExtractor extends TestCase {
assertTrue(def.startsWith(
"Sheet1\n" +
"&[TAB]\t\n" +
- "Hello\t\n" +
- "11.0\t23.0\t\n"
+ "Hello\n" +
+ "11.0\t23.0\n"
));
assertTrue(padded.startsWith(
"Sheet1\n" +
"&[TAB]\t\n" +
- "Hello\t\t\t\t\t\t\t\t\t\t\t\n" +
- "11.0\t\t\t23.0\t\t\t\t\t\t\t\t\n"
+ "Hello\n" +
+ "11.0\t\t\t23.0\n"
));
}