package com.google.sitebricks.rendering.control;
import com.google.sitebricks.Respond;
import com.google.sitebricks.compiler.ExpressionCompileException;
import com.google.sitebricks.compiler.MvelEvaluatorCompiler;
import static org.easymock.EasyMock.*;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
/**
* @author Dhanji R. Prasanna (dhanji@gmail.com)
*/
public class TextWidgetTest {
private static final String NAME_VALUES = "nameValues";
private static final String MVEL_NAMES = "mvelNames";
@DataProvider(name = NAME_VALUES)
Object[][] getNameValues() {
return new Object[][] {
{ "Dhanji" },
{ "Joe" },
{ "Josh" },
};
}
@DataProvider(name = MVEL_NAMES) //creates a path for expr: ${names.first}
Object[][] getMvelNames() {
return new Object[][] {
{ new TestBackingType(new ANestedType("Dhanji", "NotDhanji")), "Dhanji" },
{ new TestBackingType(new ANestedType("Joei", "NotDhanji")), "Joei" },
{ new TestBackingType(new ANestedType("Jill", "NotDhanji")), "Jill" },
};
}
public static class TestBackingType {
private ANestedType names;
public TestBackingType(ANestedType names) {
this.names = names;
}
public ANestedType getNames() {
return names;
}
}
public static class ANestedType {
private String first;
private String second;
public ANestedType(String first, String second) {
this.first = first;
this.second = second;
}
public String getFirst() {
return first;
}
public String getSecond() {
return second;
}
}
@Test(dataProvider = NAME_VALUES)
public final void renderATemplateWithObject(final String name) throws ExpressionCompileException {
final String[] out = new String[1];
Respond respond = createMock(Respond.class);
respond.write("Hello " + name);
replay(respond);
new TextWidget("Hello ${name}", new MvelEvaluatorCompiler(ATestType.class))
.render(new ATestType(name), respond);
// assert ("Hello " + name).equals(out[0]) : "template render failed: " + out[0];
verify(respond);
}
public static class ATestType {
private String name;
public ATestType(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
@Test(dataProvider = MVEL_NAMES)
public final void renderATemplateWithObjectGraph(final TestBackingType data, String name) throws ExpressionCompileException {
final String[] out = new String[1];
Respond respond = createMock(Respond.class);
respond.write("Hello " + name);
replay(respond);
new TextWidget("Hello ${names.first}", new MvelEvaluatorCompiler(TestBackingType.class))
.render(data, respond);
// assert ("Hello " + name).equals(out[0]) : "template render failed: " + out[0];
verify(respond);
}
}