aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/zwobble/couscous/tests
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-01 15:33:57 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-01 15:33:57 +0000
commitfd0769bde1ffad49ca74a404f18aae5d7226c558 (patch)
tree64f055dd31d309dddfe4d7c11803d4c6dab1e161 /src/test/java/org/zwobble/couscous/tests
parent17384f8b7bb6151be3f033ba7e339d9edb59be55 (diff)
Get interpreter compiler tests working
Diffstat (limited to 'src/test/java/org/zwobble/couscous/tests')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/CompilerTests.java40
-rw-r--r--src/test/java/org/zwobble/couscous/tests/JavaToInterpreterTests.java2
-rw-r--r--src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java8
3 files changed, 34 insertions, 16 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/CompilerTests.java b/src/test/java/org/zwobble/couscous/tests/CompilerTests.java
index 6f64ed6..b5e0d82 100644
--- a/src/test/java/org/zwobble/couscous/tests/CompilerTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/CompilerTests.java
@@ -20,28 +20,28 @@ import static org.zwobble.couscous.values.PrimitiveValues.value;
public abstract class CompilerTests {
@Test
public void canEvaluateLiterals() {
- assertEquals(value("hello"), evalExpression("\"hello\""));
- assertEquals(value(42), evalExpression("42"));
+ assertEquals(value("hello"), evalObjectExpression("\"hello\""));
+ assertEquals(value(42), evalIntExpression("42"));
}
@Test
public void canUseOperatorsOnPrimitives() {
- assertEquals(value(3), evalExpression("1 + 2"));
- assertEquals(value(false), evalExpression("1 > 2"));
- assertEquals(value(true), evalExpression("1 == 1"));
- assertEquals(value(false), evalExpression("1 != 1"));
- assertEquals(value(true), evalExpression("!false"));
+ assertEquals(value(3), evalIntExpression("1 + 2"));
+ assertEquals(value(false), evalBooleanExpression("1 > 2"));
+ assertEquals(value(true), evalBooleanExpression("1 == 1"));
+ assertEquals(value(false), evalBooleanExpression("1 != 1"));
+ assertEquals(value(true), evalBooleanExpression("!false"));
}
@Test
public void equalityOnReferenceTypesChecksForIdentity() {
- assertEquals(value(false), evalExpression("new Object() == new Object()"));
- assertEquals(value(true), exec("Object x = new Object(); return x == x;"));
+ assertEquals(value(false), evalBooleanExpression("new Object() == new Object()"));
+ assertEquals(value(true), exec("boolean", "Object x = new Object(); return x == x;"));
}
@Test
public void integersCanBeAssignedToObjectVariable() {
- assertEquals(value(false), exec("Object x = 1; return x.equals(new Object());"));
+ assertEquals(value(false), exec("boolean", "Object x = 1; return x.equals(new Object());"));
}
@Test
@@ -150,12 +150,12 @@ public abstract class CompilerTests {
return path;
}
- private PrimitiveValue exec(String source) {
+ private PrimitiveValue exec(String returnType, String source) {
try {
String javaClass =
"package com.example;" +
"public class Example {" +
- " public static Object main() {" + source + "}" +
+ " public static " + returnType + " main() {" + source + "}" +
"}";
Path directoryPath = Files.createTempDirectory(null);
try {
@@ -174,8 +174,20 @@ public abstract class CompilerTests {
}
}
- private PrimitiveValue evalExpression(String expressionSource) {
- return exec("return " + expressionSource + ";");
+ private PrimitiveValue evalBooleanExpression(String expressionSource) {
+ return evalExpression("boolean", expressionSource);
+ }
+
+ private PrimitiveValue evalIntExpression(String expressionSource) {
+ return evalExpression("int", expressionSource);
+ }
+
+ private PrimitiveValue evalObjectExpression(String expressionSource) {
+ return evalExpression("Object", expressionSource);
+ }
+
+ private PrimitiveValue evalExpression(String type, String expressionSource) {
+ return exec(type, "return " + expressionSource + ";");
}
private static Path pathForResource(String name) {
diff --git a/src/test/java/org/zwobble/couscous/tests/JavaToInterpreterTests.java b/src/test/java/org/zwobble/couscous/tests/JavaToInterpreterTests.java
index 203a088..49b1fbf 100644
--- a/src/test/java/org/zwobble/couscous/tests/JavaToInterpreterTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/JavaToInterpreterTests.java
@@ -1,7 +1,6 @@
package org.zwobble.couscous.tests;
import com.google.common.collect.ImmutableList;
-import org.junit.Ignore;
import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.frontends.java.JavaFrontend;
@@ -18,7 +17,6 @@ import java.util.List;
import static com.google.common.collect.Iterables.transform;
-@Ignore
public class JavaToInterpreterTests extends CompilerTests {
@Override
protected PrimitiveValue execProgram(
diff --git a/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java b/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java
index 0768ee7..022e7ed 100644
--- a/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java
@@ -3,7 +3,9 @@ package org.zwobble.couscous.tests;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.util.Collections;
import java.util.List;
+import java.util.Set;
import java.util.function.Function;
import java.util.stream.IntStream;
import java.util.stream.Stream;
@@ -127,6 +129,8 @@ public class ValueObjectTests {
return true;
} else if (type.equals(List.class)) {
return asList("[list 1]");
+ } else if (type.equals(Set.class)) {
+ return Collections.singleton("[set 1]");
} else if (type.equals(PrimitiveValue.class)) {
return generateFirstInstance(StringValue.class);
} else if (type.equals(ExpressionNode.class)) {
@@ -145,6 +149,8 @@ public class ValueObjectTests {
return false;
} else if (type.equals(List.class)) {
return asList("[list 2]");
+ } else if (type.equals(Set.class)) {
+ return Collections.singleton("[set 2]");
} else if (type.equals(PrimitiveValue.class)) {
return generateSecondInstance(StringValue.class);
} else if (type.equals(ExpressionNode.class)) {
@@ -163,6 +169,8 @@ public class ValueObjectTests {
return true;
} else if (type.equals(List.class)) {
return asList("[list]");
+ } else if (type.equals(Set.class)) {
+ return Collections.singleton("[set]");
} else if (type.equals(PrimitiveValue.class)) {
return generateInstance(StringValue.class);
} else if (type.equals(ExpressionNode.class)) {