package trikita.anvil;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static trikita.anvil.BaseDSL.*;
public class IncrementalRenderTest extends Utils {
private String fooValue = "a";
private boolean showView = true;
@Test
public void testConstantsRenderedOnce() {
Anvil.mount(container, new Anvil.Renderable() {
public void view() {
o(v(MockLayout.class), attr("text", "bar"));
}
});
assertEquals(1, (int) createdViews.get(MockLayout.class));
assertEquals(1, (int) changedAttrs.get("text"));
Anvil.render();
assertEquals(1, (int) createdViews.get(MockLayout.class));
assertEquals(1, (int) changedAttrs.get("text"));
}
@Test
public void testDynamicAttributeRenderedLazily() {
Anvil.mount(container, new Anvil.Renderable() {
public void view() {
o(v(MockLayout.class), attr("text", fooValue));
}
});
assertEquals(1, (int) changedAttrs.get("text"));
Anvil.render();
assertEquals(1, (int) changedAttrs.get("text"));
fooValue = "b";
Anvil.render();
assertEquals(2, (int) changedAttrs.get("text"));
Anvil.render();
assertEquals(2, (int) changedAttrs.get("text"));
}
@Test
public void testDynamicViewRenderedLazily() {
Anvil.mount(container, new Anvil.Renderable() {
public void view() {
o(v(MockLayout.class),
o(v(MockLayout.class)),
showView ?
o(v(MockView.class)) :
null);
}
});
MockLayout layout = (MockLayout) container.getChildAt(0);
assertEquals(2, layout.getChildCount());
assertEquals(1, (int) createdViews.get(MockView.class));
Anvil.render();
assertEquals(1, (int) createdViews.get(MockView.class));
showView = false;
Anvil.render();
assertEquals(1, layout.getChildCount());
assertEquals(1, (int) createdViews.get(MockView.class));
Anvil.render();
assertEquals(1, (int) createdViews.get(MockView.class));
showView = true;
Anvil.render();
assertEquals(2, layout.getChildCount());
assertEquals(2, (int) createdViews.get(MockView.class));
Anvil.render();
assertEquals(2, (int) createdViews.get(MockView.class));
}
private String firstMountValue = "foo";
private String secondMountValue = "bar";
@Test
public void testRenderUpdatesAllMounts() {
MockLayout rootA = new MockLayout(getContext());
MockLayout rootB = new MockLayout(getContext());
Anvil.mount(rootA, new Anvil.Renderable() {
public void view() {
attr("text", firstMountValue);
}
});
Anvil.mount(rootB, new Anvil.Renderable() {
public void view() {
attr("tag", secondMountValue);
}
});
assertEquals("foo", rootA.getText());
assertEquals("bar", rootB.getTag());
firstMountValue = "baz";
secondMountValue = "qux";
Anvil.render();
assertEquals("baz", rootA.getText());
assertEquals("qux", rootB.getTag());
}
}