package trikita.anvil;
import org.junit.Test;
import static org.junit.Assert.*;
import static trikita.anvil.BaseDSL.*;
public class SyntaxTest extends Utils {
private boolean showNestedLayout = true;
private int numberOfChildViews = 5;
@Test
public void testSyntaxWithLambdas() {
// With Java 8 or Kotlin the code below looks much better.
// Here I use old "lambda"-like syntax to avoid dependency
// on RetroLambda or Kotlin in Anvil core
Anvil.mount(container, new Anvil.Renderable() {
public void view() {
v(MockLayout.class, new Anvil.Renderable() {
public void view() {
attr("tag", 1);
v(MockView.class, new Anvil.Renderable() {
public void view() {
attr("tag", 2);
}
});
if (showNestedLayout) {
v(MockLayout.class, new Anvil.Renderable() {
public void view() {
for (int i = 0; i < numberOfChildViews; i++) {
final int index = i;
v(MockView.class, new Anvil.Renderable() {
public void view() {
attr("tag", index);
}
});
}
}
});
}
}
});
}
});
MockLayout layout = (MockLayout) container.getChildAt(0);
assertEquals(1, layout.getTag());
MockView header = (MockView) layout.getChildAt(0);
assertEquals(2, header.getTag());
MockLayout content = (MockLayout) layout.getChildAt(1);
for (int i = 0; i < numberOfChildViews; i++) {
MockView v = (MockView) content.getChildAt(i);
assertEquals(i, v.getTag());
}
}
@Test
public void testSyntaxWithoutLambdas() {
Anvil.mount(container, new Anvil.Renderable() {
public void view() {
o (v(MockLayout.class),
attr("tag", 1),
o (v(MockView.class),
attr("tag", 2)),
o (v(MockLayout.class),
showNestedLayout ? childViews(numberOfChildViews) : null));
}
});
MockLayout layout = (MockLayout) container.getChildAt(0);
assertEquals(1, layout.getTag());
MockView header = (MockView) layout.getChildAt(0);
assertEquals(2, header.getTag());
MockLayout content = (MockLayout) layout.getChildAt(1);
for (int i = 0; i < numberOfChildViews; i++) {
MockView v = (MockView) content.getChildAt(i);
assertEquals(i, v.getTag());
}
}
private Void childViews(int count) {
for (int i = 0; i < numberOfChildViews; i++) {
o (v(MockView.class), attr("tag", i));
}
return null;
}
}