/**
* Copyright (c) 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.xmi;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.HashMap;
import java.util.Map;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
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.XMLResource;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
import org.eclipse.emf.test.models.movie.db.DBFactory;
import org.eclipse.emf.test.models.movie.db.DBPackage;
import org.eclipse.emf.test.models.movie.db.DocumentRoot;
import org.eclipse.emf.test.models.movie.db.MovieDBType;
/**
* XMI tests: loading and serializing model with multiple document root instances.
*/
public class MultipleDocumentRootTest extends TestCase
{
public MultipleDocumentRootTest(String name)
{
super(name);
}
public static Test suite()
{
TestSuite ts = new TestSuite("MultipleDocumentRootTest");
ts.addTestSuite(MultipleDocumentRootTest.class);
return ts;
}
static final String LF = System.getProperty("line.separator");
static final String [] EXPECTED =
{
"<?xml version=\"1.0\" encoding=\"ASCII\"?>" + LF +
"<xmi:XMI xmi:version=\"2.0\" xmlns:xmi=\"http://www.omg.org/XMI\" xmlns:db=\"http:///org.eclipse.emf.test.models/MovieDB\">" + LF +
" <db:DocumentRoot>" + LF +
" <movieDB>" + LF +
" <comment>1</comment>" + LF +
" </movieDB>" + LF +
" </db:DocumentRoot>" + LF +
" <db:DocumentRoot>" + LF +
" <movieDB>" + LF +
" <comment>2</comment>" + LF +
" </movieDB>" + LF +
" </db:DocumentRoot>" + LF +
"</xmi:XMI>" + LF,
"<?xml version=\"1.0\" encoding=\"ASCII\"?>" + LF +
"<xmi:XMI xmi:version=\"2.0\" xmlns:xmi=\"http://www.omg.org/XMI\" xmlns:db=\"http:///org.eclipse.emf.test.models/MovieDB\">" + LF +
" <db:movieDB>" + LF +
" <comment>1</comment>" + LF +
" </db:movieDB>" + LF +
" <db:movieDB>" + LF +
" <comment>2</comment>" + LF +
" </db:movieDB>" + LF +
"</xmi:XMI>" + LF
};
public void testMultipleDocumentRoot() throws Exception
{
ResourceSet rs = new ResourceSetImpl();
DBPackage.eINSTANCE.getName();
DocumentRoot documentRoot1 = DBFactory.eINSTANCE.createDocumentRoot();
MovieDBType movieDB1 = DBFactory.eINSTANCE.createMovieDBType();
movieDB1.setComment("1");
documentRoot1.setMovieDB(movieDB1);
DocumentRoot documentRoot2 = DBFactory.eINSTANCE.createDocumentRoot();
MovieDBType movieDB2 = DBFactory.eINSTANCE.createMovieDBType();
movieDB2.setComment("2");
documentRoot2.setMovieDB(movieDB2);
Map<Object, Object> options = new HashMap<Object, Object>();
for (int i = 0; i < 2; ++i)
{
rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xml", new XMIResourceFactoryImpl());
if (i == 1)
{
options.put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);
}
Resource r1 = rs.createResource(URI.createURI("movieDB.xml"));
r1.getContents().add(documentRoot1);
r1.getContents().add(documentRoot2);
ByteArrayOutputStream outputstream1 = new ByteArrayOutputStream();
r1.save(outputstream1, options);
Resource r2 = rs.createResource(URI.createURI("movieDB2.xml"));
r2.load(new ByteArrayInputStream(outputstream1.toByteArray()), options);
assertEquals(2, r2.getContents().size());
ByteArrayOutputStream outputstream2 = new ByteArrayOutputStream();
r2.save(outputstream2, options);
assertEquals(EXPECTED[i], new String(outputstream2.toByteArray()));
}
}
}