diff --git a/spec/jastadd/Backend.jadd b/spec/jastadd/Backend.jadd index bcc9c37ab7ff60f4a39664ba0d5c137cb265dd78..bd2e2903586c1bfdf76f0c3850fee9e53a753504 100644 --- a/spec/jastadd/Backend.jadd +++ b/spec/jastadd/Backend.jadd @@ -165,7 +165,7 @@ aspect BackendDirectedAPI { // Get sb.append(ind(1) + "public java.util.List<" + ofTypeDecl() + "> " + toTypeDecl()); sb.append("." + name() + "() {\n"); - sb.append(ind(2) + "ArrayList<List> l = get" + getImplAttributeName() + "();\n"); + sb.append(ind(2) + "ArrayList<" + ofTypeDecl() + "> l = get" + getImplAttributeName() + "();\n"); sb.append(ind(2) + "return l != null ? l : Collections.emptyList();\n"); sb.append(ind(1) + "}\n"); diff --git a/test/.gitignore b/test/.gitignore index c9c2125a8b347700bbacb099c11208352363bc5c..f09d75c9089a0b724a1dfb2700a4ebb1656bcb53 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -1,3 +1,3 @@ /AST/* -/AllBiGen.ast -/AllBiGen.jadd +/AllGen.ast +/AllGen.jadd diff --git a/test/AllBi.relast b/test/All.relast similarity index 82% rename from test/AllBi.relast rename to test/All.relast index be67e8341b4e73f95b0890e9cccbf9622f593784..56fe6de2fec686894cc1b3ee9c111040bafb468e 100644 --- a/test/AllBi.relast +++ b/test/All.relast @@ -2,6 +2,10 @@ Root ::= A* B*; A ::= <Name>; B ::= <Name>; +rel A.di1 -> B; +rel A.di2? -> B; +rel A.di3* -> B; + rel A.bi1 <-> B.bi1; rel A.bi2 <-> B.bi2?; rel A.bi3 <-> B.bi3*; diff --git a/test/Makefile b/test/Makefile index 1f345535f740f83265715e537e44deb3950bf7a8..b85d7a3fa004707a733d5b7172f1365e4354ba07 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,8 +1,8 @@ all: compile run compile: (cd .. && ant jar) - java -jar ../compiler.jar AllBi.relast --file - java -jar ../tools/jastadd2.jar --package=AST AllBiGen.ast AllBiGen.jadd Utils.jadd + java -jar ../compiler.jar All.relast --file + java -jar ../tools/jastadd2.jar --package=AST AllGen.ast AllGen.jadd Utils.jadd run: javac AST/*.java Test.java java Test \ No newline at end of file diff --git a/test/Test.java b/test/Test.java index 7dda0f3f43cf1be8671b8d883335f67aac359291..10651e44e3757b5b59320c16ad4a54a6b40c85e2 100644 --- a/test/Test.java +++ b/test/Test.java @@ -15,6 +15,10 @@ public class Test { } public void test() { + testDi1(); + testDi2(); + testDi3(); + testBi1(); testBi2(); testBi3(); @@ -26,6 +30,87 @@ public class Test { testBi9(); } + /** + * rel A.di1 -> B; + */ + private void testDi1() { + setup(); + a1.setDi1(b2); + a2.setDi1(b1); + + assertSame(a1.di1(), b2); + assertSame(a2.di1(), b1); + + a2.setDi1(b2); + + assertSame(a1.di1(), b2); + assertSame(a2.di1(), b2); + + try { + a3.setDi1(null); + check(false, "should throw exception"); + } catch (Exception e) { + // OK + } + } + + + /** + * rel A.di2? -> B; + */ + private void testDi2() { + setup(); + a1.setDi2(b2); + a2.setDi2(b1); + + assertSame(a1.di2(), b2); + assertSame(a2.di2(), b1); + + a2.setDi2(b2); + + assertSame(a1.di2(), b2); + assertSame(a2.di2(), b2); + + a2.setDi2(null); + + assertSame(a1.di2(), b2); + assertNull(a2.di2()); + + assertTrue(a1.hasDi2()); + assertFalse(a2.hasDi2()); + assertFalse(a3.hasDi2()); + } + + + /** + * rel A.di3* -> B; + */ + private void testDi3() { + setup(); + a1.addToDi3(b1); + a1.addToDi3(b2); + a1.addToDi3(b3); + a2.addToDi3(b2); + + assertEquals(a1.di3(), Arrays.asList(b1, b2, b3)); + assertEquals(a2.di3(), Arrays.asList(b2)); + assertEquals(a3.di3(), Arrays.asList()); + + a1.addToDi3(b1); + a2.addToDi3(b1); + a2.addToDi3(b2); + + assertEquals(a1.di3(), Arrays.asList(b1, b2, b3, b1)); + assertEquals(a2.di3(), Arrays.asList(b2, b1, b2)); + assertEquals(a3.di3(), Arrays.asList()); + + a1.removeFromDi3(b1); + a2.removeFromDi3(b2); + + assertEquals(a1.di3(), Arrays.asList(b2, b3, b1)); + assertEquals(a2.di3(), Arrays.asList(b1, b2)); + assertEquals(a3.di3(), Arrays.asList()); + } /** @@ -263,6 +348,12 @@ public class Test { r.addB(b3); } + private void assertTrue(boolean b) { + check(b, "value should be true (is false)"); + } + private void assertFalse(boolean b) { + check(!b, "value should be flase (is true)"); + } private void assertNull(Object obj) { check(obj == null, "Object not null: " + obj); }