From fd0769bde1ffad49ca74a404f18aae5d7226c558 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 1 Jan 2016 15:33:57 +0000 Subject: Get interpreter compiler tests working --- .../org/zwobble/couscous/tests/CompilerTests.java | 40 ++++++++++++++-------- .../couscous/tests/JavaToInterpreterTests.java | 2 -- .../zwobble/couscous/tests/ValueObjectTests.java | 8 +++++ 3 files changed, 34 insertions(+), 16 deletions(-) (limited to 'src/test') 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)) { -- cgit v1.2.3