blob: 7e1c1cb222716377d1a76d89d0fe52b7f54832c4 [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.common;
import common.Common;
import org.apache.xmlbeans.*;
import org.apache.xmlbeans.impl.tool.Diff;
import org.apache.xmlbeans.impl.tool.SchemaCodeGenerator;
import javax.xml.namespace.QName;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Objects;
import java.util.stream.Stream;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* TODO: modify for deprecation warnings
*/
public class CompileTestBase extends Common {
private static final String outputDir = "compile" + P + "scomp" + P + "incr";
public static final String OUT_PATH = outputDir + P + "out";
public static final String SANITY_PATH = outputDir + P + "sanity";
public static final String INCR_PATH = outputDir + P + "outincr";
//schemas to use
public static final String FOR_XSD =
"<xs:schema attributeFormDefault=\"unqualified\" " +
"elementFormDefault=\"qualified\" " +
"targetNamespace=\"http://baz\" " +
"xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"> " +
"<xs:element name=\"elName\" type=\"bas:aType\" " +
"xmlns:bas=\"http://baz\"/> <xs:complexType name=\"aType\"> " +
"<xs:simpleContent> " +
"<xs:extension base=\"xs:string\" " +
"xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"> " +
"<xs:attribute type=\"xs:string\" name=\"attrName\"/> " +
"</xs:extension> " +
"</xs:simpleContent> " +
"</xs:complexType> " +
"</xs:schema>";
public static final String INCR_XSD =
"<xs:schema attributeFormDefault=\"unqualified\" " +
"elementFormDefault=\"qualified\" " +
"targetNamespace=\"http://bar\" " +
"xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"> " +
"<xs:element name=\"elName\" type=\"bas:aType\" " +
"xmlns:bas=\"http://baz\"/> <xs:complexType name=\"aType\"> " +
"<xs:simpleContent> " +
"<xs:extension base=\"xs:string\" " +
"xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"> " +
"<xs:attribute type=\"xs:string\" name=\"attrName\"/> " +
"</xs:extension> " +
"</xs:simpleContent> " +
"</xs:complexType> " +
"</xs:schema>";
public static final String ERR_XSD =
"<xs:schema attributeFormDefault=\"unqualified\" " +
"elementFormDefault=\"qualified\" " +
"targetNamespace=\"http://bar\" " +
"xmlns:tnf=\"http://baz\" " +
"xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"> " +
"<xs:element name=\"elErrName\" type=\"tnf:bType\" /> " +
"</xs:schema>";
public static File[] getClassPath() {
String cp = System.getProperty("java.class.path");
String[] cpList = cp.split(File.pathSeparator);
File[] fList = new File[cpList.length];
for (int i = 0; i < cpList.length; i++) {
fList[i] = new File(cpList[i]);
}
return fList;
}
/**
* compares type systems and populates error list based on differences in files
*/
public static void compareandPopErrors(File outDir, File outIncrDir, List<XmlError> errors) {
// Compare the results
String oldPropValue = System.getProperty("xmlbeans.diff.diffIndex");
System.setProperty("xmlbeans.diff.diffIndex", "false");
errors.clear();
Diff.dirsAsTypeSystems(outDir, outIncrDir, errors);
System.setProperty("xmlbeans.diff.diffIndex", oldPropValue == null ? "true" : oldPropValue);
}
public static void clearOutputDirs() {
File outRoot = new File(OUTPUTROOT);
if (outRoot.exists()) {
deltree(outRoot);
}
xbeanOutput(OUT_PATH);
xbeanOutput(SANITY_PATH);
xbeanOutput(INCR_PATH);
}
/**
* take the type system that gets created in compileSchemas()
*/
public static SchemaTypeSystem incrCompileXsd(SchemaTypeSystem system, XmlObject[] schemas, File outDir, XmlOptions options)
throws XmlException, IOException {
SchemaTypeSystem builtin = XmlBeans.getBuiltinTypeSystem();
SchemaTypeSystem sts = XmlBeans.compileXsd(system, schemas, builtin, options);
assertNotNull(sts, "Compilation failed during Incremental Compile.");
SchemaCodeGenerator.saveTypeSystem(sts, outDir, null, null, null);
return sts;
}
//original compile to get base type system
public static SchemaTypeSystem compileSchemas(XmlObject[] schemas, File outDir, XmlOptions options)
throws XmlException, IOException {
SchemaTypeSystem system;
SchemaTypeSystem builtin = XmlBeans.getBuiltinTypeSystem();
system = XmlBeans.compileXsd(schemas, builtin, options);
assertNotNull(system, "Compilation failed during compile.");
SchemaCodeGenerator.saveTypeSystem(system, outDir, null, null, null);
return system;
}
public static void findElementbyQName(SchemaTypeSystem sts, QName[] lookup) {
assertTrue(Stream.of(lookup).map(sts::findElement).allMatch(Objects::nonNull),
"Element was expected but not found");
}
public static String getSchemaTop(String tns) {
return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<xs:schema " +
"attributeFormDefault=\"unqualified\" elementFormDefault=\"qualified\" " +
"targetNamespace=\"http://" + tns + "\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" >";
}
public static String getSchemaBottom() {
return "</xs:schema>";
}
public static boolean findGlobalElement(SchemaGlobalElement[] sge, QName q) {
return Stream.of(sge).map(SchemaGlobalElement::getName).anyMatch(sg ->
sg.getLocalPart().equals(q.getLocalPart()) && sg.getNamespaceURI().equals(q.getNamespaceURI()));
}
}