001: /*
002: ******************************************************************
003: Copyright (c) 2001-2007, Jeff Martin, Tim Bacon
004: All rights reserved.
005:
006: Redistribution and use in source and binary forms, with or without
007: modification, are permitted provided that the following conditions
008: are met:
009:
010: * Redistributions of source code must retain the above copyright
011: notice, this list of conditions and the following disclaimer.
012: * Redistributions in binary form must reproduce the above
013: copyright notice, this list of conditions and the following
014: disclaimer in the documentation and/or other materials provided
015: with the distribution.
016: * Neither the name of the xmlunit.sourceforge.net nor the names
017: of its contributors may be used to endorse or promote products
018: derived from this software without specific prior written
019: permission.
020:
021: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
022: "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
023: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
024: FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
025: COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
026: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
027: BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
028: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
029: CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
030: LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
031: ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
032: POSSIBILITY OF SUCH DAMAGE.
033:
034: ******************************************************************
035: */
036:
037: package org.custommonkey.xmlunit;
038:
039: import java.io.File;
040: import java.io.FileReader;
041:
042: import org.custommonkey.xmlunit.exceptions.ConfigurationException;
043:
044: import javax.xml.transform.OutputKeys;
045: import javax.xml.transform.Source;
046: import javax.xml.transform.URIResolver;
047: import junit.framework.TestCase;
048: import junit.framework.TestSuite;
049:
050: import org.w3c.dom.Document;
051:
052: /**
053: * Test a Transform
054: */
055: public class test_Transform extends TestCase {
056: private static final String FLEABALL = "<fleaball><animal><shaggy>dog</shaggy></animal></fleaball>";
057:
058: private static final String DOG = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><dog/>";
059:
060: private Transform transform;
061: private File animal;
062:
063: public void testGetResultString() throws Exception {
064: transform = new Transform(FLEABALL, animal);
065: assertEquals(DOG, stripLineFeeds(transform.getResultString()));
066: }
067:
068: public void testGetResultDocument() throws Exception {
069: transform = new Transform(FLEABALL, animal);
070: Diff diff = new Diff(DOG, transform);
071: assertEquals(diff.toString(), true, diff.identical());
072: }
073:
074: public void testIdentityTransform() throws Exception {
075: Document control = XMLUnit.buildControlDocument(FLEABALL);
076: transform = new Transform(control);
077: Document test = transform.getResultDocument();
078: Diff diff = new Diff(control, test);
079: assertEquals(diff.toString(), true, diff.identical());
080: }
081:
082: public void testOutputProperty() throws Exception {
083: transform = new Transform(FLEABALL, animal);
084: transform.setOutputProperty(OutputKeys.METHOD, "html");
085: assertNotEquals(DOG, transform.getResultString());
086: }
087:
088: public void testDOMSourceAndFile() throws Exception {
089: transform = new Transform(XMLUnit
090: .buildControlDocument(FLEABALL), animal);
091: assertEquals(DOG, stripLineFeeds(transform.getResultString()));
092: }
093:
094: public void testDOMSourceAndString() throws Exception {
095: FileReader reader = new FileReader(animal);
096: try {
097: char[] animalXSL = new char[1024];
098: int length = reader.read(animalXSL);
099: transform = new Transform(XMLUnit
100: .buildControlDocument(FLEABALL), new String(
101: animalXSL, 0, length));
102: assertEquals(DOG, stripLineFeeds(transform
103: .getResultString()));
104: } finally {
105: reader.close();
106: }
107: }
108:
109: /**
110: * Raised by Craig Strong 04.04.2002
111: */
112: public void testXSLIncludeWithoutSystemId() throws Exception {
113: String input = "<bug><animal>creepycrawly</animal></bug>";
114: String xslWithInclude = test_Constants.XML_DECLARATION
115: + test_Constants.XSLT_START
116: + test_Constants.XSLT_XML_OUTPUT_NOINDENT
117: + "<xsl:template match=\"bug\"><xsl:apply-templates select=\"animal\"/></xsl:template>"
118: + "<xsl:include href=\"" + test_Constants.BASEDIR
119: + "/tests/etc/animal.xsl\"/>" + test_Constants.XSLT_END;
120: Transform transform = new Transform(input, xslWithInclude);
121: transform.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,
122: "yes");
123: assertEquals("<creepycrawly/>", transform.getResultString());
124: }
125:
126: /**
127: * Issue 1742826
128: */
129: public void testURIResolverForStylesheet() throws Exception {
130: TestResolver tr = new TestResolver();
131: try {
132: XMLUnit.setURIResolver(tr);
133: String s = "<foo/>";
134: String xsl = test_Constants.XML_DECLARATION
135: + test_Constants.XSLT_START
136: + "<xsl:include href=\"urn:bar\"/>"
137: + test_Constants.XSLT_END;
138: try {
139: Transform transform = new Transform(s, xsl);
140: fail("should fail because of unknown include URI");
141: } catch (ConfigurationException tce) {
142: // expected exception
143: }
144: assertTrue("URIResolver has been called", tr.called);
145: } finally {
146: XMLUnit.setURIResolver(null);
147: }
148: }
149:
150: private void assertNotEquals(Object expected, Object actual) {
151: if (expected.equals(actual)) {
152: fail("Expected " + expected + " different to actual!");
153: }
154: }
155:
156: public test_Transform(String name) {
157: super (name);
158: }
159:
160: public void setUp() throws Exception {
161: animal = new File(test_Constants.BASEDIR
162: + "/tests/etc/animal.xsl");
163: }
164:
165: private static String stripLineFeeds(String s) {
166: int index = s.indexOf(test_Constants.LINE_SEPARATOR);
167: while (index > -1) {
168: s = s.substring(0, index)
169: + s.substring(index
170: + test_Constants.LINE_SEPARATOR.length());
171: index = s.indexOf(test_Constants.LINE_SEPARATOR);
172: }
173: return s;
174: }
175:
176: private static class TestResolver implements URIResolver {
177: private boolean called = false;
178:
179: public Source resolve(String h, String b) {
180: called = true;
181: return null;
182: }
183: }
184: }
|