/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.xsd.ui.wizards; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import junit.extensions.TestSetup; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; import org.eclipse.xsd.XSDElementDeclaration; import org.eclipse.xsd.XSDSchema; import org.eclipse.xsd.XSDTypeDefinition; import org.eclipse.xsd.util.XSDResourceFactoryImpl; import org.eclipse.xsd.util.XSDResourceImpl; import org.teiid.core.util.SmartTestDesignerSuite; import org.teiid.designer.ui.viewsupport.RelationalObjectBuilder; /** * @since 4.2 */ public class TestGenerateVirtualFromXsdHelper extends TestCase { private static final String BT = "org.teiid.designer.metamodels.relational.impl.BaseTableImpl";//$NON-NLS-1$ private static final String COL = "org.teiid.designer.metamodels.relational.impl.ColumnImpl";//$NON-NLS-1$ private static final String testData = SmartTestDesignerSuite.getTestDataPath(TestGenerateVirtualFromXsdHelper.class) + File.separator; private final String targetPath = testData + "Junk.xmi";//$NON-NLS-1$ private final String DLA1 = testData + "DAASC_214_to_IDE_Schema.xsd"; //$NON-NLS-1$ private final String DLA2 = testData + "214_DAASC_to_IDE_Schema.xsd"; //$NON-NLS-1$ private final String BOOKS = testData + "Books.xsd"; //$NON-NLS-1$ private MultiStatus status; private ResourceSet resourceSet; private Resource target; /** * Constructor for TestGenerateVirtualFromXsdHelper. * * @param name */ public TestGenerateVirtualFromXsdHelper( String name ) { super(name); } /* * @see TestCase#setUp() */ @Override public void setUp() throws Exception { super.setUp(); GenerateVirtualFromXsdHelper.HEADLESS = true; RelationalObjectBuilder.HEADLESS = true; status = new MultiStatus("org.teiid.designer.xsd.ui", 1, "Testing Result", null); //$NON-NLS-1$//$NON-NLS-2$ resourceSet = new ResourceSetImpl(); resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl()); //$NON-NLS-1$ resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xsd", new XSDResourceFactoryImpl()); //$NON-NLS-1$ target = resourceSet.createResource(URI.createFileURI(targetPath)); } /* * @see TestCase#tearDown() */ @Override public void tearDown() throws Exception { super.tearDown(); GenerateVirtualFromXsdHelper.HEADLESS = false; RelationalObjectBuilder.HEADLESS = false; status = null; resourceSet = null; File targetFile = new File(targetPath); if (targetFile.exists()) { targetFile.delete(); } } /** * Test suite, with one-time setup. */ public static Test suite() { TestSuite suite = new SmartTestDesignerSuite("org.teiid.designer.xsd.ui", "TestGenerateVirtualFromXsdHelper"); //$NON-NLS-1$ //$NON-NLS-2$ suite.addTestSuite(TestGenerateVirtualFromXsdHelper.class); // One-time setup and teardown return new TestSetup(suite) { @Override public void setUp() { } @Override public void tearDown() { } }; } // ========================================================================= // H E L P E R M E T H O D S // ========================================================================= private void helpValidateResult( final int expectedTableCount, final int expectedColCount ) { final StringBuffer msgs = new StringBuffer(); if (!status.isOK()) { msgs.append("Test failed with problems:");//$NON-NLS-1$ final IStatus[] children = status.getChildren(); for (int i = 0; i < children.length; i++) { final IStatus status = children[i]; msgs.append("\n" + status.getMessage());//$NON-NLS-1$ } // for } final Iterator allContents = target.getAllContents(); int colCount = 0; int tableCount = 0; while (allContents.hasNext()) { final Object next = allContents.next(); if (BT.equals(next.getClass().getName())) { tableCount++; } else if (COL.equals(next.getClass().getName())) { colCount++; } } // while if (colCount != expectedColCount) { msgs.append("\nCreated wrong number of Columns. Expected " + expectedColCount + " but got " + colCount); //$NON-NLS-1$ //$NON-NLS-2$ } if (tableCount != expectedTableCount) { msgs.append("\nCreated wrong number of Tables. Expected " + expectedTableCount + " but got " + tableCount); //$NON-NLS-1$//$NON-NLS-2$ } if (msgs.length() > 0) { fail(msgs.toString()); } } private Collection helpGetTypes( final String modelPath ) { final ArrayList types = new ArrayList(); try { final XSDResourceImpl rsrc = new XSDResourceImpl(URI.createFileURI(modelPath)); rsrc.load(new HashMap()); final XSDSchema schema = rsrc.getSchema(); final Iterator contents = schema.getContents().iterator(); while (contents.hasNext()) { final Object next = contents.next(); if (next instanceof XSDTypeDefinition) { types.add(next); } } // while } catch (Exception err) { fail("Error loading XSD");//$NON-NLS-1$ } return types; } private Collection helpGetElements( final String modelPath ) { final ArrayList elements = new ArrayList(); try { final XSDResourceImpl rsrc = new XSDResourceImpl(URI.createFileURI(modelPath)); rsrc.load(new HashMap()); final XSDSchema schema = rsrc.getSchema(); final Iterator contents = schema.getContents().iterator(); while (contents.hasNext()) { final Object next = contents.next(); if (next instanceof XSDElementDeclaration) { elements.add(next); } } // while } catch (Exception err) { fail("Error loading XSD");//$NON-NLS-1$ } return elements; } // ========================================================================= // T E S T C A S E S // ========================================================================= public void testDLA1Schema() { try { final Collection types = helpGetTypes(DLA1); final GenerateVirtualFromXsdHelper helper = new GenerateVirtualFromXsdHelper(status, target, types); helper.doBuild(null); helpValidateResult(6, 226); } catch (RuntimeException err) { err.printStackTrace(); fail("Unexpected error");//$NON-NLS-1$ } } public void testDLA2Schema() { try { final Collection types = helpGetTypes(DLA2); final GenerateVirtualFromXsdHelper helper = new GenerateVirtualFromXsdHelper(status, target, types); helper.doBuild(null); helpValidateResult(6, 226); } catch (RuntimeException err) { err.printStackTrace(); fail("Unexpected error");//$NON-NLS-1$ } } public void testBooksSchema() { try { final Collection types = helpGetTypes(BOOKS); final GenerateVirtualFromXsdHelper helper = new GenerateVirtualFromXsdHelper(status, target, types); helper.doBuild(null); helpValidateResult(10, 54); } catch (RuntimeException err) { err.printStackTrace(); fail("Unexpected error");//$NON-NLS-1$ } } public void testDLA1SchemaElements() { try { final Collection types = helpGetElements(DLA1); final GenerateVirtualFromXsdHelper helper = new GenerateVirtualFromXsdHelper(status, target, types); helper.doBuild(null); helpValidateResult(1, 98); } catch (RuntimeException err) { err.printStackTrace(); fail("Unexpected error");//$NON-NLS-1$ } } public void testDLA2SchemaElements() { try { final Collection types = helpGetElements(DLA2); final GenerateVirtualFromXsdHelper helper = new GenerateVirtualFromXsdHelper(status, target, types); helper.doBuild(null); helpValidateResult(1, 98); } catch (RuntimeException err) { err.printStackTrace(); fail("Unexpected error");//$NON-NLS-1$ } } public void testBooksSchemaElements() { try { final Collection types = helpGetElements(BOOKS); final GenerateVirtualFromXsdHelper helper = new GenerateVirtualFromXsdHelper(status, target, types); helper.doBuild(null); helpValidateResult(4, 34); } catch (RuntimeException err) { err.printStackTrace(); fail("Unexpected error");//$NON-NLS-1$ } } }