use of org.abs_models.frontend.ast.DeltaDecl in project abstools by abstools.
the class OriginalCallTest method targetedOriginalNotFound.
@Test(expected = DeltaModellingException.class)
public void targetedOriginalNotFound() throws DeltaModellingException {
Model model = assertParse("module M;" + "class C { }" + "delta D1;" + "uses M;" + "modifies class C { modifies Unit m() { core.original(); } }");
DeltaDecl d1 = findDelta(model, "D1");
// Model.resolveOriginalCalls(new ArrayList<DeltaDecl>(Arrays.asList(d1)));
model.applyDeltas(new ArrayList<>(Arrays.asList(d1)));
}
use of org.abs_models.frontend.ast.DeltaDecl in project abstools by abstools.
the class OriginalCallTest method multipleTargetedOriginalCalls2.
@Test
public void multipleTargetedOriginalCalls2() throws DeltaModellingException {
Model model = assertParse("module M;" + "class C { }" + "delta D1;" + "uses M;" + "modifies class C { adds Unit m() {} }" + "delta D2;uses M;" + "modifies class C { modifies Unit m() { D1.original(); } }" + "delta D3;uses M;" + "modifies class C { modifies Unit m() { D1.original(); } }" + "delta D4;uses M;" + "modifies class C { modifies Unit m() { D2.original(); } }");
DeltaDecl d1 = findDelta(model, "D1");
DeltaDecl d2 = findDelta(model, "D2");
DeltaDecl d3 = findDelta(model, "D3");
DeltaDecl d4 = findDelta(model, "D4");
// Model.resolveOriginalCalls(new ArrayList<DeltaDecl>(Arrays.asList(d1,d2,d3)));
model.applyDeltas(new ArrayList<>(Arrays.asList(d1, d2, d3, d4)));
ClassDecl cls = (ClassDecl) findDecl(model, "M", "C");
assertEquals(cls.getMethods().toString(), 3, cls.getMethods().getNumChild());
assertTrue(cls.getMethod(0).getMethodSig().getName().equals("m"));
assertTrue(cls.getMethod(1).getMethodSig().getName().equals("m$ORIGIN_D1"));
assertTrue(cls.getMethod(2).getMethodSig().getName().equals("m$ORIGIN_D2"));
}
use of org.abs_models.frontend.ast.DeltaDecl in project abstools by abstools.
the class SourceCodePositionTest method test.
@Test
public void test() throws IOException, InternalBackendException, DeltaModellingException, WrongProgramArgumentException {
File fcore = folder.newFile("core.abs");
File fd1 = folder.newFile("delta1.abs");
File fd2 = folder.newFile("delta2.abs");
{
FileWriter writer = new FileWriter(fcore);
writer.write("module M;" + "class C0 { Unit m() {} }");
writer.close();
}
{
FileWriter writer = new FileWriter(fd1);
writer.write("delta D1; uses M;" + "adds class C1 { Unit m() {} }" + "modifies class C0 { modifies Unit m() {} }");
writer.close();
}
{
FileWriter writer = new FileWriter(fd2);
writer.write("delta D2; uses M;" + "modifies class C1 { modifies Unit m() { original(); } }");
writer.close();
}
HashSet<String> fileNames = new HashSet<>();
fileNames.add(fcore.getCanonicalPath());
fileNames.add(fd1.getCanonicalPath());
fileNames.add(fd2.getCanonicalPath());
Model model = assertParseFilesOk(fileNames);
DeltaDecl d1 = findDelta(model, "D1");
DeltaDecl d2 = findDelta(model, "D2");
model.applyDeltas(new ArrayList<>(Arrays.asList(d1, d2)));
{
ClassDecl cls = (ClassDecl) findDecl(model, "M", "C0");
assertEquals(cls.getMethod(0).getFileName(), d1.getFileName());
}
{
ClassDecl cls = (ClassDecl) findDecl(model, "M", "C1");
assertEquals(cls.getFileName(), d1.getFileName());
assertEquals(cls.getMethod(0).getFileName(), d2.getFileName());
}
}
use of org.abs_models.frontend.ast.DeltaDecl in project abstools by abstools.
the class TraitTest method resolveTest.
@Test
public void resolveTest() {
Model model = assertParse("module TestMod;" + "interface Inter {}" + "trait T = { " + " Unit printLine_1(){println(\"I'm 1!\");}" + " Unit printLine_2(){println(\"I'm 2!\");}" + "}" + "trait T2 = { " + " Unit printLine_2(){println(\"I'm 2!\");}" + " Unit printLine_3(){println(\"I'm 3!\");}" + "}" + "class InterImpl(Inter inter) implements Inter { }" + "" + "delta D3;" + "modifies class TestMod.InterImpl{" + " adds Int i = 0;" + " adds T modifies T2" + "}");
ClassDecl cls = (ClassDecl) findDecl(model, "TestMod", "InterImpl");
assertNotNull(cls);
assertTrue(cls.getMethods().getNumChild() == 0);
model.applyTraits();
DeltaDecl delta = findDelta(model, "D3");
assertNotNull(delta);
assertThat(delta, instanceOf(DeltaDecl.class));
ModifyClassModifier mm = (ModifyClassModifier) delta.getModuleModifier(0);
DeltaTraitModifier dml = (DeltaTraitModifier) mm.getModifier(1);
AddMethodModifier mcl = (AddMethodModifier) dml.getMethodModifier();
TraitExpr expr = mcl.getTraitExpr();
TraitExpr set = expr.resolve(cls.getModuleDecl());
assertTrue("expected 2, got " + set.getChild(0).getNumChild(), set.getChild(0).getNumChild() == 2);
}
use of org.abs_models.frontend.ast.DeltaDecl in project abstools by abstools.
the class TraitTest method addAddModifierAtRuntimeBackComp.
@Test
public void addAddModifierAtRuntimeBackComp() {
Model model = assertParse("module M;" + "class C { Unit m(){skip;} }");
ClassDecl cls = (ClassDecl) findDecl(model, "M", "C");
MethodSig sig = AbsASTBuilderUtil.createMethodSig("n", AbsASTBuilderUtil.getUnit());
MethodImpl impl = new MethodImpl(sig, new Block(new List<>(), new List<>(new SkipStmt())));
AddMethodModifier opr = new AddMethodModifier(impl);
assertNotNull(opr.getMethodImpl());
ModifyClassModifier mcn = new ModifyClassModifier();
mcn.setName("M.C");
DeltaAccess acc = new DeltaAccess(cls.getModuleDecl().getName());
DeltaDecl dd = new DeltaDecl();
dd.setName("MyDelta");
dd.setImportedModule(acc);
dd.addModuleModifier(mcn);
mcn.addModifier(opr);
mcn.setParent(dd);
acc.setParent(dd);
opr.setParent(mcn);
sig.setParent(opr);
CompilationUnit cu = model.getCompilationUnitList().getChild(0);
cu.addDeltaDecl(dd);
dd.setParent(cu);
model.applyDelta(dd);
assertEquals(2, cls.getMethods().getNumChild());
}
Aggregations