public static VariableReferenceContextualStatementBuilder loadVariable(final String name, final Object... indexes) { return StatementBuilder.create().loadVariable(name, indexes); }
public static VariableReferenceContextualStatementBuilder loadVariable(final String name, final Object... indexes) { return StatementBuilder.create().loadVariable(name, indexes); }
@Test public void testLoadUndefinedVariable() { try { StatementBuilder.create().loadVariable("n").toJavaString(); fail("Expected OutOfScopeException"); } catch (OutOfScopeException e) { // expected } }
@Test public void testIfElseIfBlockUsingNoRhsAndElseifKeyword() { Context c = ContextBuilder.create().addVariable("s", String.class).addVariable("n", Integer.class).getContext(); String s = StatementBuilder.create(c) .loadVariable("s") .invoke("endsWith", "abc") .if_() .append(StatementBuilder.create(c).loadVariable("n").assignValue(0)) .finish() .elseif_(StatementBuilder.create(c).loadVariable("s").invoke("startsWith", "def")) .append(StatementBuilder.create(c).loadVariable("n").assignValue(1)) .finish().toJavaString(); assertEquals("Failed to generate if-elseif block using no rhs", IF_ELSEIF_BLOCK_NO_RHS, s); }
@Test public void testForeachLoopWithUndefinedCollection() { try { StatementBuilder.create() .loadVariable("list") .foreach("element", Integer.class) .finish().toJavaString(); fail("Expected OutOfScopeException"); } catch (OutOfScopeException e) { // expected } }
@Test public void testIfElseIfElseBlockUsingNoRhsAndElseifKeyword() { Context c = ContextBuilder.create().addVariable("s", String.class).addVariable("n", Integer.class).getContext(); String s = StatementBuilder.create(c) .loadVariable("s") .invoke("endsWith", "abc") .if_() .append(StatementBuilder.create(c).loadVariable("n").assignValue(0)) .finish() .elseif_(StatementBuilder.create(c).loadVariable("s").invoke("startsWith", "def")) .append(StatementBuilder.create(c).loadVariable("n").assignValue(1)) .finish() .else_() .append(StatementBuilder.create(c).loadVariable("n").assignValue(2)) .finish().toJavaString(); assertEquals("Failed to generate if - elseif - else block using no rhs", IF_ELSEIF_ELSE_BLOCK_NO_RHS, s); }
@Test public void testForLoopUnchainedWithInitializerAndCountingExpression() { String s = StatementBuilder.create() .declareVariable("i", Integer.class) .for_(StatementBuilder.create().loadVariable("i").assignValue(0), Bool.expr(Variable.get("i"), BooleanOperator.LessThan, 100), StatementBuilder.create().loadVariable("i").assignValue(AssignmentOperator.PreIncrementAssign, 1)) .finish().toJavaString(); assertEquals("Failed to generate for loop with initializer and counting expression", FOR_INITIALIZER_COUNTING_EXP_EMPTY, s); }
@Test public void testInvokeOnUndefinedVariable() { try { // injector undefined StatementBuilder.create() .loadVariable("injector") .invoke("provide", Refs.get("param"), Refs.get("param2")) .toJavaString(); fail("expected OutOfScopeException"); } catch (OutOfScopeException oose) { // expected assertTrue("Wrong exception thrown", oose.getMessage().contains("injector")); } }
@Test public void testForeachLoopWithLiterals() { String s = StatementBuilder.create() .loadLiteral(new String[] { "s1", "s2" }) .foreach("s") .append(StatementBuilder.create().loadVariable("s").invoke("getBytes")) .finish().toJavaString(); assertEquals("Failed to generate foreach loop using a literal String array", FOREACH_LITERAL_STRING_ARRAY, s); }
@Test public void testWhileLoopChainedWithEmptyExpressionWithBody() { String s = StatementBuilder.create() .declareVariable("b", Boolean.class) .loadVariable("b") .while_() .append(StatementBuilder.create().loadVariable("b").assignValue(false)) .finish().toJavaString(); assertEquals("Failed to generate while loop with chained lhs and body", WHILE_WITH_BODY, s); }
@Test public void testForLoopUnchainedWithInitializer() { String s = StatementBuilder.create() .declareVariable("i", Integer.class) .for_(StatementBuilder.create().loadVariable("i").assignValue(0), Bool.expr(Variable.get("i"), BooleanOperator.LessThan, 100)) .finish().toJavaString(); assertEquals("Failed to generate for loop with initializer", FOR_INITIALIZER_NO_COUNTING_EXP_EMPTY, s); }
@Test public void testForeachLoopWithStringInArray() { Statement createObject = StatementBuilder.create().newObject(String.class); String foreachWithStringArray = StatementBuilder.create(Context.create().addVariable("list", String[].class)) .loadVariable("list") .foreach("element") .append(createObject) .finish() .toJavaString(); assertEquals("Failed to generate foreach loop using a String[]", FOREACH_STRING_IN_ARRAY_ONE_STATEMENT, foreachWithStringArray); }
@Test public void testDoWhileLoopChainedWithRhs() { String s = StatementBuilder.create() .declareVariable("n", Integer.class) .loadVariable("n") .do_() .append(StatementBuilder.create().loadVariable("n").assignValue(1)) .finish() .while_(BooleanOperator.GreaterThanOrEqual, 1) .toJavaString(); assertEquals("Failed to generate for do while loop with simple expression (no operator and rhs) and chained lhs", DOWHILE_SIMPLE_EXPRESSION, s); }
@Test public void testDoWhileLoopChainedWithoutRhs() { String s = StatementBuilder.create() .declareVariable("b", Boolean.class) .loadVariable("b") .do_() .append(StatementBuilder.create().loadVariable("b").assignValue(false)) .finish() .while_() .toJavaString(); assertEquals("Failed to generate for do while loop with simple expression (no operator and rhs) and chained lhs", DOWHILE_SIMPLE_EXPRESSION_NO_OP, s); }
@Test public void testDoWhileLoopUnchainedWithoutRhs() { String s = StatementBuilder.create() .declareVariable("b", Boolean.class) .do_() .append(StatementBuilder.create().loadVariable("b").assignValue(false)) .finish() .while_(Bool.expr(Variable.get("b"))) .toJavaString(); assertEquals("Failed to generate do while loop with simple expression (no operator and rhs)", DOWHILE_SIMPLE_EXPRESSION_NO_OP, s); }
@Test public void testForLoopChainedWithCountingExpression() { String s = StatementBuilder.create() .declareVariable("i", Integer.class, 0) .loadVariable("i") .for_(Stmt.loadVariable("i").assignValue(0), Bool.expr(BooleanOperator.LessThan, 100), StatementBuilder.create().loadVariable("i").assignValue(AssignmentOperator.PreIncrementAssign, 1)) .finish().toJavaString(); assertEquals("Failed to generate for loop with initializer and counting expression and chained lhs", FOR_CHAINED_INITIALIZER_COUNTING_EXP_EMPTY, s); }
@Test public void testForeachLoopWithProvidedContext() { Context c = ContextBuilder.create().addVariable(Variable.create("s", String.class)).getContext(); String s = StatementBuilder.create(c) .loadLiteral(new String[] { "s1", "s2" }) .foreach("s") .append(StatementBuilder.create().loadVariable("s").invoke("getBytes")) .finish().toJavaString(); assertEquals("Failed to generate foreach loop using a literal String array", FOREACH_LITERAL_STRING_ARRAY, s); }
@Test public void testWhileLoopsNested() { Context c = Context.create().addVariable("str", String.class).addVariable("str2", String.class); String s = StatementBuilder.create(c) .loadVariable("str") .while_(BooleanOperator.NotEquals, null) .append( StatementBuilder.create(c) .while_(Bool.expr(Variable.get("str2"), BooleanOperator.NotEquals, null)) .finish()) .finish().toJavaString(); assertEquals("Failed to generate nested while loops", WHILE_NESTED_LOOPS, s); }
@Test public void testForLoopUnchainedWithDeclaringInitializerAndCountingExpression() { String s = StatementBuilder.create() .for_(Stmt.declareVariable(int.class).named("i").initializeWith(0), Bool.expr(Variable.get("i"), BooleanOperator.LessThan, 100), StatementBuilder.create().loadVariable("i").assignValue(AssignmentOperator.PreIncrementAssign, 1)) .append(StatementBuilder.create().loadStatic(System.class, "out").invoke("println", Variable.get("i"))) .finish().toJavaString(); assertEquals("Failed to generate for loop with declaring initializer and counting expression", FOR_DECLARE_INITIALIZER_COUNTING_EXP, s); }
@Test public void testForeachLoopsNested() { Statement createObject = StatementBuilder.create().newObject(String.class); Builder outerLoop = StatementBuilder.create() .declareVariable("list", new TypeLiteral<List<String>>() {}) .loadVariable("list") .foreach("element") .append(StatementBuilder.create( ContextBuilder.create().addVariable(Variable.create("anotherList", new TypeLiteral<List<String>>() {})).getContext()) .loadVariable("anotherList") .foreach("anotherElement") .append(createObject) .finish() ).finish(); assertEquals("Failed to generate nested foreach loops", FOREACH_NESTED_STRING_IN_LIST, outerLoop.toJavaString()); }