From 9b86ba17d800e6d7cca68e982c3904e50ecd4934 Mon Sep 17 00:00:00 2001 From: rschoene <rene.schoene@tu-dresden.de> Date: Thu, 9 Jan 2020 20:07:26 +0100 Subject: [PATCH] Add test case for generated constructors. --- build.gradle | 7 +++ .../jastadd/constructors/Constructors.jrag | 13 +++++ .../jastadd/constructors/Constructors.relast | 9 +++ .../relast/tests/ConstructorsTest.java | 58 +++++++++++++++++++ 4 files changed, 87 insertions(+) create mode 100644 src/test/jastadd/constructors/Constructors.jrag create mode 100644 src/test/jastadd/constructors/Constructors.relast create mode 100644 src/test/java/org/jastadd/relast/tests/ConstructorsTest.java diff --git a/build.gradle b/build.gradle index c3ef9ac..878fe45 100644 --- a/build.gradle +++ b/build.gradle @@ -153,6 +153,13 @@ test.dependsOn compileRelationTest compileRelationTest.dependsOn doublePreprocessRelationTest doublePreprocessRelationTest.dependsOn preprocessRelationTest +task compileConstructorTest(type: RelastTest) { + relastFiles 'src/test/jastadd/constructors/Constructors.relast' + grammarName = 'src/test/jastadd/constructors/Constructors' + packageName = 'constructors.ast' + moreInputFiles 'src/test/jastadd/constructors/Constructors.jrag' +} + task compileDefaultNamesTest(type: RelastTest) { relastFiles 'src/test/jastadd/relations/Relations.relast' grammarName = 'src/test/jastadd/relations/Relations3' diff --git a/src/test/jastadd/constructors/Constructors.jrag b/src/test/jastadd/constructors/Constructors.jrag new file mode 100644 index 0000000..fd86b7f --- /dev/null +++ b/src/test/jastadd/constructors/Constructors.jrag @@ -0,0 +1,13 @@ +aspect NTAs { + syn A S.getS4() = new A(); + syn List<A> S.getS5List() = new List<>(); + syn Opt<A> S.getS6Opt() = new Opt<>(); + syn String S.getS7() = ""; + syn long S.getS8() = 1L; + + syn A B.getB4() = new A(); + syn List<A> B.getB5List() = new List<>(); + syn Opt<A> B.getB6Opt() = new Opt<>(); + syn String B.getB7() = ""; + syn long B.getB8() = 1L; +} diff --git a/src/test/jastadd/constructors/Constructors.relast b/src/test/jastadd/constructors/Constructors.relast new file mode 100644 index 0000000..5b3d5a9 --- /dev/null +++ b/src/test/jastadd/constructors/Constructors.relast @@ -0,0 +1,9 @@ +A; +S ::= S1:A S2:A* [S3:A] /S4:A/ /S5:A*/ /[S6:A]/ /<S7>/ /<S8:long>/; +B : S ::= B1:A B2:A* [B3:A] /B4:A/ /B5:A*/ /[B6:A]/ /<B7>/ /<B8:long>/; +X; +Y; + +rel A.r1 -> X; +rel S.r2* <-> Y.r2; +rel B.r3? -> X; diff --git a/src/test/java/org/jastadd/relast/tests/ConstructorsTest.java b/src/test/java/org/jastadd/relast/tests/ConstructorsTest.java new file mode 100644 index 0000000..689e991 --- /dev/null +++ b/src/test/java/org/jastadd/relast/tests/ConstructorsTest.java @@ -0,0 +1,58 @@ +package org.jastadd.relast.tests; + +import constructors.ast.*; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; + +/** + * Testing generated constructors. + * + * @author rschoene - Initial contribution + */ +@SuppressWarnings("unused") +public class ConstructorsTest { + + @Test + public void testX() { + X x = new X(); + Assertions.assertEquals(1, numberOfConstructors(X.class)); + } + + @Test + public void testY() { + Y y0 = new Y(); + Y y1 = new Y(new S()); + Assertions.assertEquals(2, numberOfConstructors(Y.class)); + } + + @Test + public void testA() { + A a0 = new A(); + A a1 = new A(new X()); + Assertions.assertEquals(2, numberOfConstructors(A.class)); + } + + @Test + public void testS() { + A a = new A(); + S s0 = new S(); + S s1 = new S(a, new List<>(), new Opt<>()); + S s2 = new S(a, new List<>(), new Opt<>(), new ArrayList<>()); + Assertions.assertEquals(3, numberOfConstructors(S.class)); + } + + @Test + public void testB() { + A a = new A(); + B b0 = new B(); + B b1 = new B(a, new List<>(), new Opt<>(), a, new List<>(), new Opt<>()); + B b2 = new B(a, new List<>(), new Opt<>(), new ArrayList<>(), a, new List<>(), new Opt<>(), null); + Assertions.assertEquals(3, numberOfConstructors(B.class)); + } + + private int numberOfConstructors(Class<?> clazz) { + return clazz.getConstructors().length; + } +} -- GitLab