aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/org')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/BackendTests.java14
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/python/PythonCompilerTests.java12
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java6
-rw-r--r--src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java11
4 files changed, 30 insertions, 13 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/BackendTests.java b/src/test/java/org/zwobble/couscous/tests/BackendTests.java
index ce3fc7d..7e7c3bd 100644
--- a/src/test/java/org/zwobble/couscous/tests/BackendTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/BackendTests.java
@@ -6,11 +6,15 @@ import org.zwobble.couscous.ast.MethodNode;
import org.zwobble.couscous.ast.ReturnNode;
import org.zwobble.couscous.values.PrimitiveValue;
import org.zwobble.couscous.values.PrimitiveValues;
+import org.zwobble.couscous.values.StringValue;
import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
+import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg;
import static org.zwobble.couscous.ast.LiteralNode.literal;
import static org.zwobble.couscous.ast.MethodNode.staticMethod;
+import static org.zwobble.couscous.ast.VariableDeclaration.var;
+import static org.zwobble.couscous.ast.VariableReferenceNode.reference;
import static org.zwobble.couscous.values.PrimitiveValues.value;
import lombok.val;
@@ -32,6 +36,16 @@ public abstract class BackendTests {
assertEquals(value("hello, world!"), result);
}
+ @Test
+ public void canPassValueToMethod() {
+ val arg = formalArg(var(42, "x", StringValue.REF));
+ val method = staticMethod("hello")
+ .argument(arg)
+ .statement(new ReturnNode(reference(arg)));
+ val result = runMethod(method, value("hello, world!"));
+
+ assertEquals(value("hello, world!"), result);
+ }
protected PrimitiveValue runMethod(MethodNode.MethodNodeBuilder methodBuilder, PrimitiveValue... arguments) {
val method = methodBuilder.build();
diff --git a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonCompilerTests.java b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonCompilerTests.java
index 6f171c3..2563ff8 100644
--- a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonCompilerTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonCompilerTests.java
@@ -7,13 +7,16 @@ import java.nio.file.Files;
import java.util.List;
import org.zwobble.couscous.ast.ClassNode;
+import org.zwobble.couscous.backends.python.PythonCodeGenerator;
import org.zwobble.couscous.backends.python.PythonCompiler;
+import org.zwobble.couscous.backends.python.PythonSerializer;
import org.zwobble.couscous.tests.BackendTests;
import org.zwobble.couscous.tests.MethodRunner;
import org.zwobble.couscous.values.PrimitiveValue;
import org.zwobble.couscous.values.PrimitiveValues;
import com.google.common.base.Charsets;
+import com.google.common.base.Joiner;
import com.google.common.io.CharStreams;
import static java.lang.Integer.parseInt;
@@ -38,9 +41,14 @@ public class PythonCompilerTests extends BackendTests {
val directoryPath = Files.createTempDirectory(null);
try {
compiler.compile(asList(classNode), directoryPath);
-
+
+ val argumentsString = Joiner.on(", ").join(arguments.stream()
+ .map(PythonCodeGenerator::generateCode)
+ .map(PythonSerializer::serialize)
+ .iterator());
+
val program = "from " + classNode.getName() + " import " + classNode.getLocalName() +
- ";print(repr(" + classNode.getLocalName() + "." + methodName + "()))";
+ ";print(repr(" + classNode.getLocalName() + "." + methodName + "(" + argumentsString + ")))";
val process = new ProcessBuilder("python3.4", "-c", program)
.directory(directoryPath.toFile())
diff --git a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java
index 65f9074..944c2af 100644
--- a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java
@@ -13,6 +13,7 @@ import static org.zwobble.couscous.backends.python.ast.PythonModuleNode.pythonMo
import static org.zwobble.couscous.backends.python.ast.PythonPassNode.PASS;
import static org.zwobble.couscous.backends.python.ast.PythonReturnNode.pythonReturn;
import static org.zwobble.couscous.backends.python.ast.PythonStringLiteralNode.pythonStringLiteral;
+import static org.zwobble.couscous.backends.python.ast.PythonVariableReferenceNode.pythonVariableReference;
import lombok.val;
@@ -37,6 +38,11 @@ public class PythonSerializerTests {
}
@Test
+ public void variableReferenceIsSerializedAsIdentifier() {
+ assertEquals("blah", serialize(pythonVariableReference("blah")));
+ }
+
+ @Test
public void returnKeywordIsUsedForReturns() {
val output = serialize(pythonReturn(pythonIntegerLiteral(42)));
assertEquals("return 42\n", output);
diff --git a/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java b/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java
index 09c3993..c6e6ce2 100644
--- a/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java
@@ -39,17 +39,6 @@ import lombok.val;
public class InterpreterTests extends BackendTests {
@Test
- public void canPassValueToMethod() {
- val arg = formalArg(var(42, "x", StringValue.REF));
- val method = staticMethod("hello")
- .argument(arg)
- .statement(new ReturnNode(reference(arg)));
- val result = runMethod(method, value("hello, world!"));
-
- assertEquals(value("hello, world!"), result);
- }
-
- @Test
public void errorIfWrongNumberOfArgumentsArePassed() {
val method = staticMethod("hello");