summaryrefslogtreecommitdiff
path: root/src/test/java/org/zwobble
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/org/zwobble')
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java90
1 files changed, 77 insertions, 13 deletions
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java
index e1e43ad..25b2c9f 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java
@@ -794,7 +794,7 @@ public class JavaWriterTests {
public void falseLiteral() throws IOException {
var java = new JavaBooleanLiteral(false);
- var string = write(writer -> writer.writeExpression(java));
+ var string = write(writer -> writer.writeTopLevelExpression(java));
assertThat(string, equalTo("false"));
}
@@ -803,7 +803,7 @@ public class JavaWriterTests {
public void trueLiteral() throws IOException {
var java = new JavaBooleanLiteral(true);
- var string = write(writer -> writer.writeExpression(java));
+ var string = write(writer -> writer.writeTopLevelExpression(java));
assertThat(string, equalTo("true"));
}
@@ -812,7 +812,7 @@ public class JavaWriterTests {
public void integerLiteral() throws IOException {
var java = new JavaIntegerLiteral(42);
- var string = write(writer -> writer.writeExpression(java));
+ var string = write(writer -> writer.writeTopLevelExpression(java));
assertThat(string, equalTo("42"));
}
@@ -821,7 +821,7 @@ public class JavaWriterTests {
public void nullLiteral() throws IOException {
var java = new JavaNullLiteral();
- var string = write(writer -> writer.writeExpression(java));
+ var string = write(writer -> writer.writeTopLevelExpression(java));
assertThat(string, equalTo("null"));
}
@@ -830,7 +830,7 @@ public class JavaWriterTests {
public void stringLiteral() throws IOException {
var java = new JavaStringLiteral("hello");
- var string = write(writer -> writer.writeExpression(java));
+ var string = write(writer -> writer.writeTopLevelExpression(java));
assertThat(string, equalTo("\"hello\""));
}
@@ -843,7 +843,7 @@ public class JavaWriterTests {
new JavaIntegerLiteral(42)
);
- var string = write(writer -> writer.writeExpression(java));
+ var string = write(writer -> writer.writeTopLevelExpression(java));
assertThat(string, equalTo("x = 42"));
}
@@ -856,7 +856,7 @@ public class JavaWriterTests {
.withRight(JavaRef.arbitrary().withName(JavaIdentifier.of("y")))
.build();
- var string = write(writer -> writer.writeExpression(java));
+ var string = write(writer -> writer.writeTopLevelExpression(java));
assertThat(string, equalTo("x >>> y"));
}
@@ -869,7 +869,7 @@ public class JavaWriterTests {
.withRight(JavaRef.arbitrary().withName(JavaIdentifier.of("y")))
.build();
- var string = write(writer -> writer.writeExpression(java));
+ var string = write(writer -> writer.writeTopLevelExpression(java));
assertThat(string, equalTo("x & y"));
}
@@ -881,7 +881,7 @@ public class JavaWriterTests {
JavaIdentifier.of("two")
);
- var string = write(writer -> writer.writeExpression(java));
+ var string = write(writer -> writer.writeTopLevelExpression(java));
assertThat(string, equalTo("one.two"));
}
@@ -893,7 +893,7 @@ public class JavaWriterTests {
JavaIdentifier.of("three")
);
- var string = write(writer -> writer.writeExpression(java));
+ var string = write(writer -> writer.writeTopLevelExpression(java));
assertThat(string, equalTo("one.Two.three"));
}
@@ -905,7 +905,7 @@ public class JavaWriterTests {
JavaIdentifier.of("three")
);
- var string = write(writer -> writer.writeExpression(java));
+ var string = write(writer -> writer.writeTopLevelExpression(java));
assertThat(string, equalTo("one.Two::three"));
}
@@ -917,7 +917,7 @@ public class JavaWriterTests {
List.of(new JavaIntegerLiteral(1), new JavaIntegerLiteral(2))
);
- var string = write(writer -> writer.writeExpression(java));
+ var string = write(writer -> writer.writeTopLevelExpression(java));
assertThat(string, equalTo("new one.Two(1, 2)"));
}
@@ -926,12 +926,76 @@ public class JavaWriterTests {
public void ref() throws IOException {
var java = new JavaRef(JavaIdentifier.of("x"));
- var string = write(writer -> writer.writeExpression(java));
+ var string = write(writer -> writer.writeTopLevelExpression(java));
assertThat(string, equalTo("x"));
}
@Test
+ public void whenSubExpressionHasLowerPrecedenceThenSubExpressionIsParenthesized() throws IOException {
+ var java = JavaBinaryOperation.arbitrary()
+ .withOperator(JavaBinaryOperator.BITWISE_AND)
+ .withLeft(
+ JavaBinaryOperation.arbitrary()
+ .withOperator(JavaBinaryOperator.ASSIGN)
+ .withLeft(JavaRef.arbitrary().withName(JavaIdentifier.of("x")))
+ .withRight(JavaRef.arbitrary().withName(JavaIdentifier.of("y")))
+ )
+ .withRight(JavaRef.arbitrary().withName(JavaIdentifier.of("z")))
+ .build();
+
+ var string = write(writer -> writer.writeTopLevelExpression(java));
+
+ assertThat(string, equalTo("(x = y) & z"));
+ }
+
+ @Test
+ public void whenSubExpressionsOfLeftAssociativeBinaryOperationHaveSamePrecedenceThenRightExpressionIsParenthesized() throws IOException {
+ var java = JavaBinaryOperation.arbitrary()
+ .withOperator(JavaBinaryOperator.BITWISE_AND)
+ .withLeft(
+ JavaBinaryOperation.arbitrary()
+ .withOperator(JavaBinaryOperator.BITWISE_AND)
+ .withLeft(JavaRef.arbitrary().withName(JavaIdentifier.of("a")))
+ .withRight(JavaRef.arbitrary().withName(JavaIdentifier.of("b")))
+ )
+ .withRight(
+ JavaBinaryOperation.arbitrary()
+ .withOperator(JavaBinaryOperator.BITWISE_AND)
+ .withLeft(JavaRef.arbitrary().withName(JavaIdentifier.of("c")))
+ .withRight(JavaRef.arbitrary().withName(JavaIdentifier.of("d")))
+ )
+ .build();
+
+ var string = write(writer -> writer.writeTopLevelExpression(java));
+
+ assertThat(string, equalTo("a & b & (c & d)"));
+ }
+
+ @Test
+ public void whenSubExpressionsOfRightAssociativeBinaryOperationHaveSamePrecedenceThenLeftExpressionIsParenthesized() throws IOException {
+ var java = JavaBinaryOperation.arbitrary()
+ .withOperator(JavaBinaryOperator.ASSIGN)
+ .withLeft(
+ JavaBinaryOperation.arbitrary()
+ .withOperator(JavaBinaryOperator.ASSIGN)
+ .withLeft(JavaRef.arbitrary().withName(JavaIdentifier.of("a")))
+ .withRight(JavaRef.arbitrary().withName(JavaIdentifier.of("b")))
+ )
+ .withRight(
+ JavaBinaryOperation.arbitrary()
+ .withOperator(JavaBinaryOperator.ASSIGN)
+ .withLeft(JavaRef.arbitrary().withName(JavaIdentifier.of("c")))
+ .withRight(JavaRef.arbitrary().withName(JavaIdentifier.of("d")))
+ )
+ .build();
+
+ var string = write(writer -> writer.writeTopLevelExpression(java));
+
+ assertThat(string, equalTo("(a = b) = c = d"));
+ }
+
+ @Test
public void typeRefWithoutArgsHasNoAngleBrackets() throws IOException {
var java = JavaTypeRef.topLevel(
JavaPackageName.of("abc", "def"),