Own-Programming-Language-Tu.../test/com/annimon/ownlang/parser/ast/ASTHelper.java

74 lines
2.3 KiB
Java
Raw Normal View History

package com.annimon.ownlang.parser.ast;
import com.annimon.ownlang.lib.NumberValue;
import com.annimon.ownlang.lib.StringValue;
import com.annimon.ownlang.lib.Types;
import com.annimon.ownlang.lib.Value;
import static org.junit.Assert.*;
/**
* Helper for build and test AST nodes.
* @author aNNiMON
*/
public final class ASTHelper {
public static void assertValue(NumberValue expected, Value actual) {
assertEquals(Types.NUMBER, actual.type());
if (expected.raw() instanceof Double) {
assertEquals(expected.asNumber(), actual.asNumber(), 0.001);
}
assertEquals(expected.asInt(), actual.asInt());
}
public static void assertValue(StringValue expected, Value actual) {
assertEquals(Types.STRING, actual.type());
assertEquals(expected.asString(), actual.asString());
}
public static BlockStatement block(Statement... statements) {
final BlockStatement result = new BlockStatement();
for (Statement statement : statements) {
result.add(statement);
}
return result;
}
public static AssignmentExpression assign(String variable, Expression expr) {
return assign(var(variable), expr);
}
public static AssignmentExpression assign(Accessible accessible, Expression expr) {
return assign(null, accessible, expr);
}
public static AssignmentExpression assign(BinaryExpression.Operator op, Accessible accessible, Expression expr) {
return new AssignmentExpression(op, accessible, expr);
}
public static BinaryExpression operator(BinaryExpression.Operator op, Expression left, Expression right) {
return new BinaryExpression(op, left, right);
}
public static ValueExpression value(Number value) {
return new ValueExpression(value);
}
public static ValueExpression value(String value) {
return new ValueExpression(value);
}
public static VariableExpression var(String value) {
return new VariableExpression(value);
}
public static NumberValue number(Number value) {
return new NumberValue(value);
}
public static StringValue string(String value) {
return new StringValue(value);
}
}