aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-10 17:52:18 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-10 17:52:18 +0000
commit8711de89810f1cd6782d98e0e4745c30532a77ac (patch)
treefd99c496f52eeaaa2dee10cfb71ea2dc9580bae8 /src/test/java/org/zwobble
parent7dab9cb11a7181094144e4319716c4d91262a289 (diff)
Support type literals in the backends
Diffstat (limited to 'src/test/java/org/zwobble')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java1
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java40
2 files changed, 29 insertions, 12 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
index 814cfa6..bdd492d 100644
--- a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
@@ -34,6 +34,7 @@ public abstract class BackendEvalTests {
assertEquals(value(true), evalExpression(literal(true)));
assertEquals(value(false), evalExpression(literal(false)));
assertEquals(value(42), evalExpression(literal(42)));
+ assertEquals(value(StringValue.REF), evalExpression(literal(StringValue.REF)));
}
@Test
diff --git a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java
index 5818de0..421c1aa 100644
--- a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java
+++ b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java
@@ -1,23 +1,28 @@
package org.zwobble.couscous.tests.backends.python;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.List;
+import com.google.common.base.Charsets;
+import com.google.common.base.Joiner;
+import com.google.common.io.CharStreams;
import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.MethodSignature;
import org.zwobble.couscous.ast.TypeName;
-import org.zwobble.couscous.backends.python.PythonCodeGenerator;
import org.zwobble.couscous.backends.python.PythonBackend;
+import org.zwobble.couscous.backends.python.PythonCodeGenerator;
import org.zwobble.couscous.backends.python.PythonSerializer;
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 org.zwobble.couscous.values.StringValue;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
import static java.lang.Integer.parseInt;
import static org.zwobble.couscous.tests.util.ExtraFiles.deleteRecursively;
import static org.zwobble.couscous.util.ExtraLists.eagerMap;
@@ -63,9 +68,20 @@ public class PythonMethodRunner implements MethodRunner {
return readPrimitive(output);
}
}
-
+
+ private static final Pattern TYPE_REGEX = Pattern.compile("^<class '([^']+)'>$");
+ private static final String TYPE_NAME_PREFIX = "couscous.";
+
private static PrimitiveValue readPrimitive(String output) {
- if (output.equals("None")) {
+ Matcher matcher = TYPE_REGEX.matcher(output);
+ if (matcher.matches()) {
+ String name = matcher.group(1);
+ if (name.equals("couscous.java.lang.String.String")) {
+ return value(StringValue.REF);
+ } else {
+ throw new UnsupportedOperationException();
+ }
+ } else if (output.equals("None")) {
return PrimitiveValues.UNIT;
} else if (output.startsWith("\'")) {
return value(output.substring(1, output.length() - 1));