aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-11 20:52:41 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-11 20:52:41 +0000
commit7df6bc37bfac33770b9758647ab73822d807f0fe (patch)
tree21e3dc99f0c66863fc571f9304158a7638daba2b /src/test/java
parentd403acf6e1266e73a4ed43b63032be04da2c71d8 (diff)
Implement static fields and static constructors for C#
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java18
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java26
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/python/PythonCompilerEvalTests.java7
-rw-r--r--src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java6
4 files changed, 55 insertions, 2 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
index 41ce893..9914093 100644
--- a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
@@ -225,6 +225,24 @@ public abstract class BackendEvalTests {
assertEquals(value(42), result);
}
+
+ @Test
+ public void staticConstructorIsExecutedOnReference() {
+ TypeName type = TypeName.of("com.example.Example");
+ ClassNode classNode = ClassNode.builder(type)
+ .staticField("value", IntegerValue.REF)
+ .staticConstructor(list(
+ assignStatement(
+ fieldAccess(type, "value", IntegerValue.REF),
+ literal(42))))
+ .build();
+
+ PrimitiveValue result = evalExpression(
+ list(classNode),
+ fieldAccess(type, "value", IntegerValue.REF));
+
+ assertEquals(value(42), result);
+ }
private PrimitiveValue evalExpression(ExpressionNode expression) {
return evalExpression(list(), expression);
diff --git a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java
index 6bc191c..635afca 100644
--- a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java
@@ -149,6 +149,15 @@ public class CsharpSerializerTests {
}
@Test
+ public void staticFieldAccessSeparatesReceiverAndNameWithDot() {
+ String output = serialize(fieldAccess(
+ TypeName.of("X"),
+ "y",
+ TypeName.of("Y")));
+ assertEquals("X.y", output);
+ }
+
+ @Test
public void returnStatementUsesReturnStatement() {
String output = serialize(returns(literal(true)));
assertEquals("return true;\n", output);
@@ -254,6 +263,18 @@ public class CsharpSerializerTests {
}
@Test
+ public void staticConstructorHasSerializedBody() {
+ ClassNode classNode = ClassNode.builder("com.example.Example")
+ .staticConstructor(list(expressionStatement(literal(true))))
+ .build();
+
+ String output = serialize(classNode);
+
+ assertEquals(
+ "namespace com.example {\n internal class Example {\n static Example() {\n true;\n }\n }\n}\n", output);
+ }
+
+ @Test
public void constructorHasSerializedBody() {
ConstructorNode constructor = ConstructorNode.constructor(
list(formalArg(var(TestIds.ANY_ID, "x", TypeName.of("X")))),
@@ -271,12 +292,13 @@ public class CsharpSerializerTests {
@Test
public void classWithFields() {
ClassNode classNode = ClassNode.builder("com.example.Example")
- .field("x", TypeName.of("X"))
+ .staticField("x", TypeName.of("X"))
+ .field("y", TypeName.of("Y"))
.build();
String output = serialize(classNode);
- assertEquals("namespace com.example {\n internal class Example {\n internal X x;\n }\n}\n", output);
+ assertEquals("namespace com.example {\n internal class Example {\n internal static X x;\n internal Y y;\n }\n}\n", output);
}
private String serialize(Node node) {
diff --git a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonCompilerEvalTests.java b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonCompilerEvalTests.java
index e4ff1cb..6337bc7 100644
--- a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonCompilerEvalTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonCompilerEvalTests.java
@@ -1,5 +1,7 @@
package org.zwobble.couscous.tests.backends.python;
+import org.junit.Ignore;
+import org.junit.Test;
import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.ExpressionNode;
import org.zwobble.couscous.tests.BackendEvalTests;
@@ -8,6 +10,11 @@ import org.zwobble.couscous.values.PrimitiveValue;
import java.util.List;
public class PythonCompilerEvalTests extends BackendEvalTests {
+ @Ignore
+ @Test
+ public void staticConstructorIsExecutedOnReference() {
+ }
+
@Override
protected PrimitiveValue evalExpression(List<ClassNode> classes, ExpressionNode expression) {
return new PythonMethodRunner().evalExpression(classes, expression);
diff --git a/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java b/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
index afd0936..21bc88f 100644
--- a/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
@@ -1,6 +1,7 @@
package org.zwobble.couscous.tests.interpreter;
import com.google.common.collect.ImmutableMap;
+import org.junit.Ignore;
import org.junit.Test;
import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.ExpressionNode;
@@ -38,6 +39,11 @@ import static org.zwobble.couscous.tests.util.ExtraAsserts.assertThrows;
import static org.zwobble.couscous.util.ExtraLists.list;
public class EvaluatorTests extends BackendEvalTests {
+ @Ignore
+ @Test
+ public void staticConstructorIsExecutedOnReference() {
+ }
+
@Test
public void valueOfAssignmentExpressionIsNewValue() {
FormalArgumentNode arg = formalArg(var(ANY_ID, "x", StringValue.REF));