146 lines
5.8 KiB
Java
146 lines
5.8 KiB
Java
/* ====================================================================
|
|
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;
|
|
|
|
import java.net.URI;
|
|
import java.net.URISyntaxException;
|
|
|
|
import junit.framework.TestCase;
|
|
|
|
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
|
import org.apache.poi.openxml4j.opc.ContentTypes;
|
|
import org.apache.poi.openxml4j.opc.OPCPackage;
|
|
import org.apache.poi.openxml4j.opc.PackagePart;
|
|
import org.apache.poi.openxml4j.opc.PackagePartName;
|
|
import org.apache.poi.openxml4j.opc.PackagingURIHelper;
|
|
|
|
public class TestPackagingURIHelper extends TestCase {
|
|
|
|
/**
|
|
* Test relativizePartName() method.
|
|
*/
|
|
public void testRelativizeURI() throws Exception {
|
|
URI uri1 = new URI("/word/document.xml");
|
|
URI uri2 = new URI("/word/media/image1.gif");
|
|
URI uri3 = new URI("/word/media/image1.gif#Sheet1!A1");
|
|
URI uri4 = new URI("#'My%20Sheet1'!A1");
|
|
|
|
// Document to image is down a directory
|
|
URI retURI1to2 = PackagingURIHelper.relativizeURI(uri1, uri2);
|
|
assertEquals("media/image1.gif", retURI1to2.getPath());
|
|
// Image to document is up a directory
|
|
URI retURI2to1 = PackagingURIHelper.relativizeURI(uri2, uri1);
|
|
assertEquals("../document.xml", retURI2to1.getPath());
|
|
|
|
// Document and CustomXML parts totally different [Julien C.]
|
|
URI uriCustomXml = new URI("/customXml/item1.xml");
|
|
URI uriRes = PackagingURIHelper.relativizeURI(uri1, uriCustomXml);
|
|
assertEquals("../customXml/item1.xml", uriRes.toString());
|
|
|
|
// Document to itself is the same place (empty URI)
|
|
URI retURI2 = PackagingURIHelper.relativizeURI(uri1, uri1);
|
|
// YK: the line below used to assert empty string which is wrong
|
|
// if source and target are the same they should be relaitivized as the last segment,
|
|
// see Bugzilla 51187
|
|
assertEquals("document.xml", retURI2.getPath());
|
|
|
|
// relativization against root
|
|
URI root = new URI("/");
|
|
uriRes = PackagingURIHelper.relativizeURI(root, uri1);
|
|
assertEquals("/word/document.xml", uriRes.toString());
|
|
|
|
//URI compatible with MS Office and OpenOffice: leading slash is removed
|
|
uriRes = PackagingURIHelper.relativizeURI(root, uri1, true);
|
|
assertEquals("word/document.xml", uriRes.toString());
|
|
|
|
//preserve URI fragments
|
|
uriRes = PackagingURIHelper.relativizeURI(uri1, uri3, true);
|
|
assertEquals("media/image1.gif#Sheet1!A1", uriRes.toString());
|
|
uriRes = PackagingURIHelper.relativizeURI(root, uri4, true);
|
|
assertEquals("#'My%20Sheet1'!A1", uriRes.toString());
|
|
}
|
|
|
|
/**
|
|
* Test createPartName(String, y)
|
|
*/
|
|
public void testCreatePartNameRelativeString()
|
|
throws InvalidFormatException {
|
|
PackagePartName partNameToValid = PackagingURIHelper
|
|
.createPartName("/word/media/image1.gif");
|
|
|
|
OPCPackage pkg = OPCPackage.create("DELETEIFEXISTS.docx");
|
|
// Base part
|
|
PackagePartName nameBase = PackagingURIHelper
|
|
.createPartName("/word/document.xml");
|
|
PackagePart partBase = pkg.createPart(nameBase, ContentTypes.XML);
|
|
// Relative part name
|
|
PackagePartName relativeName = PackagingURIHelper.createPartName(
|
|
"media/image1.gif", partBase);
|
|
assertTrue("The part name must be equal to "
|
|
+ partNameToValid.getName(), partNameToValid
|
|
.equals(relativeName));
|
|
pkg.revert();
|
|
}
|
|
|
|
/**
|
|
* Test createPartName(URI, y)
|
|
*/
|
|
public void testCreatePartNameRelativeURI() throws Exception {
|
|
PackagePartName partNameToValid = PackagingURIHelper
|
|
.createPartName("/word/media/image1.gif");
|
|
|
|
OPCPackage pkg = OPCPackage.create("DELETEIFEXISTS.docx");
|
|
// Base part
|
|
PackagePartName nameBase = PackagingURIHelper
|
|
.createPartName("/word/document.xml");
|
|
PackagePart partBase = pkg.createPart(nameBase, ContentTypes.XML);
|
|
// Relative part name
|
|
PackagePartName relativeName = PackagingURIHelper.createPartName(
|
|
new URI("media/image1.gif"), partBase);
|
|
assertTrue("The part name must be equal to "
|
|
+ partNameToValid.getName(), partNameToValid
|
|
.equals(relativeName));
|
|
pkg.revert();
|
|
}
|
|
|
|
public void testCreateURIFromString() throws Exception {
|
|
String[] href = {
|
|
"..\\\\\\cygwin\\home\\yegor\\.vim\\filetype.vim",
|
|
"..\\Program%20Files\\AGEIA%20Technologies\\v2.3.3\\NxCooking.dll",
|
|
"file:///D:\\seva\\1981\\r810102ns.mp3",
|
|
"..\\cygwin\\home\\yegor\\dinom\\%5baccess%5d.2010-10-26.log",
|
|
"#'Instructions (Text)'!B21",
|
|
"javascript://"
|
|
};
|
|
for(String s : href){
|
|
try {
|
|
URI uri = PackagingURIHelper.toURI(s);
|
|
} catch (URISyntaxException e){
|
|
fail("Failed to create URI from " + s);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void test53734() throws Exception {
|
|
URI uri = PackagingURIHelper.toURI("javascript://");
|
|
// POI appends a trailing slash tpo avoid "Expected authority at index 13: javascript://"
|
|
// https://issues.apache.org/bugzilla/show_bug.cgi?id=53734
|
|
assertEquals("javascript:///", uri.toASCIIString());
|
|
}
|
|
|
|
}
|