/*
* Copyright (c) 2016 RWTH Aachen. All rights reserved.
*
* http://www.se-rwth.de/
*/
package mc.emf.serialization;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.IOException;
import java.util.List;
import java.util.Optional;
import org.antlr.v4.runtime.RecognitionException;
import org.eclipse.emf.compare.diff.metamodel.DiffElement;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.junit.Test;
//import de.monticore.emf.fautomaton.automatonwithaction.actionautomaton._ast.ActionAutomatonPackage;
import de.monticore.emf.util.AST2ModelFiles;
import de.monticore.emf.util.compare.AstEmfDiffUtility;
import mc.GeneratorIntegrationsTest;
import mc.feature.fautomaton.automaton.flatautomaton._ast.ASTAutomaton;
import mc.feature.fautomaton.automaton.flatautomaton._ast.ASTState;
import mc.feature.fautomaton.automaton.flatautomaton._ast.ASTTransition;
import mc.feature.fautomaton.automaton.flatautomaton._ast.FlatAutomatonNodeFactory;
import mc.feature.fautomaton.automaton.flatautomaton._ast.FlatAutomatonPackage;
import mc.feature.fautomaton.automaton.flatautomaton._parser.FlatAutomatonParser;
/**
* TODO: Write me!
*
* @author (last commit) $Author$
* @version $Revision$, $Date$
*/
public class ASTInstanceSerialDeserialTest extends GeneratorIntegrationsTest {
@Test
public void testSerializeAndDeserializeParseInstance() {
try {
Optional<ASTAutomaton> transB = new FlatAutomatonParser()
.parse("src/test/resources/mc/emf/diff/Testautomat.aut");
Optional<ASTAutomaton> transC = new FlatAutomatonParser()
.parse("src/test/resources/mc/emf/diff/Testautomat2.aut");
if (transB.isPresent() && transC.isPresent()) {
AST2ModelFiles.get().serializeASTInstance(transB.get(),
"B");
AST2ModelFiles.get().serializeASTInstance(transC.get(),
"C");
EObject deserAstTransB = AST2ModelFiles.get().deserializeASTInstance("ASTAutomaton_B",
FlatAutomatonPackage.eINSTANCE);
assertNotNull(deserAstTransB);
assertTrue(deserAstTransB instanceof ASTAutomaton);
assertTrue(transB.get().deepEquals(deserAstTransB));
assertFalse(transC.get().deepEquals(deserAstTransB));
assertEquals("Testautomat", ((ASTAutomaton) deserAstTransB).getName());
List<DiffElement> diffs = AstEmfDiffUtility.getAllAstDiffs(transB.get(),
(ASTAutomaton) deserAstTransB);
assertTrue(diffs.isEmpty());
}
else {
fail("Parse errors");
}
}
catch (RecognitionException | IOException e) {
fail("Should not reach this, but: " + e);
}
catch (InterruptedException e) {
fail("Should not reach this, but: " + e);
}
}
@Test
public void testSerializeAndDeserializeCreatedInstance() {
try {
ASTAutomaton aut = FlatAutomatonNodeFactory.createASTAutomaton();
ASTTransition trans = FlatAutomatonNodeFactory.createASTTransition();
ASTState state1 = FlatAutomatonNodeFactory.createASTState();
ASTState state2 = FlatAutomatonNodeFactory.createASTState();
aut.setName("aut1");
aut.getTransitions().add(trans);
aut.getStates().add(state1);
aut.getStates().add(state2);
state1.setName("state1");
state2.setName("state2");
trans.setFrom(state1.getName());
trans.setTo(state2.getName());
trans.setActivate("trans1");
state1.setInitial(true);
state2.setFinal(true);
AST2ModelFiles.get().serializeASTInstance(aut, "Aut1");
EObject deserObject = AST2ModelFiles.get().deserializeASTInstance("ASTAutomaton_Aut1",
FlatAutomatonPackage.eINSTANCE);
assertNotNull(deserObject);
assertTrue(deserObject instanceof ASTAutomaton);
ASTAutomaton serializedAut = (ASTAutomaton) deserObject;
assertTrue(EcoreUtil.equals(aut, serializedAut));
assertTrue(aut.deepEquals(serializedAut));
assertTrue(serializedAut.getStates().get(0).isInitial());
}
catch (IOException e) {
fail("Should not reach this, but: " + e);
}
}
}