/**
* Copyright (c) 2002-2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM - Initial API and implementation
*/
package org.eclipse.emf.test.xml.xsdecore;
import java.io.ByteArrayOutputStream;
import java.util.Collection;
import java.util.HashMap;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EPackage.Registry;
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.util.BasicExtendedMetaData;
import org.eclipse.emf.ecore.util.ExtendedMetaData;
import org.eclipse.emf.ecore.xmi.XMLResource;
import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl;
import org.eclipse.emf.ecore.xmi.impl.XMLParserPoolImpl;
import org.eclipse.emf.ecore.xmi.impl.XMLResourceFactoryImpl;
import org.eclipse.emf.test.common.TestUtil;
import org.eclipse.emf.test.xml.AllSuites;
import org.eclipse.xsd.ecore.XSDEcoreBuilder;
import org.eclipse.xsd.util.XSDResourceFactoryImpl;
/**
* Test for conversion from XSD to ECore - compare against expected output
*/
public class XSDEcoreBuilderTests extends TestCase
{
XSDEcoreBuilder xsdEcoreBuilder;
final static String BASE_XSD_URI = "file:///" + TestUtil.getPluginDirectory(AllSuites.PLUGIN_ID) + "/data/xsd/";
public XSDEcoreBuilderTests(String name)
{
super(name);
}
public static Test suite()
{
TestSuite ts = new TestSuite("XSDEcoreBuilderTests");
ts.addTest(new XSDEcoreBuilderTests("testMyIPO"));
return ts;
}
/**
* @see junit.framework.TestCase#setUp()
*/
@Override
protected void setUp() throws Exception
{
xsdEcoreBuilder = new XSDEcoreBuilder();
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("xsd", new XSDResourceFactoryImpl());
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("ecore", new EcoreResourceFactoryImpl());
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("*", new XMLResourceFactoryImpl());
}
public void testMyIPO() throws Exception
{
// SET SCHEMA URI
@SuppressWarnings("unchecked")
Collection<EPackage> packageList = (Collection<EPackage>)(Collection<?>)xsdEcoreBuilder.generate(URI.createURI(BASE_XSD_URI + "myipo.xsd"));
HashMap<String, Object> options = new HashMap<String, Object>();
options.put(XMLResource.OPTION_USE_PARSER_POOL, new XMLParserPoolImpl(true));
ResourceSet rs = new ResourceSetImpl();
Registry packageRegistry = rs.getPackageRegistry();
for (EPackage epackage : packageList)
{
String nsURI = epackage.getNsURI();
packageRegistry.put(nsURI, epackage);
}
ExtendedMetaData extendedMetaData = new BasicExtendedMetaData(packageRegistry);
options.put(XMLResource.OPTION_EXTENDED_META_DATA, extendedMetaData);
// SET INSTANCE DOCUMENT URI
Resource resource = rs.createResource(URI.createURI(BASE_XSD_URI + "myipo.xml"));
// LOAD INSTANCE DOCUMENT
resource.load(options);
// SERIALIZE
ByteArrayOutputStream out = new ByteArrayOutputStream(2064);
resource.save(out, options);
String value = new String(out.toByteArray(), "UTF8");
assertTrue(value.contains("]]>") );
}
}