package trikita.anvil;
import android.view.View;
import org.junit.Test;
import static trikita.anvil.BaseDSL.*;
import org.mockito.Mockito;
import java.lang.ref.WeakReference;
import static junit.framework.Assert.*;
public class MountTest extends Utils {
Anvil.Renderable testLayout = new Anvil.Renderable() {
public void view() {
v(MockView.class, new Anvil.Renderable() {
public void view() {
attr("text", "bar");
}
});
}
};
@Test
public void testMountReturnsMountPoint() {
assertEquals(container, Anvil.mount(container, empty));
}
@Test
public void testMountRendersViews() {
Anvil.mount(container, testLayout);
assertEquals(1, container.getChildCount());
assertTrue(container.getChildAt(0) instanceof MockView);
MockView v = (MockView) container.getChildAt(0);
assertEquals("bar", v.getText());
}
@Test
public void testUnmountRemovesViews() {
Anvil.mount(container, testLayout);
assertEquals(1, container.getChildCount());
Anvil.unmount(container);
assertEquals(0, container.getChildCount());
}
@Test
public void testMountReplacesViews() {
Anvil.mount(container, testLayout);
assertEquals(1, container.getChildCount());
Anvil.mount(container, empty);
assertEquals(0, container.getChildCount());
Anvil.mount(container, testLayout);
assertEquals(1, container.getChildCount());
}
@Test
public void testMountInfoView() {
MockView v = Anvil.mount(new MockView(getContext()), new Anvil.Renderable() {
public void view() {
attr("id", 100);
attr("text", "bar");
attr("tag", "foo");
}
});
assertEquals(100, v.getId());
assertEquals("foo", v.getTag());
assertEquals("bar", v.getText());
}
@Test
public void testMountGC() {
Anvil.Renderable layout = Mockito.spy(testLayout);
Anvil.mount(container, layout);
Mockito.verify(layout, Mockito.times(1)).view();
assertEquals(1, container.getChildCount());
// Once the container is garbage collection all other views should be removed, too
WeakReference<View> ref = new WeakReference<>(container.getChildAt(0));
container = null;
System.gc();
assertEquals(null, ref.get());
// Ensure that the associated renderable is no longer called
Anvil.render();
Mockito.verify(layout, Mockito.times(1)).view();
}
}