package jetbrains.mps.persistence.xml; /*Generated by MPS */ import jetbrains.mps.CoreMpsTest; import jetbrains.mps.project.Project; import org.junit.BeforeClass; import jetbrains.mps.testbench.BaseMpsTest; import org.junit.AfterClass; import org.junit.Test; import java.io.IOException; import org.jetbrains.mps.openapi.persistence.ModelSaveException; import jetbrains.mps.extapi.model.SModelPersistence; import jetbrains.mps.persistence.XmlModelPersistence; import org.jetbrains.mps.openapi.persistence.StreamDataSource; import jetbrains.mps.extapi.model.SModelData; import jetbrains.mps.smodel.SModelReference; import jetbrains.mps.project.structure.modules.ModuleReference; import jetbrains.mps.project.ModuleId; import jetbrains.mps.smodel.SModelId; import jetbrains.mps.util.FileUtil; import java.io.InputStreamReader; import org.junit.Assert; import org.jetbrains.annotations.NotNull; import java.io.InputStream; import java.io.OutputStream; import org.jetbrains.mps.openapi.persistence.DataSourceListener; import java.io.ByteArrayOutputStream; /** * evgeny, 3/25/13 */ public class XmlConverterTest extends CoreMpsTest { private static Project ourProject; public XmlConverterTest() { } @BeforeClass public static void prepareProject() { ourProject = BaseMpsTest.getEnvironment().createEmptyProject(); } @AfterClass public static void tearDownProject() { ourProject.dispose(); } @Test public void testXml1() throws Exception { testXml("/jetbrains/mps/persistence/xml/testdata/test1.xml"); } @Test public void testXml2() throws Exception { testXml("/jetbrains/mps/persistence/xml/testdata/test2.xml"); } @Test public void testXml3() throws Exception { testXml("/jetbrains/mps/persistence/xml/testdata/test3.xml"); } private void testXml(String resource) throws IOException, ModelSaveException { final SModelPersistence pers = new XmlModelPersistence(); final StreamDataSource source = new XmlConverterTest.MyDataSource(resource); final XmlConverterTest.StringBuilderDataSource sbds = new XmlConverterTest.StringBuilderDataSource(); ourProject.getModelAccess().runReadAction(new Runnable() { @Override public void run() { try { SModelData model = pers.readModel(new SModelReference(new ModuleReference("mockModule", ModuleId.regular()), SModelId.generate(), "xmlfile"), source); pers.writeModel(model, sbds); } catch (IOException e) { throw new RuntimeException(e); } catch (ModelSaveException e) { throw new RuntimeException(e); } } }); String after = sbds.getResult(); String before = FileUtil.read(new InputStreamReader(source.openInputStream(), FileUtil.DEFAULT_CHARSET)).trim(); Assert.assertEquals(before, after); } private class MyDataSource implements StreamDataSource { private final String resourceName; private MyDataSource(String resourceName) { this.resourceName = resourceName; } @NotNull @Override public String getLocation() { return "test"; } @Override public InputStream openInputStream() throws IOException { InputStream stream = XmlConverterTest.this.getClass().getResourceAsStream(resourceName); Assert.assertNotNull(stream); return stream; } @Override public boolean isReadOnly() { return true; } @Override public OutputStream openOutputStream() throws IOException { throw new UnsupportedOperationException(); } @Override public void addListener(DataSourceListener listener) { throw new UnsupportedOperationException(); } @Override public void removeListener(DataSourceListener listener) { throw new UnsupportedOperationException(); } @Override public long getTimestamp() { return 0; } } private static class StringBuilderDataSource implements StreamDataSource { /*package*/ ByteArrayOutputStream bos = new ByteArrayOutputStream(); private StringBuilderDataSource() { } public String getResult() { return new String(bos.toByteArray(), FileUtil.DEFAULT_CHARSET); } @NotNull @Override public String getLocation() { return "test"; } @Override public InputStream openInputStream() throws IOException { throw new UnsupportedOperationException(); } @Override public boolean isReadOnly() { return false; } @Override public OutputStream openOutputStream() throws IOException { return bos; } @Override public void addListener(DataSourceListener listener) { } @Override public void removeListener(DataSourceListener listener) { } @Override public long getTimestamp() { return 0; } } }