/ojc-core/component-common/xmlbeans/xbean-src/2.3.0/xmlbeans/test/src/compile/scomp/detailed/XmlBeanCompilationTests.java
Java | 327 lines | 186 code | 51 blank | 90 comment | 23 complexity | 7057334ec69a318a5193ffc4a43f7fb8 MD5 | raw file
- /* Copyright 2004 The Apache Software Foundation
- *
- * Licensed 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 compile.scomp.detailed;
-
- import junit.framework.Assert;
- import org.apache.xmlbeans.*;
- import org.apache.xmlbeans.impl.xb.xmlconfig.ConfigDocument;
-
- import java.io.*;
- import java.util.*;
-
- import compile.scomp.common.CompileCommon;
- import compile.scomp.common.CompileTestBase;
- import compile.scomp.common.mockobj.TestFiler;
- import compile.scomp.common.mockobj.TestBindingConfig;
-
- import javax.xml.namespace.QName;
-
-
-
- /**
- * Ensure that several compilation mechanisms all generate
- * the same schematypesystem
- *
- */
- public class XmlBeanCompilationTests extends CompileTestBase
- {
- public List xm_errors;
- public XmlOptions xm_opts;
- Vector expBinType;
- Vector expSrcType;
-
- public XmlBeanCompilationTests(String name)
- {
- super(name);
- expBinType = new Vector();
- expBinType.add("schema/system/apiCompile/atypedb57type.xsb");
- expBinType.add("schema/system/apiCompile/elname429edoctype.xsb");
- expBinType.add("schema/system/apiCompile/elnameelement.xsb");
- expBinType.add("schema/system/apiCompile/index.xsb");
- expBinType.add("schema/element/http_3A_2F_2Fbaz/elName.xsb");
- expBinType.add("schema/type/http_3A_2F_2Fbaz/aType.xsb");
- expBinType.add("schema/namespace/http_3A_2F_2Fbaz/xmlns.xsb");
- expBinType.add("schema/javaname/baz/ElNameDocument.xsb");
- expBinType.add("schema/javaname/baz/AType.xsb");
- expBinType.add("schema/system/apiCompile/TypeSystemHolder.class");
-
- expSrcType = new Vector();
- expSrcType.add("baz.AType");
- expSrcType.add("baz.impl.ATypeImpl");
- expSrcType.add("baz.ElNameDocument");
- expSrcType.add("baz.impl.ElNameDocumentImpl");
-
- xm_errors = new ArrayList();
- xm_opts = new XmlOptions();
- xm_opts.setErrorListener(xm_errors);
- xm_opts.setSavePrettyPrint();
-
- }
-
-
- public void tearDown() throws Exception
- {
- super.tearDown();
- if (xm_errors.size() > 0)
- xm_errors.clear();
- }
-
- /**
- * Filer != null for BindingConfig to be used
- *
- * @throws Exception
- */
- public void test_bindingconfig_extension_compilation() throws Exception
- {
- TestFiler f = new TestFiler();
- //initialize all of the values
- String extCaseDir = XBEAN_CASE_ROOT + P + "extensions" + P;
- String extSrcDir = CASEROOT + P +
- ".." + P + "src" + P + "xmlobject" + P + "extensions" + P;
- File[] cPath = CompileTestBase.getClassPath();
- String dir = extCaseDir + P + "interfaceFeature" + P + "averageCase";
- String dir2 = extCaseDir + P + "prePostFeature" + P +
- "ValueRestriction";
-
- ConfigDocument.Config bConf = ConfigDocument.Factory.parse(
- new File(dir + P + "po.xsdconfig"))
- .getConfig();
- ConfigDocument.Config cConf = ConfigDocument.Factory.parse(
- new File(dir2 + P + "company.xsdconfig"))
- .getConfig();
-
- String simpleConfig = "<xb:config " +
- "xmlns:xb=\"http://xml.apache.org/xmlbeans/2004/02/xbean/config\"\n" +
- " xmlns:ep=\"http://xbean.interface_feature/averageCase/PurchaseOrder\">\n" +
- "<xb:namespace uri=\"http://xbean.interface_feature/averageCase/PurchaseOrder\">\n" +
- "<xb:package>com.easypo</xb:package>\n" +
- "</xb:namespace></xb:config>";
- ConfigDocument.Config confDoc = ConfigDocument.Factory.parse(simpleConfig).getConfig();
- ConfigDocument.Config[] confs = new ConfigDocument.Config[]{bConf, confDoc, cConf};
-
- String fooHandlerPath = extSrcDir + P + "interfaceFeature" + P +
- "averageCase" + P + "existing" + P + "FooHandler.java";
- String iFooPath = extSrcDir + P + "interfaceFeature" + P +
- "averageCase" + P + "existing" + P + "IFoo.java";
- String iSetterPath = extSrcDir + P + "prePostFeature" + P +
- "ValueRestriction" + P + "existing" + P + "ISetter.java";
- String setterHandlerPath = extSrcDir + P + "prePostFeature" + P +
- "ValueRestriction" + P + "existing" + P + "SetterHandler.java";
-
-
- File[] fList = new File[]{new File(fooHandlerPath), new File(iFooPath),
- new File(iSetterPath),
- new File(setterHandlerPath)};
-
- //use created BindingConfig
- TestBindingConfig bind = new TestBindingConfig(confs, fList, cPath);
-
- //set XSDs
- XmlObject obj1 = XmlObject.Factory.parse(new File(dir + P + "po.xsd"));
- XmlObject obj2 = XmlObject.Factory.parse(
- new File(dir2 + P + "company.xsd"));
- XmlObject[] schemas = new XmlObject[]{obj1, obj2};
-
- //filer must be present on this method
- SchemaTypeSystem apiSts = XmlBeans.compileXmlBeans("apiCompile", null,
- schemas, bind, XmlBeans.getBuiltinTypeSystem(), f, xm_opts);
-
- if (!bind.isIslookupPrefixForNamespace())
- throw new Exception("isIslookupPrefixForNamespace not invoked");
- if (!bind.isIslookupPackageForNamespace())
- throw new Exception("isIslookupPackageForNamespace not invoked");
- if (!bind.isIslookupSuffixForNamespace())
- throw new Exception("isIslookupSuffixForNamespace not invoked");
- if (!bind.isIslookupJavanameForQName())
- throw new Exception("isIslookupJavanameForQName not invoked");
- if (!bind.isIsgetInterfaceExtensionsString())
- throw new Exception("isIsgetInterfaceExtensionsString not invoked");
- if (!bind.isIsgetInterfaceExtensions())
- throw new Exception("isIsgetInterfaceExtensions not invoked");
- if (!bind.isIsgetPrePostExtensions())
- throw new Exception("isIsgetPrePostExtensions not invoked");
- if (!bind.isIsgetInterfaceExtensions())
- throw new Exception("isIsgetInterfaceExtensions not invoked");
- if (!bind.isIsgetPrePostExtensionsString())
- throw new Exception("isIsgetPrePostExtensionsString not invoked");
- }
-
- /**
- * Verify basic incremental compilation
- * and compilation with partial SOM usages
- */
- public void test_incrCompile() throws Exception
- {
- XmlObject obj1 = XmlObject.Factory.parse(forXsd);
- obj1.documentProperties().setSourceName("OBJ1");
- XmlObject[] schemas = new XmlObject[]{obj1};
- QName sts1 = new QName("http://baz", "elName");
-
- XmlObject obj2 = XmlObject.Factory.parse(incrXsd);
- obj2.documentProperties().setSourceName("OBJ2");
- XmlObject[] schemas2 = new XmlObject[]{obj2};
- QName sts2 = new QName("http://bar", "elName");
-
- XmlObject obj3 = XmlObject.Factory.parse(errXsd);
- obj3.documentProperties().setSourceName("OBJ3");
- XmlObject[] schemas3 = new XmlObject[]{obj3};
- QName sts3 = new QName("http://bar", "elErrName");
-
- SchemaTypeSystem sts;
- ArrayList err = new ArrayList();
- XmlOptions opt = new XmlOptions().setErrorListener(err);
- opt.put("COMPILE_PARTIAL_TYPESYSTEM");
-
- //BASIC COMPILATION
- sts = XmlBeans.compileXmlBeans(null,
- null, schemas, null,
- XmlBeans.getBuiltinTypeSystem(), null, opt);
-
- Assert.assertTrue("Errors should have been empty", err.isEmpty());
- // find element in the type System
- if (!findGlobalElement(sts.globalElements(), sts1))
- throw new Exception(
- "Could Not find Type from first Type System: " + sts1);
-
- //SIMPLE INCR COMPILATION
- sts = XmlBeans.compileXmlBeans(null,
- sts, schemas2, null,
- XmlBeans.getBuiltinTypeSystem(), null, opt);
- Assert.assertTrue("Errors should have been empty", err.isEmpty());
- // find element in the type System
-
- if (!findGlobalElement(sts.globalElements(), sts1))
- throw new Exception("Could Not find Type from first Type System: " +
- sts1);
-
- if (!findGlobalElement(sts.globalElements(), sts2))
- throw new Exception("Could Not find Type from 2nd Type System: " +
- sts2);
-
- System.out.println("Building over Existing");
- //BUILDING OFF BASE SIMPLE INCR COMPILATION
- sts = XmlBeans.compileXmlBeans(null,
- sts, schemas2, null,
- sts, null, opt);
- Assert.assertTrue("Errors should have been empty", err.isEmpty());
- // find element in the type System
-
- if (!findGlobalElement(sts.globalElements(), sts1))
- throw new Exception("Could Not find Type from first Type System: " +
- sts1);
-
- if (!findGlobalElement(sts.globalElements(), sts2))
- throw new Exception("Could Not find Type from 2nd Type System: " +
- sts2);
-
- //INCR COMPILATION WITH RECOVERABLE ERROR
- err.clear();
- SchemaTypeSystem b = XmlBeans.compileXmlBeans(null,
- sts, schemas3, null,
- XmlBeans.getBuiltinTypeSystem(), null, opt);
- // find element in the type System
- if (!findGlobalElement(b.globalElements(), sts1))
- throw new Exception("Could Not find Type from first Type System: " +
- sts1);
-
- if (!findGlobalElement(b.globalElements(), sts2))
- throw new Exception("Could Not find Type from 2nd Type System: " +
- sts2);
-
- if (!findGlobalElement(b.globalElements(), sts3))
- throw new Exception("Could Not find Type from 3rd Type System: " +
- sts3);
-
- printSTS(b);
-
- //INSPECT ERRORS
- boolean psom_expError = false;
- // print out the recovered xm_errors
- if (!err.isEmpty()) {
- System.out.println(
- "Schema invalid: partial schema type system recovered");
- for (Iterator i = err.iterator(); i.hasNext();) {
- XmlError xErr = (XmlError) i.next();
- System.out.println(xErr);
- //compare to the expected xm_errors
- if ((xErr.getErrorCode().compareTo("src-resolve") == 0) &&
- (xErr.getMessage().compareTo(
- "type 'bType@http://baz' not found.") ==
- 0))
- psom_expError = true;
- }
- }
- if (!psom_expError)
- throw new Exception("Error Code was not as Expected");
-
-
- }
-
-
-
-
-
-
- /*public void test_diff_compilationMethods() throws IOException,
- XmlException, Exception
- {
-
-
- //initialize the schema compiler
- SchemaCompiler.Parameters params = new SchemaCompiler.Parameters();
- params.setXsdFiles(new File[]{scompFile});
- params.setSrcDir(scompDirFile);
- params.setClassesDir(scompDirFile);
-
- //save out schema for use in scomp later
- XmlObject obj1 = XmlObject.Factory.parse(forXsd);
- obj1.save(scompFile);
-
- //scomp saved out schema
- SchemaCompiler.compile(params);
-
- //use new api to get typesystem
- XmlObject[] schemas = new XmlObject[]{obj1};
- SchemaTypeSystem apiSts = XmlBeans.compileXmlBeans("apiCompile", null,
- schemas, null, XmlBeans.getBuiltinTypeSystem(), null, xm_opts);
-
- //use alternative api to get typesystem
- SchemaTypeSystem altSts = XmlBeans.compileXsd(schemas,
- XmlBeans.getBuiltinTypeSystem(), null);
-
- //save out sts for diff later
- SchemaCodeGenerator.saveTypeSystem(apiSts, apiDirFile, null, null,
- null);
- SchemaCodeGenerator.saveTypeSystem(altSts, baseDirFile, null, null,
- null);
-
- //diff new api to old api
- xm_errors = null;
- xm_errors = new ArrayList();
- Diff.dirsAsTypeSystems(apiDirFile, baseDirFile, xm_errors);
- if (xm_errors.size() >= 1)
- throw new Exception("API STS ERRORS: " + xm_errors.toString());
-
- //diff scomp sts to new api
- xm_errors = null;
- xm_errors = new ArrayList();
- Diff.dirsAsTypeSystems(apiDirFile, scompDirFile, xm_errors);
- if (xm_errors.size() >= 1)
- throw new Exception("API SCOMP ERRORS: " + xm_errors.toString());
- } */
-
-
- }