/** CompositionTest.java. Purpose: Description: History: 5:13:01 PM Nov 27, 2014, Created by jumperchen Copyright (C) 2014 Potix Corporation. All Rights Reserved. */ package org.zkoss.zktest.zats.zuti.mvvm._foreach; import static org.junit.Assert.assertEquals; import java.util.Iterator; import java.util.List; import org.junit.Test; import org.zkoss.zats.mimic.ComponentAgent; import org.zkoss.zats.mimic.DesktopAgent; import org.zkoss.zhtml.Text; import org.zkoss.zktest.zats.zuti.ZutiBasicTestCase; import org.zkoss.zktest.zats.zuti.verifier.HierarchyVerifier; import org.zkoss.zktest.zats.zuti.verifier.NullShadowRoot; import org.zkoss.zul.Label; /** * @author jumperchen */ public class CompositionTest extends ZutiBasicTestCase { @Test public void testNestedForEach() { DesktopAgent desktop = connect(getTestURL("nestedForEach.zul")); ComponentAgent hostAgent = desktop.query("#host"); List<ComponentAgent> xChildren = hostAgent.getChildren(); int x = 1; for (Iterator<ComponentAgent> xit = xChildren.iterator(); xit.hasNext();) { ComponentAgent xChild = xit.next(); if (xChild.getOwner() instanceof Text) continue; List<ComponentAgent> yChildren = xChild.getChildren(); int y = 1; for (Iterator<ComponentAgent> yit = yChildren.iterator(); yit .hasNext();) { ComponentAgent yChild = yit.next(); if (yChild.getOwner() instanceof Text) continue; assertEquals(x + " X " + y + " = " + (x * y), yChild .getFirstChild().as(Label.class).getValue()); y++; } checkVerifier(xChild.getOwner(), HierarchyVerifier.class); x++; } checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); } @Test public void testBasicWithApply() { DesktopAgent desktop = connect(getTestURL("basicWithApply.zul")); ComponentAgent hostAgent = desktop.query("#host"); List<ComponentAgent> xChildren = hostAgent.getChildren(); int x = 1; assertEquals(6, xChildren.size()); for (Iterator<ComponentAgent> xit = xChildren.iterator(); xit.hasNext();) { ComponentAgent xChild = xit.next(); String prefix = xChild.as(Label.class).getValue(); xChild = xit.next(); prefix += xChild.as(Label.class).getValue(); assertEquals("Test " + x, prefix.trim()); x++; } checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); } @Test public void testUpdateBasicWithApply() { DesktopAgent desktop = connect(getTestURL("basicWithApply.zul")); ComponentAgent hostAgent = desktop.query("#host"); ComponentAgent small = hostAgent.getNextSibling(); ComponentAgent large = small.getNextSibling(); large.click(); List<ComponentAgent> xChildren = hostAgent.getChildren(); int x = 0; assertEquals(30, xChildren.size()); for (Iterator<ComponentAgent> xit = xChildren.iterator(); xit.hasNext();) { ComponentAgent xChild = xit.next(); String prefix = xChild.as(Label.class).getValue(); xChild = xit.next(); prefix += xChild.as(Label.class).getValue(); assertEquals("Test "+ x +"@"+ x + "@zkoss.org", prefix.trim()); x++; } checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); small.click(); x = 0; xChildren = hostAgent.getChildren(); assertEquals(6, xChildren.size()); for (Iterator<ComponentAgent> xit = xChildren.iterator(); xit.hasNext();) { ComponentAgent xChild = xit.next(); String prefix = xChild.as(Label.class).getValue(); xChild = xit.next(); prefix += xChild.as(Label.class).getValue(); assertEquals("Test "+ x +"@"+ x + "@zkoss.org", prefix.trim()); x++; } checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); } @Test public void testNestedMerge() { DesktopAgent desktop = connect(getTestURL("nestedMerge.zul")); ComponentAgent hostAgent = desktop.query("#host"); List<ComponentAgent> xChildren = hostAgent.getChildren(); int x = 1; for (Iterator<ComponentAgent> xit = xChildren.iterator(); xit.hasNext();) { ComponentAgent xChild = xit.next(); if (xChild.getOwner() instanceof Text) continue; List<ComponentAgent> yChildren = xChild.getChildren(); int y = 1; for (Iterator<ComponentAgent> yit = yChildren.iterator(); yit .hasNext();) { ComponentAgent yChild = yit.next(); if (yChild.getOwner() instanceof Text) continue; assertEquals(x + " X " + y + " = " + (x * y), yChild .getFirstChild().as(Label.class).getValue()); y++; } checkVerifier(xChild.getOwner(), NullShadowRoot.class); x++; } checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); } @Test public void testUpdateNestedForEach() { DesktopAgent desktop = connect(getTestURL("nestedForEach.zul")); ComponentAgent hostAgent = desktop.query("#host"); ComponentAgent buttonAgent = hostAgent.getNextSibling(); for (int i = 0, begin = 1; i < 2; i++, begin += 4) { buttonAgent.click(); List<ComponentAgent> xChildren = hostAgent.getChildren(); int x = begin; for (Iterator<ComponentAgent> xit = xChildren.iterator(); xit.hasNext();) { ComponentAgent xChild = xit.next(); if (xChild.getOwner() instanceof Text) continue; List<ComponentAgent> yChildren = xChild.getChildren(); int y = begin; for (Iterator<ComponentAgent> yit = yChildren.iterator(); yit .hasNext();) { ComponentAgent yChild = yit.next(); if (yChild.getOwner() instanceof Text) continue; assertEquals(x + " X " + y + " = " + (x * y), yChild .getFirstChild().as(Label.class).getValue()); y++; } x++; } checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); buttonAgent = buttonAgent.getNextSibling(); } } @Test public void testBasic() { DesktopAgent desktop = connect(getTestURL("basic.zul")); ComponentAgent hostAgent = desktop.query("#host"); assertEquals(5, hostAgent.getChildren().size()); ComponentAgent next = hostAgent.getFirstChild(); for (int i = 1; i <= 9; i+=2) { assertEquals(String.valueOf(i), next.as(Label.class).getValue()); next = next.getNextSibling(); } checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); } @Test public void testBasicMerge() { DesktopAgent desktop = connect(getTestURL("basicMerge.zul")); ComponentAgent hostAgent = desktop.query("#host"); assertEquals(10, hostAgent.getChildren().size()); assertEquals(2, getShadowSize(hostAgent)); ComponentAgent next = hostAgent.getFirstChild(); for (int z = 1; z <= 3; z+=2) { for (int i = 1; i <= 9; i+=2) { assertEquals(String.valueOf(i), next.as(Label.class).getValue()); next = next.getNextSibling(); } } checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); } @Test public void testMultiRoot() { DesktopAgent desktop = connect(getTestURL("multiRoot.zul")); ComponentAgent hostAgent = desktop.query("#host"); assertEquals(10, hostAgent.getChildren().size()); assertEquals(2, getShadowSize(hostAgent)); updateMultiRoot(hostAgent.getFirstChild(), 1, 9, 2, false); checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); } @Test public void testMultiRootMerge() { DesktopAgent desktop = connect(getTestURL("multiRootMerge.zul")); ComponentAgent hostAgent = desktop.query("#host"); assertEquals(15, hostAgent.getChildren().size()); assertEquals(1, getShadowSize(hostAgent)); updateMultiRoot(hostAgent.getFirstChild(), 1, 9, 1, false); checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); } @Test public void testUpdateMultiRoot() { DesktopAgent desktop = connect(getTestURL("multiRoot.zul")); ComponentAgent hostAgent = desktop.query("#host"); assertEquals(10, hostAgent.getChildren().size()); assertEquals(2, getShadowSize(hostAgent)); ComponentAgent button = hostAgent.getParent().getLastChild(); button.click(); updateMultiRoot(hostAgent.getFirstChild(), 1, 9, 2); checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); button = button.getPreviousSibling(); button.click(); updateMultiRoot(hostAgent.getFirstChild(), 1, 9, 3); checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); button = button.getPreviousSibling(); button.click(); updateMultiRoot(hostAgent.getFirstChild(), 5, 9, 3); checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); button = button.getPreviousSibling(); button.click(); updateMultiRoot(hostAgent.getFirstChild(), 1, 5, 3); checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); } private void updateMultiRoot(ComponentAgent next, int begin, int end, int step) { updateMultiRoot(next, begin, end, step, true); } private void updateMultiRoot(ComponentAgent next, int begin, int end, int step, boolean before) { assertEquals("**Start**", next.as(Label.class).getValue().trim()); next = next.getNextSibling(); for (int i = begin; i <= end; i+=step) { assertEquals(String.valueOf(i), next.as(Label.class).getValue()); next = next.getNextSibling(); } assertEquals("**Middle**", next.as(Label.class).getValue().trim()); next = next.getNextSibling(); for (int i = begin; i <= end; i += step + 3) { if (before) { assertEquals(" + " + String.valueOf(i), next.as(Label.class).getValue()); } else { assertEquals(String.valueOf(i) + " + ", next.as(Label.class).getValue()); } next = next.getNextSibling(); } assertEquals("**End**", next.as(Label.class).getValue().trim()); } private void updateMultiNestedRoot(ComponentAgent next, int begin, int end, int step) { updateMultiNestedRoot(next, begin, end, step, true); } private void updateMultiNestedRoot(ComponentAgent next, int begin, int end, int step, boolean before) { assertEquals("**Start**", next.as(Label.class).getValue().trim()); next = next.getNextSibling(); for (int s = begin; s <= end; s+=step) { next = next.getFirstChild(); assertEquals("**Nested Start**", next.as(Label.class).getValue().trim()); next = next.getNextSibling(); for (int i = begin; i <= end; i+=step + 3) { if (!before) { assertEquals(String.valueOf(i), next.as(Label.class).getValue()); } else { assertEquals("", next.as(Label.class).getValue()); } next = next.getNextSibling(); } assertEquals("**Nested Middle**", next.as(Label.class).getValue().trim()); next = next.getNextSibling(); if (before) { for (int i = begin; i <= end; i += step + 3) { assertEquals(String.valueOf(i), next.as(Label.class).getValue()); next = next.getNextSibling(); } } assertEquals("**Nested End**", next.as(Label.class).getValue().trim()); next = next.getParent().getNextSibling(); } assertEquals("**Middle**", next.as(Label.class).getValue().trim()); next = next.getNextSibling(); for (int i = begin; i <= end; i += step + 3) { if (before) { assertEquals(" + " + String.valueOf(i), next.as(Label.class).getValue()); } else { assertEquals(String.valueOf(i) + " + ", next.as(Label.class).getValue()); } next = next.getNextSibling(); } assertEquals("**End**", next.as(Label.class).getValue().trim()); } @Test public void testMultiNestedRoot() { DesktopAgent desktop = connect(getTestURL("multiNestedRoot.zul")); ComponentAgent hostAgent = desktop.query("#host"); assertEquals(10, hostAgent.getChildren().size()); updateMultiNestedRoot(hostAgent.getFirstChild(), 1, 9, 2, false); checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); } @Test public void testMultiNestedRootMerge() { DesktopAgent desktop = connect(getTestURL("multiNestedRootMerge.zul")); ComponentAgent hostAgent = desktop.query("#host"); assertEquals(10, hostAgent.getChildren().size()); assertEquals(6, getAllShadowSize(hostAgent)); updateMultiNestedRoot(hostAgent.getFirstChild(), 1, 9, 2, false); checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); } @Test public void testUpdateMultiNestedRoot() { DesktopAgent desktop = connect(getTestURL("multiNestedRoot.zul")); ComponentAgent hostAgent = desktop.query("#host"); assertEquals(10, hostAgent.getChildren().size()); ComponentAgent button = hostAgent.getParent().getLastChild(); button.click(); updateMultiNestedRoot(hostAgent.getFirstChild(), 1, 9, 2); checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); button = button.getPreviousSibling(); button.click(); updateMultiNestedRoot(hostAgent.getFirstChild(), 1, 9, 3); checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); button = button.getPreviousSibling(); button.click(); updateMultiNestedRoot(hostAgent.getFirstChild(), 5, 9, 3); checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); button = button.getPreviousSibling(); button.click(); updateMultiNestedRoot(hostAgent.getFirstChild(), 1, 5, 3); checkVerifier(hostAgent.getOwner(), HierarchyVerifier.class); } }