From f20554307992e2e69f78ac812e16a03cdcb53b11 Mon Sep 17 00:00:00 2001 From: Johannes Mey <johannes.mey@tu-dresden.de> Date: Sun, 24 Feb 2019 21:16:11 +0100 Subject: [PATCH] add initial test for new feature --- tests/Makefile | 1 + tests/multipleFiles/.gitignore | 8 ++-- tests/resolverHelper/.gitignore | 4 ++ tests/resolverHelper/AbstractTests.java | 25 ++++++++++++ tests/resolverHelper/All.java | 51 +++++++++++++++++++++++++ tests/resolverHelper/Grammar.relast | 7 ++++ tests/resolverHelper/Makefile | 18 +++++++++ tests/resolverHelper/MyRefResolver.jadd | 15 ++++++++ tests/resolverHelper/Utils.jadd | 41 ++++++++++++++++++++ 9 files changed, 167 insertions(+), 3 deletions(-) create mode 100644 tests/resolverHelper/.gitignore create mode 100644 tests/resolverHelper/AbstractTests.java create mode 100644 tests/resolverHelper/All.java create mode 100644 tests/resolverHelper/Grammar.relast create mode 100644 tests/resolverHelper/Makefile create mode 100644 tests/resolverHelper/MyRefResolver.jadd create mode 100644 tests/resolverHelper/Utils.jadd diff --git a/tests/Makefile b/tests/Makefile index 0b9d326..5a9e1b0 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -3,3 +3,4 @@ all: cd valid && make test cd errors && make test cd multipleFiles && make test + cd resolverHelper && make test diff --git a/tests/multipleFiles/.gitignore b/tests/multipleFiles/.gitignore index 670d442..77ed314 100644 --- a/tests/multipleFiles/.gitignore +++ b/tests/multipleFiles/.gitignore @@ -1,3 +1,5 @@ -/AST/* -/*Gen.ast -/*Gen.jadd +AST/* +All.ast +All.jadd +AllGen.jadd +AllGen.ast \ No newline at end of file diff --git a/tests/resolverHelper/.gitignore b/tests/resolverHelper/.gitignore new file mode 100644 index 0000000..ce16505 --- /dev/null +++ b/tests/resolverHelper/.gitignore @@ -0,0 +1,4 @@ +/AST/* +/All.ast +All.jadd +AllRefResolver.jadd diff --git a/tests/resolverHelper/AbstractTests.java b/tests/resolverHelper/AbstractTests.java new file mode 100644 index 0000000..3b86096 --- /dev/null +++ b/tests/resolverHelper/AbstractTests.java @@ -0,0 +1,25 @@ +public class AbstractTests { + protected void assertException() { + check(false, "should throw exception"); + } + protected void assertTrue(boolean b) { + check(b, "value should be true (is false)"); + } + protected void assertFalse(boolean b) { + check(!b, "value should be flase (is true)"); + } + protected void assertNull(Object obj) { + check(obj == null, "Object not null: " + obj); + } + protected void assertSame(Object o1, Object o2) { + check(o1 == o2, "Objects not same: " + o1 + ", " + o2); + } + protected void assertEquals(Object o1, Object o2) { + check(o1.equals(o2), "Objects not equals: " + o1 + ", " + o2); + } + protected void check(boolean b, String message) { + if (!b) { + throw new RuntimeException(message); + } + } +} \ No newline at end of file diff --git a/tests/resolverHelper/All.java b/tests/resolverHelper/All.java new file mode 100644 index 0000000..e2f65cc --- /dev/null +++ b/tests/resolverHelper/All.java @@ -0,0 +1,51 @@ +import AST.*; +import java.util.*; + +@SuppressWarnings("ArraysAsListWithZeroOrOneArgument") +public class All extends AbstractTests { + private Root r; + private A a1; + private A a2; + private A a3; + private B b1; + private B b2; + private B b3; + + public static void main(String args[]) { + new All().test(); + } + + public void test() { + testNameRes1(); + } + + + + /** + * rel A.Di1 -> B; + */ + private void testNameRes1() { + setup(); + a1.setRel1(NamedElement.createRef("b2")); + System.out.println("Rel 1 of a1 has type " + a1.getRel1().getClass().getSimpleName()); + assertSame(a1.getRel1(), b2); + } + + private void setup() { + r = new Root(); + a1 = new A("a1"); + a2 = new A("a2"); + a3 = new A("a3"); + b1 = new B("b1"); + b2 = new B("b2"); + b3 = new B("b3"); + + r.addA(a1); + r.addA(a2); + r.addA(a3); + r.addB(b1); + r.addB(b2); + r.addB(b3); + } + +} diff --git a/tests/resolverHelper/Grammar.relast b/tests/resolverHelper/Grammar.relast new file mode 100644 index 0000000..51cfc61 --- /dev/null +++ b/tests/resolverHelper/Grammar.relast @@ -0,0 +1,7 @@ +Root ::= A* B*; +abstract NamedElement ::= <Name:String>; +A:NamedElement; +B:NamedElement; + +rel A.Rel1 -> NamedElement; +rel A.Rel2 -> NamedElement; diff --git a/tests/resolverHelper/Makefile b/tests/resolverHelper/Makefile new file mode 100644 index 0000000..3ffd58d --- /dev/null +++ b/tests/resolverHelper/Makefile @@ -0,0 +1,18 @@ +all: build-jar test +test: clean test1 + @echo "#" + @echo "# RESOLVER HELPER TESTS OK" + @echo "#" + +build-jar: + (cd ../../ && ./gradlew jar) +test1: + java -jar ../../build/libs/relast.jar Grammar.relast --file --grammarName=All --resolverHelper + java -jar ../../tools/jastadd2.jar --package=AST --rewrite=cnta All.ast All.jadd AllRefResolver.jadd MyRefResolver.jadd Utils.jadd + javac AST/*.java All.java + java All + +clean: + rm -rf AST + rm -f *.class + rm -f *.ast \ No newline at end of file diff --git a/tests/resolverHelper/MyRefResolver.jadd b/tests/resolverHelper/MyRefResolver.jadd new file mode 100644 index 0000000..562f260 --- /dev/null +++ b/tests/resolverHelper/MyRefResolver.jadd @@ -0,0 +1,15 @@ +aspect MyRewrites { + + // context-independent name resolution + refine RefResolverStubs eq ASTNode.resolveNamedElement(String id) { + System.out.println("resolving " + id + " to " + root().findNamedElement(id)); + return root().findNamedElement(id); + } + + refine RefResolverStubs eq A.resolveRel2(String id) { + // default to context-independent name resolution + return resolveNamedElement(id); + } + +} + diff --git a/tests/resolverHelper/Utils.jadd b/tests/resolverHelper/Utils.jadd new file mode 100644 index 0000000..eb9729c --- /dev/null +++ b/tests/resolverHelper/Utils.jadd @@ -0,0 +1,41 @@ +aspect Utils { + public String NamedElement.toString() { + return getName(); + } + + inh Root ASTNode.root(); + eq Root.getA(int i).root() = this; + eq Root.getB(int i).root() = this; + + syn NamedElement Root.findNamedElement(String name) { + for (A a : getAList()) { + if (a.getName().equals(name)) { + return a; + } + } + for (B b : getBList()) { + if (b.getName().equals(name)) { + return b; + } + } + return null; + } + + syn A Root.findA(String name) { + for (A a : getAList()) { + if (a.getName().equals(name)) { + return a; + } + } + return null; + } + + syn B Root.findB(String name) { + for (B b : getBList()) { + if (b.getName().equals(name)) { + return b; + } + } + return null; + } +} \ No newline at end of file -- GitLab