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