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;
}
}
}