| /* |
| * 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$ |
| */ |
| |
| /* |
| * |
| * URIResolverTest.java |
| * |
| */ |
| package org.apache.qetest.trax; |
| |
| import java.io.File; |
| import java.util.Properties; |
| |
| import javax.xml.transform.Templates; |
| import javax.xml.transform.Transformer; |
| import javax.xml.transform.TransformerFactory; |
| import javax.xml.transform.stream.StreamResult; |
| import javax.xml.transform.stream.StreamSource; |
| |
| import org.apache.qetest.FileBasedTest; |
| import org.apache.qetest.Logger; |
| import org.apache.qetest.OutputNameManager; |
| import org.apache.qetest.QetestUtils; |
| import org.apache.qetest.xsl.XSLTestfileInfo; |
| import org.junit.Test; |
| |
| //------------------------------------------------------------------------- |
| |
| /** |
| * Verify that URIResolvers are called properly. |
| * @author shane_curcuru@lotus.com |
| * @version $Id$ |
| */ |
| public class URIResolverTest extends FileBasedTest |
| { |
| |
| /** Provide sequential output names automatically. */ |
| protected OutputNameManager outNames; |
| |
| |
| /** |
| * A simple stylesheet with errors for testing in various flavors. |
| * Must be coordinated with templatesExpectedType/Value, |
| * transformExpectedType/Value. |
| */ |
| protected XSLTestfileInfo testFileInfo = new XSLTestfileInfo(); |
| |
| /** Subdir name under test\tests\api for files. */ |
| public static final String TRAX_SUBDIR = "trax"; |
| |
| /** Just initialize test name, comment, numTestCases. */ |
| public URIResolverTest() |
| { |
| numTestCases = 1; // REPLACE_num |
| testName = "URIResolverTest"; |
| testComment = "Verify that URIResolvers are called properly."; |
| } |
| |
| |
| /** |
| * Initialize this test |
| * |
| * @param p Properties to initialize from (if needed) |
| * @return false if we should abort the test; true otherwise |
| */ |
| public boolean doTestFileInit(Properties p) |
| { |
| // Used for all tests; just dump files in trax subdir |
| File outSubDir = new File(outputDir + File.separator + TRAX_SUBDIR); |
| if (!outSubDir.mkdirs()) |
| reporter.logWarningMsg("Could not create output dir: " + outSubDir); |
| outNames = new OutputNameManager(outputDir + File.separator + TRAX_SUBDIR |
| + File.separator + testName, ".out"); |
| |
| |
| String testBasePath = inputDir |
| + File.separator |
| + TRAX_SUBDIR |
| + File.separator; |
| String goldBasePath = goldDir |
| + File.separator |
| + TRAX_SUBDIR |
| + File.separator; |
| |
| testFileInfo.inputName = testBasePath + "URIResolverTest.xsl"; |
| testFileInfo.xmlName = testBasePath + "URIResolverTest.xml"; |
| testFileInfo.goldName = goldBasePath + "URIResolverTest.out"; |
| |
| return true; |
| } |
| |
| |
| /** |
| * Build a stylesheet/do a transform with lots of URIs to resolve. |
| * Verify that the URIResolver is called properly. |
| * @return false if we should abort the test; true otherwise |
| */ |
| public boolean testCase1() |
| { |
| reporter.testCaseInit("Build a stylesheet/do a transform with lots of URIs to resolve"); |
| LoggingURIResolver loggingURIResolver = new LoggingURIResolver((Logger)reporter); |
| reporter.logTraceMsg("loggingURIResolver originally setup:" + loggingURIResolver.getQuickCounters()); |
| |
| TransformerFactory factory = null; |
| Templates templates = null; |
| Transformer transformer = null; |
| try |
| { |
| factory = TransformerFactory.newInstance(); |
| // Set the URIResolver and validate it |
| factory.setURIResolver(loggingURIResolver); |
| reporter.check((factory.getURIResolver() == loggingURIResolver), |
| true, "set/getURIResolver on factory"); |
| |
| // Validate various URI's to be resolved during stylesheet |
| // build with the loggingURIResolver |
| String[] expectedXslUris = |
| { |
| "{" + QetestUtils.filenameToURL(testFileInfo.inputName) + "}" + "impincl/SystemIdImport.xsl", |
| "{" + QetestUtils.filenameToURL(testFileInfo.inputName) + "}" + "impincl/SystemIdInclude.xsl" |
| }; |
| loggingURIResolver.setExpected(expectedXslUris); |
| // Note that we don't currently have a default URIResolver, |
| // so the LoggingURIResolver class will just attempt |
| // to use the SystemIDResolver class instead |
| // loggingURIResolver.setDefaultHandler(savedURIResolver); |
| reporter.logInfoMsg("About to factory.newTemplates(" + QetestUtils.filenameToURL(testFileInfo.inputName) + ")"); |
| templates = factory.newTemplates(new StreamSource(QetestUtils.filenameToURL(testFileInfo.inputName))); |
| reporter.logTraceMsg("loggingURIResolver after newTemplates:" + loggingURIResolver.getQuickCounters()); |
| |
| // Clear out any setExpected or counters |
| loggingURIResolver.reset(); |
| |
| transformer = templates.newTransformer(); |
| reporter.logTraceMsg("default transformer's getURIResolver is: " + transformer.getURIResolver()); |
| // Set the URIResolver and validate it |
| transformer.setURIResolver(loggingURIResolver); |
| reporter.check((transformer.getURIResolver() == loggingURIResolver), |
| true, "set/getURIResolver on transformer"); |
| |
| // Validate various URI's to be resolved during transform |
| // time with the loggingURIResolver |
| String[] expectedXmlUris = |
| { |
| "{" + QetestUtils.filenameToURL(testFileInfo.inputName) + "}" + "../impincl/SystemIdImport.xsl", |
| "{" + QetestUtils.filenameToURL(testFileInfo.inputName) + "}" + "impincl/SystemIdImport.xsl", |
| "{" + QetestUtils.filenameToURL(testFileInfo.inputName) + "}" + "systemid/impincl/SystemIdImport.xsl", |
| }; |
| |
| //@todo Bugzilla#2425 every document() call is resolved twice twice - two fails caused below MOVED to SmoketestOuttakes.java 02-Nov-01 -sc |
| reporter.logWarningMsg("Bugzilla#2425 every document() call is resolved twice twice - two fails caused below MOVED to SmoketestOuttakes.java 02-Nov-01 -sc"); |
| // loggingURIResolver.setExpected(expectedXmlUris); |
| //@todo Bugzilla#2425 every document() call is resolved twice twice - two fails caused below MOVED to SmoketestOuttakes.java 02-Nov-01 -sc |
| |
| reporter.logTraceMsg("about to transform(...)"); |
| transformer.transform(new StreamSource(QetestUtils.filenameToURL(testFileInfo.xmlName)), |
| new StreamResult(outNames.nextName())); |
| reporter.logTraceMsg("after transform(...)"); |
| // Clear out any setExpected or counters |
| loggingURIResolver.reset(); |
| |
| // Validate the actual output file as well: in this case, |
| // the stylesheet should still work |
| fileChecker.check(reporter, |
| new File(outNames.currentName()), |
| new File(testFileInfo.goldName), |
| "transform of URI-filled xsl into: " + outNames.currentName()); |
| } |
| catch (Throwable t) |
| { |
| reporter.checkFail("URIResolver test unexpectedly threw: " + t.toString()); |
| reporter.logThrowable(Logger.ERRORMSG, t, "URIResolver test unexpectedly threw"); |
| } |
| |
| reporter.testCaseClose(); |
| return true; |
| } |
| |
| |
| /** |
| * Convenience method to print out usage information - update if needed. |
| * @return String denoting usage of this test class |
| */ |
| public String usage() |
| { |
| return ("Common [optional] options supported by URIResolverTest:\n" |
| + "(Note: assumes inputDir=.\\tests\\api)\n" |
| + super.usage()); // Grab our parent classes usage as well |
| } |
| |
| |
| /** |
| * Main method to run test from the command line - can be left alone. |
| * @param args command line argument array |
| */ |
| public static void main(String[] args) |
| { |
| URIResolverTest app = new URIResolverTest(); |
| app.doMain(args); |
| } |
| |
| // Android-added: Run main method as a JUnit test case. |
| @Test |
| public void main() { |
| main(new String[0]); |
| } |
| } |