package zk.support.test;
import org.junit.*;
import org.zkoss.bind.sys.BinderCtrl;
import org.zkoss.zats.junit.AutoClient;
import org.zkoss.zats.junit.AutoEnvironment;
import org.zkoss.zats.mimic.ComponentAgent;
import org.zkoss.zats.mimic.DesktopAgent;
import org.zkoss.zats.mimic.operation.AuAgent;
import org.zkoss.zats.mimic.operation.AuData;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import java.util.Map;
public class TestClearVmIdMap_zk4791 {
@ClassRule
public static AutoEnvironment env = new AutoEnvironment("./src/test/webapp");
@Rule
public AutoClient client = env.autoClient();
private DesktopAgent desktop;
@Before
public void init() {
this.desktop = client.getClient().connectWithContent("" +
" " +
"", "zul", null, null);
}
@After
public void cleanup() {
this.desktop.destroy();
this.desktop = null;
}
private ComponentAgent parent() {
return desktop.query("#parent");
}
private ComponentAgent vmComp() {
return desktop.query("#vmcomp");
}
@Test
public void testDetachViewModelComponent() {
Assert.assertTrue(vmIdMap().containsKey("vm"));
executeTestEvent(vmComp(), e -> { e.getTarget().detach(); });
Assert.assertNotNull("parent still in page", parent());
Assert.assertNull("vmcomp detached", vmComp());
Assert.assertTrue("vmId map empty", vmIdMap().isEmpty());
}
@Test
public void testDetachParentComponent() {
Assert.assertTrue(vmIdMap().containsKey("vm"));
executeTestEvent(parent(), e -> { e.getTarget().detach(); });
Assert.assertNull("parent detached", parent());
Assert.assertNull("vmcomp detached", vmComp());
Assert.assertTrue("vmId map empty", vmIdMap().isEmpty());
}
@Test
public void testDetachBothComponents() {
Assert.assertTrue(vmIdMap().containsKey("vm"));
executeTestEvent(parent(), e -> {
e.getTarget().getFirstChild().detach();
e.getTarget().detach();
});
Assert.assertNull("parent detached", parent());
Assert.assertNull("vmcomp detached", vmComp());
Assert.assertTrue("vmId map empty", vmIdMap().isEmpty());
}
@Test
public void testDetachBothComponentsReversed() {
Assert.assertTrue(vmIdMap().containsKey("vm"));
executeTestEvent(parent(), e -> {
Component firstChild = e.getTarget().getFirstChild();
e.getTarget().detach();
firstChild.detach();
});
Assert.assertNull("parent detached", parent());
Assert.assertNull("vmcomp detached", vmComp());
Assert.assertTrue("vmId map empty", vmIdMap().isEmpty());
}
private void executeTestEvent(ComponentAgent agent, EventListener eventListener) {
agent.as(Component.class).addEventListener("onTest", eventListener);
agent.as(AuAgent.class).post(new AuData("onTest"));
}
private Map vmIdMap() {
return (Map) desktop.getDesktop().getAttribute(BinderCtrl.VIEWMODELID_BINDER_MAP_KEY);
}
}