package org.whole.lang.xsd.mapping; import java.io.InputStream; import javax.xml.XMLConstants; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; import org.whole.lang.bindings.BindingManagerFactory; import org.whole.lang.bindings.IBindingManager; import org.whole.lang.codebase.IPersistenceProvider; import org.whole.lang.codebase.StreamPersistenceProvider; import org.whole.lang.codebase.StringPersistenceProvider; import org.whole.lang.matchers.Matcher; import org.whole.lang.model.IEntity; import org.whole.lang.models.model.Model; import org.whole.lang.models.reflect.ModelsTemplateManager; import org.whole.lang.operations.InterpreterOperation; import org.whole.lang.operations.NormalizerOperation; import org.whole.lang.queries.model.PathExpression; import org.whole.lang.reflect.ILanguageKit; import org.whole.lang.reflect.ReflectionFactory; import org.whole.lang.templates.ITemplateManager; import org.whole.lang.util.BehaviorUtils; import org.whole.lang.util.ResourceLoader; import org.whole.lang.xsd.codebase.ModelToXmlSchemaQuery; import org.whole.lang.xsd.codebase.XsiPersistenceKit; import org.whole.lang.xsd.mapping.model.MappingStrategy; import org.whole.lang.xsd.mapping.samples.AppEngineWebInstance; import org.whole.lang.xsd.mapping.samples.ChoiceSampleInstance; import org.whole.lang.xsd.mapping.samples.CronInstance; import org.whole.lang.xsd.mapping.samples.DatastoreIndexesInstance; import org.whole.lang.xsd.mapping.samples.DatatypesInstance; import org.whole.lang.xsd.mapping.samples.DosInstance; import org.whole.lang.xsd.mapping.samples.FreemindInstance; import org.whole.lang.xsd.mapping.samples.JDOConfigInstance; import org.whole.lang.xsd.mapping.samples.Maven400Instance; import org.whole.lang.xsd.mapping.samples.PainInstance; import org.whole.lang.xsd.mapping.samples.QueueInstance; import org.whole.lang.xsd.mapping.samples.SepaSctInstance; import org.whole.lang.xsd.mapping.samples.SimpleContentInstance; import org.whole.lang.xsd.mapping.samples.Xmi20Instance; import org.whole.test.KnownFailingTests; import org.whole.test.SlowTests; public class XsdMappingTest { private final ResourceLoader loader = ResourceLoader.instance("org.whole.lang.xsd.mapping.samples"); private final SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); @BeforeClass public static void deployWholePlatform() { ReflectionFactory.deployWholePlatform(); } @Before public void setUp() throws Exception { factory.setResourceResolver(new ResourceResolverAdapter(loader)); } @Test public void testMappingNormalization() throws Exception { MappingStrategy strategy = new ArtifactsMapping().create(); MappingStrategy normalizedStrategy = new ArtifactsMappingNormalized().create(); Assert.assertTrue(Matcher.match(normalizedStrategy, NormalizerOperation.normalize(strategy))); strategy = new SepaSctMapping().create(); normalizedStrategy = new SepaSctMappingNormalized().create(); Assert.assertTrue(Matcher.match(normalizedStrategy, NormalizerOperation.normalize(strategy))); } @Test public void testInclusion() throws Exception { InputStream is = loader.getResourceAsStream("books.xsd"); StreamSource ss = new StreamSource(is); Schema schema = factory.newSchema(ss); is = loader.getResourceAsStream("books.xml"); Validator v = schema.newValidator(); v.validate(new StreamSource(is)); } @Category(SlowTests.class) @Test public void testXmi20() throws Exception { InputStream is = loader.getResourceAsStream("xmi20.xsd"); StreamSource ss = new StreamSource(is); Schema schema = factory.newSchema(ss); is = loader.getResourceAsStream("xmi20.xml"); Validator v = schema.newValidator(); v.validate(new StreamSource(is)); is = loader.getResourceAsStream("xmi20.xml"); IPersistenceProvider pp = new StreamPersistenceProvider(is); pp.getBindings().wDefValue("packageName", "org.whole.lang.xsd.mapping.samples"); IEntity model = XsiPersistenceKit.instance().readModel(pp); Assert.assertTrue(Matcher.match(new Xmi20Instance().create(), model)); } @Category(SlowTests.class) @Test public void testDatatypes() throws Exception { InputStream is = loader.getResourceAsStream("datatypes.xsd"); StreamSource ss = new StreamSource(is); Schema schema = factory.newSchema(ss); is = loader.getResourceAsStream("datatypes.xml"); Validator v = schema.newValidator(); v.validate(new StreamSource(is)); is = loader.getResourceAsStream("datatypes.xml"); IPersistenceProvider pp = new StreamPersistenceProvider(is); pp.getBindings().wDefValue("packageName", "org.whole.lang.xsd.mapping.samples"); IEntity model = XsiPersistenceKit.instance().readModel(pp); Assert.assertTrue(Matcher.match(new DatatypesInstance().create(), model)); } //Requires an Internet connection @Category(SlowTests.class) @Test public void testWsBPEL() throws Exception { InputStream is = loader.getResourceAsStream("ws-bpel_executable.xsd"); StreamSource ss = new StreamSource(is); Schema schema = factory.newSchema(ss); is = loader.getResourceAsStream("ws-bpel-example.bpel"); Validator v = schema.newValidator(); v.validate(new StreamSource(is)); } //Requires an Internet connection @Category(SlowTests.class) @Test public void testWsBPELLegacy() throws Exception { InputStream is = loader.getResourceAsStream("wsbpel_2_0.xsd"); StreamSource ss = new StreamSource(is); Schema schema = factory.newSchema(ss); is = loader.getResourceAsStream("wsbpel_2_0.xml"); Validator v = schema.newValidator(); v.validate(new StreamSource(is)); } @Category(SlowTests.class) @Test public void testMaven() throws Exception { InputStream is = loader.getResourceAsStream("maven-v4_0_0.xsd"); StreamSource ss = new StreamSource(is); Schema schema = factory.newSchema(ss); is = loader.getResourceAsStream("maven-v4_0_0.xml"); Validator v = schema.newValidator(); v.validate(new StreamSource(is)); is = loader.getResourceAsStream("maven-v4_0_0.xml"); IPersistenceProvider pp = new StreamPersistenceProvider(is); pp.getBindings().wDefValue("packageName", "org.whole.lang.xsd.mapping.samples"); IEntity model = XsiPersistenceKit.instance().readModel(pp); Assert.assertTrue(Matcher.match(new Maven400Instance().create(), model)); } @Category(SlowTests.class) @Test public void testFreemind() throws Exception { InputStream is = loader.getResourceAsStream("freemind.xsd"); StreamSource ss = new StreamSource(is); Schema schema = factory.newSchema(ss); is = loader.getResourceAsStream("freemindExample.xml"); Validator v = schema.newValidator(); v.validate(new StreamSource(is)); is = loader.getResourceAsStream("freemindExample.xml"); IPersistenceProvider pp = new StreamPersistenceProvider(is); pp.getBindings().wDefValue("packageName", "org.whole.lang.xsd.mapping.samples"); IEntity model = XsiPersistenceKit.instance().readModel(pp); Assert.assertTrue(Matcher.match(new FreemindInstance(model.wGetLanguageKit()).create(), model)); } @Category(SlowTests.class) @Test public void testAppEngine() throws Exception { InputStream is = loader.getResourceAsStream("appengine-web.xsd"); StreamSource ss = new StreamSource(is); Schema schema = factory.newSchema(ss); is = loader.getResourceAsStream("appengine-web.xml"); Validator v = schema.newValidator(); v.validate(new StreamSource(is)); is = loader.getResourceAsStream("appengine-web.xml"); IPersistenceProvider pp = new StreamPersistenceProvider(is); pp.getBindings().wDefValue("packageName", "org.whole.lang.xsd.mapping.samples"); IEntity model = XsiPersistenceKit.instance().readModel(pp); Assert.assertTrue(Matcher.match(new AppEngineWebInstance().create(), model)); is = loader.getResourceAsStream("cron.xsd"); ss = new StreamSource(is); schema = factory.newSchema(ss); is = loader.getResourceAsStream("cron.xml"); v = schema.newValidator(); v.validate(new StreamSource(is)); is = loader.getResourceAsStream("cron.xml"); pp = new StreamPersistenceProvider(is); pp.getBindings().wDefValue("packageName", "org.whole.lang.xsd.mapping.samples"); model = XsiPersistenceKit.instance().readModel(pp); Assert.assertTrue(Matcher.match(new CronInstance(model.wGetLanguageKit()).create(), model)); is = loader.getResourceAsStream("queue.xsd"); ss = new StreamSource(is); schema = factory.newSchema(ss); is = loader.getResourceAsStream("queue.xml"); v = schema.newValidator(); v.validate(new StreamSource(is)); is = loader.getResourceAsStream("queue.xml"); pp = new StreamPersistenceProvider(is); pp.getBindings().wDefValue("packageName", "org.whole.lang.xsd.mapping.samples"); model = XsiPersistenceKit.instance().readModel(pp); Assert.assertTrue(Matcher.match(new QueueInstance(model.wGetLanguageKit()).create(), model)); is = loader.getResourceAsStream("datastore-indexes.xsd"); ss = new StreamSource(is); schema = factory.newSchema(ss); is = loader.getResourceAsStream("datastore-indexes.xml"); v = schema.newValidator(); v.validate(new StreamSource(is)); is = loader.getResourceAsStream("datastore-indexes.xml"); pp = new StreamPersistenceProvider(is); pp.getBindings().wDefValue("packageName", "org.whole.lang.xsd.mapping.samples"); model = XsiPersistenceKit.instance().readModel(pp); Assert.assertTrue(Matcher.match(new DatastoreIndexesInstance(model.wGetLanguageKit()).create(), model)); is = loader.getResourceAsStream("dos.xsd"); ss = new StreamSource(is); schema = factory.newSchema(ss); is = loader.getResourceAsStream("dos.xml"); v = schema.newValidator(); v.validate(new StreamSource(is)); is = loader.getResourceAsStream("dos.xml"); pp = new StreamPersistenceProvider(is); pp.getBindings().wDefValue("packageName", "org.whole.lang.xsd.mapping.samples"); model = XsiPersistenceKit.instance().readModel(pp); Assert.assertTrue(Matcher.match(new DosInstance(model.wGetLanguageKit()).create(), model)); is = loader.getResourceAsStream("jdoconfig_2_3.xsd"); ss = new StreamSource(is); schema = factory.newSchema(ss); is = loader.getResourceAsStream("jdoconfig.xml"); v = schema.newValidator(); v.validate(new StreamSource(is)); is = loader.getResourceAsStream("jdoconfig.xml"); pp = new StreamPersistenceProvider(is); pp.getBindings().wDefValue("packageName", "org.whole.lang.xsd.mapping.samples"); model = XsiPersistenceKit.instance().readModel(pp); Assert.assertTrue(Matcher.match(new JDOConfigInstance().create(), model)); } @Test public void testChoiceSample() throws Exception { InputStream is = loader.getResourceAsStream("ChoiceSample.xsd"); StreamSource ss = new StreamSource(is); Schema schema = factory.newSchema(ss); is = loader.getResourceAsStream("ChoiceSample.xml"); Validator v = schema.newValidator(); v.validate(new StreamSource(is)); is = loader.getResourceAsStream("ChoiceSample.xml"); IPersistenceProvider pp = new StreamPersistenceProvider(is); pp.getBindings().wDefValue("packageName", "org.whole.lang.xsd.mapping.samples"); IEntity model = XsiPersistenceKit.instance().readModel(pp); Assert.assertTrue(Matcher.match(new ChoiceSampleInstance().create(), model)); } @Category(SlowTests.class) @Test public void testPain() throws Exception { InputStream is = loader.getResourceAsStream("pain.xsd"); StreamSource ss = new StreamSource(is); Schema schema = factory.newSchema(ss); is = loader.getResourceAsStream("pain.xml"); Validator v = schema.newValidator(); v.validate(new StreamSource(is)); is = loader.getResourceAsStream("pain.xml"); IPersistenceProvider pp = new StreamPersistenceProvider(is); pp.getBindings().wDefValue("packageName", "org.whole.lang.xsd.mapping.samples"); IEntity model = XsiPersistenceKit.instance().readModel(pp); Assert.assertTrue(Matcher.match(new PainInstance().create(), model)); } @Test public void testECore() throws Exception { InputStream is = loader.getResourceAsStream("ECore.xsd"); StreamSource ss = new StreamSource(is); Schema schema = factory.newSchema(ss); is = loader.getResourceAsStream("HUTN.ecore"); Validator v = schema.newValidator(); v.validate(new StreamSource(is)); } //Requires an Internet connection @Category(SlowTests.class) @Test public void testDocbook() throws Exception { InputStream is = loader.getResourceAsStream("docbook.xsd"); StreamSource ss = new StreamSource(is); Schema schema = factory.newSchema(ss); is = loader.getResourceAsStream("docbook-howto.xml"); Validator v = schema.newValidator(); v.validate(new StreamSource(is)); } @Category(SlowTests.class) @Test public void testFlex3() throws Exception { InputStream is = loader.getResourceAsStream("flex3.xsd"); StreamSource ss = new StreamSource(is); Schema schema = factory.newSchema(ss); is = loader.getResourceAsStream("flex3-sample.xml"); Validator v = schema.newValidator(); v.validate(new StreamSource(is)); } @Category(SlowTests.class) @Test public void testSCTScf() throws Exception { InputStream is = loader.getResourceAsStream("SepaSct.xsd"); StreamSource ss = new StreamSource(is); Schema schema = factory.newSchema(ss); is = loader.getResourceAsStream("SepaSct.xml"); Validator v = schema.newValidator(); v.validate(new StreamSource(is)); is = loader.getResourceAsStream("SepaSct.xml"); IPersistenceProvider pp = new StreamPersistenceProvider(is); pp.getBindings().wDefValue("packageName", "org.whole.lang.xsd.mapping.samples"); IEntity model = XsiPersistenceKit.instance().readModel(pp); Assert.assertTrue(Matcher.match(new SepaSctInstance().create(), model)); } //Requires an Internet connection @Category({SlowTests.class, KnownFailingTests.class})//FIXME remove KnownFailingTests @Test public void testSimpleContent() throws Exception { InputStream is = loader.getResourceAsStream("simpleContent.xsd"); StreamSource ss = new StreamSource(is); Schema schema = factory.newSchema(ss); is = loader.getResourceAsStream("simpleContent.xml"); Validator v = schema.newValidator(); v.validate(new StreamSource(is)); is = loader.getResourceAsStream("simpleContent.xml"); IPersistenceProvider pp = new StreamPersistenceProvider(is); pp.getBindings().wDefValue("packageName", "org.whole.lang.xsd.mapping.samples"); IEntity model = XsiPersistenceKit.instance().readModel(pp); Assert.assertTrue(Matcher.match(new SimpleContentInstance().create(), model)); } @Test public void testMappedEditorsModel() throws Exception { InputStream is = loader.getResourceAsStream("Editors.xsd"); StreamSource ss = new StreamSource(is); Schema schema = factory.newSchema(ss); is = loader.getResourceAsStream("Editors.xml"); Validator v = schema.newValidator(); v.validate(new StreamSource(is)); } @Test public void testMappedArtifactsModel() throws Exception { InputStream is = loader.getResourceAsStream("Artifacts.xsd"); StreamSource ss = new StreamSource(is); Schema schema = factory.newSchema(ss); is = loader.getResourceAsStream("Artifacts.xml"); Validator v = schema.newValidator(); v.validate(new StreamSource(is)); } @Test public void testModelsToXmlSchemaXXX() throws Exception { IBindingManager bm = BindingManagerFactory.instance.createArguments(); PathExpression path = new ModelToXmlSchemaQuery().create(); Model model = (Model) ModelsTemplateManager.instance().create("Models model"); String uri = model.getUri().getValue(); ILanguageKit lk = ReflectionFactory.getLanguageKit(uri); IEntity tuple = BehaviorUtils.evaluateFirstResult(path, model, bm); Assert.assertNotNull(tuple); InterpreterOperation.interpret(tuple.wGet(1)); ITemplateManager tm = lk.getTemplateManager(); IEntity entity = tm.create("Editors model"); IPersistenceProvider pp = new StringPersistenceProvider(); XsiPersistenceKit.instance().writeModel(entity, pp); IEntity entity2 = XsiPersistenceKit.instance().readModel(pp); boolean matches = Matcher.match(entity, entity2); Assert.assertTrue (matches); } }