package org.richfaces.cdk.templatecompiler.statements; import static org.easymock.EasyMock.expect; import static org.junit.Assert.assertEquals; import java.util.Collections; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.richfaces.cdk.CdkTestRunner; import org.richfaces.cdk.Mock; import org.richfaces.cdk.MockController; import org.richfaces.cdk.Stub; import org.richfaces.cdk.generate.freemarker.FreeMarkerRenderer; import org.richfaces.cdk.templatecompiler.builder.model.JavaField; import org.richfaces.cdk.templatecompiler.builder.model.JavaImport; import org.richfaces.cdk.templatecompiler.builder.model.JavaImportImpl; import org.richfaces.cdk.templatecompiler.el.types.TypesFactory; import com.google.common.collect.Iterables; import com.google.inject.Inject; import com.google.inject.name.Named; @RunWith(CdkTestRunner.class) public class FreeMarkerTemplateStatementTest { private static final String FOO_CODE = "private static final String foo;"; @Mock private FreeMarkerRenderer renderer; @Stub private TemplateStatement statement; @Stub @Named("second") private TemplateStatement statement1; @Inject private MockController controller; private FreeMarkerTemplateStatementBase freeMarkerStatement; @Before public void setUp() { freeMarkerStatement = new FreeMarkerTemplateStatementBase(renderer, "foo"); } public void tearDown() { freeMarkerStatement = null; } @Test public void testGetCode() { expect(renderer.renderTemplate("foo.ftl", freeMarkerStatement)).andReturn(FOO_CODE); controller.replay(); String code = freeMarkerStatement.getCode(); controller.verify(); assertEquals(FOO_CODE, code); } @Test public void testGetRequiredImports() { freeMarkerStatement.addImport("foo.Bar"); expect(statement.getRequiredImports()).andStubReturn(Collections.<JavaImport>singleton(new JavaImportImpl("foo.baz"))); expect(renderer.renderTemplate("foo.ftl", freeMarkerStatement)).andReturn(FOO_CODE); controller.replay(); freeMarkerStatement.addStatement(statement); Iterable<JavaImport> requiredImports = freeMarkerStatement.getRequiredImports(); assertEquals(2, Iterables.size(requiredImports)); controller.verify(); } @Test public void testGetRequiredFields() { freeMarkerStatement.addConstant("boolean", "foo", FOO_CODE); expect(statement.getRequiredFields()).andStubReturn( Collections.<JavaField>singleton(new JavaField(TypesFactory.INT_TYPE, "bar"))); expect(renderer.renderTemplate("foo.ftl", freeMarkerStatement)).andReturn(FOO_CODE); controller.replay(); freeMarkerStatement.addStatement(statement); Iterable<JavaField> requiredFields = freeMarkerStatement.getRequiredFields(); assertEquals(2, Iterables.size(requiredFields)); controller.verify(); } @Test public void testGetRequiredMethods() { freeMarkerStatement.addRequiredMethod(HelperMethod.EMPTINESS_CHECK.toString()); expect(renderer.renderTemplate("foo.ftl", freeMarkerStatement)).andReturn(FOO_CODE); expect(statement.getRequiredMethods()).andStubReturn(Collections.<HelperMethod>singleton(HelperMethod.EQUALS_CHECK)); controller.replay(); freeMarkerStatement.addStatement(statement); Iterable<HelperMethod> requiredMethods = freeMarkerStatement.getRequiredMethods(); assertEquals(2, Iterables.size(requiredMethods)); controller.verify(); } @Test public void testAddConstant() { freeMarkerStatement.addConstant("java.util.List<java.lang.String>", "foo", FOO_CODE); JavaField javaField = Iterables.getOnlyElement(freeMarkerStatement.getRequiredFields()); assertEquals("foo", javaField.getName()); assertEquals("java.util.List<java.lang.String>", javaField.getType().getCode()); assertEquals(FOO_CODE, javaField.getValue().getCode()); } @Test public void testAddImport() { freeMarkerStatement.addImport("java.util.List"); JavaImport javaImport = Iterables.getOnlyElement(freeMarkerStatement.getRequiredImports()); assertEquals("java.util.List", javaImport.getName()); } @Test public void testAddRequiredMethod() { freeMarkerStatement.addRequiredMethod(HelperMethod.EMPTINESS_CHECK.toString()); HelperMethod helperMethod = Iterables.getOnlyElement(freeMarkerStatement.getRequiredMethods()); assertEquals(HelperMethod.EMPTINESS_CHECK, helperMethod); } }