package org.richfaces.cdk.templatecompiler.statements; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.expectLastCall; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import java.util.Collections; import org.junit.Test; import org.junit.runner.RunWith; import org.richfaces.cdk.CdkTestBase; import org.richfaces.cdk.CdkTestRunner; import org.richfaces.cdk.Mock; import org.richfaces.cdk.MockController; import org.richfaces.cdk.templatecompiler.builder.model.JavaImport; import org.richfaces.cdk.templatecompiler.el.types.TypesFactory; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.inject.Inject; import com.google.inject.name.Named; @RunWith(CdkTestRunner.class) public class StatatementsContainerTest extends CdkTestBase { @Mock private TemplateStatement statement; @Mock @Named("second") private TemplateStatement statement1; @Mock private JavaImport import1; @Mock @Named("second") private JavaImport import2; @Mock @Named("third") private JavaImport import3; @Inject private MockController controller; @Inject private StatementsContainer container; @Test public void addStatement() throws Exception { statement.setParent(container); expectLastCall(); controller.replay(); container.addStatement(statement); controller.verify(); assertSame(statement, container.getStatements().get(0)); } @Test public void addStatement1() throws Exception { statement.setParent(container); expectLastCall(); controller.replay(); container.getStatements().add(statement); controller.verify(); assertSame(statement, container.getStatements().get(0)); } @Test public void addStatement2() throws Exception { statement.setParent(container); expectLastCall(); statement1.setParent(container); expectLastCall(); controller.replay(); container.addStatement(statement); container.addStatement(statement1); controller.verify(); assertEquals(2, container.getStatements().size()); assertSame(statement, container.getStatements().get(0)); } @Test public void getImports() throws Exception { statement.setParent(container); expectLastCall(); expect(statement.getRequiredImports()).andReturn(Collections.singleton(import1)); statement1.setParent(container); expectLastCall(); expect(statement1.getRequiredImports()).andReturn(ImmutableSet.of(import2, import3)); controller.replay(); container.addStatement(statement); container.addStatement(statement1); JavaImport[] javaImports = Iterables.toArray(container.getRequiredImports(), JavaImport.class); controller.verify(); assertEquals(3, javaImports.length); assertSame(import1, javaImports[0]); } @Test public void getCode() throws Exception { statement.setParent(container); expectLastCall(); expect(statement.getCode()).andReturn("first "); statement1.setParent(container); expectLastCall(); expect(statement1.getCode()).andReturn("second"); controller.replay(); container.addStatement(statement); container.addStatement(statement1); String code = container.getCode(); controller.verify(); assertTrue(code.contains("first")); assertTrue(code.contains("second")); } @Test public void testVariables() throws Exception { StatementsContainer parent = new StatementsContainer(); parent.addStatement(container); parent.setVariable("foo", TypesFactory.OBJECT_TYPE); assertTrue(container.isDefined("foo")); } @Test public void testVariables1() throws Exception { StatementsContainer parent = new StatementsContainer(); parent.addStatement(container); container.setVariable("foo", TypesFactory.OBJECT_TYPE); assertFalse(parent.isDefined("foo")); } @Test public void testVariables2() throws Exception { StatementsContainer parent = new StatementsContainer(); parent.addStatement(container); parent.setVariable("foo", TypesFactory.OBJECT_TYPE); container.setVariable("foo", TypesFactory.INTEGER_TYPE); assertTrue(container.isDefined("foo")); assertEquals(TypesFactory.INTEGER_TYPE, container.getVariable("foo")); } }