aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/zwobble
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/org/zwobble')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java6
-rw-r--r--src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java33
-rw-r--r--src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java6
3 files changed, 37 insertions, 8 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java b/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java
index 44ad2a4..0fa4972 100644
--- a/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java
@@ -1,7 +1,6 @@
package org.zwobble.couscous.tests;
import org.junit.Test;
-import org.zwobble.couscous.ast.AssignmentNode;
import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.ExpressionStatementNode;
import org.zwobble.couscous.ast.LiteralNode;
@@ -13,6 +12,7 @@ import org.zwobble.couscous.values.StringValue;
import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
+import static org.zwobble.couscous.ast.AssignmentNode.assign;
import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg;
import static org.zwobble.couscous.ast.LiteralNode.literal;
import static org.zwobble.couscous.ast.LocalVariableDeclarationNode.localVariableDeclaration;
@@ -57,7 +57,7 @@ public abstract class BackendMethodTests {
val arg = formalArg(var(ANY_ID, "x", StringValue.REF));
val method = staticMethod("hello")
.argument(arg)
- .statement(new ExpressionStatementNode(new AssignmentNode(reference(arg), LiteralNode.literal("[updated value]"))))
+ .statement(new ExpressionStatementNode(assign(reference(arg), LiteralNode.literal("[updated value]"))))
.statement(new ReturnNode(reference(arg)));
val result = runMethod(method, value("[initial value]"));
@@ -82,7 +82,7 @@ public abstract class BackendMethodTests {
ANY_ID, "x", StringValue.REF, LiteralNode.literal("[initial value]"));
val method = staticMethod("hello")
.statement(localVariableDeclaration)
- .statement(new ExpressionStatementNode(new AssignmentNode(reference(localVariableDeclaration), LiteralNode.literal("[updated value]"))))
+ .statement(new ExpressionStatementNode(assign(reference(localVariableDeclaration), LiteralNode.literal("[updated value]"))))
.statement(new ReturnNode(reference(localVariableDeclaration)));
val result = runMethod(method);
diff --git a/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java b/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java
index 287d6a8..c7276b1 100644
--- a/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java
@@ -2,6 +2,7 @@ package org.zwobble.couscous.tests;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.util.function.Function;
import java.util.stream.IntStream;
import java.util.stream.Stream;
@@ -11,8 +12,15 @@ import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.zwobble.couscous.ast.AnnotationNode;
+import org.zwobble.couscous.ast.AssignableExpressionNode;
+import org.zwobble.couscous.ast.AssignmentNode;
+import org.zwobble.couscous.ast.ExpressionNode;
+import org.zwobble.couscous.ast.LiteralNode;
import org.zwobble.couscous.ast.VariableDeclaration;
+import org.zwobble.couscous.ast.VariableReferenceNode;
import org.zwobble.couscous.util.ExtraArrays;
+import org.zwobble.couscous.values.PrimitiveValue;
+import org.zwobble.couscous.values.StringValue;
import com.google.common.base.Joiner;
@@ -33,6 +41,7 @@ public class ValueObjectTests {
public static Iterable<Object[]> valueObjectTypes() {
return asList(new Object[][] {
{AnnotationNode.class},
+ {AssignmentNode.class},
{VariableDeclaration.class}
});
}
@@ -99,6 +108,12 @@ public class ValueObjectTests {
private static Object generateFirstInstance(Class<?> type) {
if (type.equals(String.class)) {
return "[string 1]";
+ } else if (type.equals(PrimitiveValue.class)) {
+ return generateFirstInstance(StringValue.class);
+ } else if (type.equals(ExpressionNode.class)) {
+ return generateFirstInstance(LiteralNode.class);
+ } else if (type.equals(AssignableExpressionNode.class)) {
+ return generateFirstInstance(VariableReferenceNode.class);
} else {
return generateValue(type, ValueObjectTests::generateFirstInstance).instance;
}
@@ -107,6 +122,12 @@ public class ValueObjectTests {
private static Object generateSecondInstance(Class<?> type) {
if (type.equals(String.class)) {
return "[string 2]";
+ } else if (type.equals(PrimitiveValue.class)) {
+ return generateSecondInstance(StringValue.class);
+ } else if (type.equals(ExpressionNode.class)) {
+ return generateSecondInstance(LiteralNode.class);
+ } else if (type.equals(AssignableExpressionNode.class)) {
+ return generateSecondInstance(VariableReferenceNode.class);
} else {
return generateValue(type, ValueObjectTests::generateSecondInstance).instance;
}
@@ -115,6 +136,12 @@ public class ValueObjectTests {
private static Object generateInstance(Class<?> type) {
if (type.equals(String.class)) {
return "[string]";
+ } else if (type.equals(PrimitiveValue.class)) {
+ return generateInstance(StringValue.class);
+ } else if (type.equals(ExpressionNode.class)) {
+ return generateInstance(LiteralNode.class);
+ } else if (type.equals(AssignableExpressionNode.class)) {
+ return generateInstance(VariableReferenceNode.class);
} else {
return generateValue(type, ValueObjectTests::generateInstance).instance;
}
@@ -134,8 +161,10 @@ public class ValueObjectTests {
}
private static Class<?>[] fieldTypes(Class<?> type) {
- Field[] fields = type.getDeclaredFields();
- return ExtraArrays.map(fields, field -> field.getType())
+ return asList(type.getDeclaredFields())
+ .stream()
+ .filter(field -> !Modifier.isStatic(field.getModifiers()))
+ .map(field -> field.getType())
.toArray(Class<?>[]::new);
}
diff --git a/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java b/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java
index 9d23a45..9ef64d2 100644
--- a/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java
@@ -4,7 +4,6 @@ import java.util.List;
import java.util.stream.Collectors;
import org.junit.Test;
-import org.zwobble.couscous.ast.AssignmentNode;
import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.ExpressionStatementNode;
import org.zwobble.couscous.ast.LiteralNode;
@@ -24,6 +23,7 @@ import org.zwobble.couscous.values.PrimitiveValue;
import org.zwobble.couscous.values.StringValue;
import static org.junit.Assert.assertEquals;
+import static org.zwobble.couscous.ast.AssignmentNode.assign;
import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg;
import static org.zwobble.couscous.ast.LiteralNode.literal;
import static org.zwobble.couscous.ast.LocalVariableDeclarationNode.localVariableDeclaration;
@@ -52,7 +52,7 @@ public class InterpreterMethodTests extends BackendMethodTests {
val arg = formalArg(var(ANY_ID, "x", StringValue.REF));
val method = staticMethod("hello")
.argument(arg)
- .statement(new ExpressionStatementNode(new AssignmentNode(reference(arg), literal(0))));
+ .statement(new ExpressionStatementNode(assign(reference(arg), literal(0))));
val exception = assertThrows(UnexpectedValueType.class,
() -> runMethod(method, value("")));
@@ -65,7 +65,7 @@ public class InterpreterMethodTests extends BackendMethodTests {
val localVariableDeclaration = localVariableDeclaration(
ANY_ID, "x", StringValue.REF, literal(""));
val method = staticMethod("hello")
- .statement(new ExpressionStatementNode(new AssignmentNode(reference(localVariableDeclaration), LiteralNode.literal("[updated value]"))));
+ .statement(new ExpressionStatementNode(assign(reference(localVariableDeclaration), LiteralNode.literal("[updated value]"))));
val exception = assertThrows(VariableNotInScope.class,
() -> runMethod(method));