Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureTest.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureTest.java?rev=1090127&view=auto ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureTest.java (added) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureTest.java Fri Apr 8 06:08:05 2011 @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.markup.html.internal; + +import org.apache.wicket.Page; +import org.apache.wicket.WicketTestCase; +import org.apache.wicket.protocol.http.WebApplication; +import org.apache.wicket.util.tester.WicketTester; + + +/** + * Simple test using the WicketTester + * + * @author Joonas Hamalainen + */ +public class InlineEnclosureTest extends WicketTestCase +{ + /** + * @throws Exception + */ + public void testInlineEnclosurePage_1() throws Exception + { + executeTest(InlineEnclosurePage_1.class, "InlineEnclosurePageExpectedResult_1.html"); + } + + /** + * @throws Exception + */ + public void testInlineEnclosurePage_2() throws Exception + { + executeTest(InlineEnclosurePage_2.class, "InlineEnclosurePageExpectedResult_2.html"); + } + + /** + * @throws Exception + */ + public void testInlineEnclosurePanelPage() throws Exception + { + executeTest(InlineEnclosurePanelPage.class, "InlineEnclosurePanelPageExpectedResult.html"); + } + + @Override + protected void setUp() throws Exception + { + WebApplication app = new WebApplication() + { + @Override + public Class<? extends Page> getHomePage() + { + return InlineEnclosurePage_1.class; + } + + @Override + protected void init() + { + getMarkupSettings().setStripWicketTags(true); + } + }; + tester = new WicketTester(app); + } +} \ No newline at end of file
Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureWithAdditionalAjaxTargetPage.html URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureWithAdditionalAjaxTargetPage.html?rev=1090127&view=auto ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureWithAdditionalAjaxTargetPage.html (added) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureWithAdditionalAjaxTargetPage.html Fri Apr 8 06:08:05 2011 @@ -0,0 +1,15 @@ +<html xmlns:wicket> +<body> + +<a href="#" wicket:id="toggleLink">Toggle visibility</a> + +<div wicket:enclosure="label1"> + Container 1: + The visibility of this text is also toggled. + <div wicket:id="label1">Test</div> +</div> + + <div wicket:id="label2">Test2</div> + +</body> +</html> Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureWithAdditionalAjaxTargetPage.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureWithAdditionalAjaxTargetPage.java?rev=1090127&view=auto ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureWithAdditionalAjaxTargetPage.java (added) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureWithAdditionalAjaxTargetPage.java Fri Apr 8 06:08:05 2011 @@ -0,0 +1,89 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.markup.html.internal; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.AjaxLink; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; + + +/** + * Minimal page for testing. + * + * @author Joonas Hamalainen + * + */ +public class InlineEnclosureWithAdditionalAjaxTargetPage extends WebPage +{ + private final Label label1 = new Label("label1", "Test Label 1"); + private final Label label2 = new Label("label2", "Test Label 2"); + private final AjaxLink<Void> toggleLink; + + /** + * Construct. + */ + @SuppressWarnings("serial") + public InlineEnclosureWithAdditionalAjaxTargetPage() + { + + toggleLink = new AjaxLink<Void>("toggleLink") + { + @Override + public void onClick(AjaxRequestTarget target) + { + label1.setVisible(!label1.isVisible()); + target.addComponent(label1); + label2.setVisible(!label2.isVisible()); + target.addComponent(label2); + } + + }; + add(toggleLink); + label1.setOutputMarkupId(true); + label2.setOutputMarkupId(true); + label2.setOutputMarkupPlaceholderTag(true); + add(label1); + add(label2); + } + + /** + * @return label1 + */ + public Label getLabel1() + { + return label1; + } + + /** + * @return label2 + */ + public Label getLabel2() + { + return label2; + } + + /** + * @return toggle link + */ + public AjaxLink<Void> getLink() + { + return toggleLink; + } + + +} Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SimplePanel2.html URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SimplePanel2.html?rev=1090127&view=auto ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SimplePanel2.html (added) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SimplePanel2.html Fri Apr 8 06:08:05 2011 @@ -0,0 +1,10 @@ +<wicket:panel> + This is a simple test panel. This contains a label and an inline enclosure + with a label inside it. + <span wicket:id="label1">[some label]</span> + + <div wicket:enclosure="label2"> + <span wicket:id="label2">[another label]</span> + </div> + +</wicket:panel> \ No newline at end of file Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SimplePanel2.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SimplePanel2.java?rev=1090127&view=auto ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SimplePanel2.java (added) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SimplePanel2.java Fri Apr 8 06:08:05 2011 @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.markup.html.internal; + +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.Model; + +/** + * Just a simple panel for testing purposes. + * + * @author Joonas Hamalainen + */ +public class SimplePanel2 extends Panel +{ + + private static final long serialVersionUID = 1L; + + /** + * simple constructor. + * + * @param id + */ + public SimplePanel2(String id) + { + super(id); + add(new Label("label1", new Model<String>("Inside InlineEnclosure and Panel: hello world"))); + add(new Label("label2", new Model<String>( + "Inside InlineEnclosure, Panel and another InlineEnclosure: hello again."))); + } + +} Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TogglePageTests.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TogglePageTests.java?rev=1090127&view=auto ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TogglePageTests.java (added) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TogglePageTests.java Fri Apr 8 06:08:05 2011 @@ -0,0 +1,226 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.markup.html.internal; + +import java.util.regex.Pattern; + +import org.apache.wicket.Component; +import org.apache.wicket.WicketTestCase; +import org.apache.wicket.markup.html.basic.Label; + + +/** + * Simple test using the WicketTester + */ +public class TogglePageTests extends WicketTestCase +{ + + + /** + * + */ + public void testNoAjaxPage() + { + { + // On + FullReloadPage noAjaxPage = (FullReloadPage)tester.startPage(FullReloadPage.class); + assertVisible(noAjaxPage.getToggleable()); + tester.clickLink(noAjaxPage.getLink().getPageRelativePath()); + } + { + // Off + FullReloadPage noAjaxPage = (FullReloadPage)tester.getLastRenderedPage(); + assertInvisible(noAjaxPage.getToggleable()); + tester.clickLink(noAjaxPage.getLink().getPageRelativePath()); + } + { + // On + FullReloadPage noAjaxPage = (FullReloadPage)tester.getLastRenderedPage(); + assertVisible(noAjaxPage.getToggleable()); + tester.clickLink(noAjaxPage.getLink().getPageRelativePath()); + } + { + // Off + FullReloadPage noAjaxPage = (FullReloadPage)tester.getLastRenderedPage(); + assertInvisible(noAjaxPage.getToggleable()); + } + } + + /** + * + */ + public void testTraditionalAjaxEnclosurePage() + { + { + // On + TraditionalEnclosureAjaxPage ajaxPage = (TraditionalEnclosureAjaxPage)tester.startPage(TraditionalEnclosureAjaxPage.class); + assertVisible(ajaxPage.getToggleable()); + tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true); + } + { + // Off + TraditionalEnclosureAjaxPage ajaxPage = (TraditionalEnclosureAjaxPage)tester.getLastRenderedPage(); + tester.assertComponentOnAjaxResponse(ajaxPage.getTraditionalAjaxVisibilityToggleRequiresPlaceholder()); + assertInvisible(ajaxPage.getToggleable()); + tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true); + } + { + // On + TraditionalEnclosureAjaxPage ajaxPage = (TraditionalEnclosureAjaxPage)tester.getLastRenderedPage(); + tester.assertComponentOnAjaxResponse(ajaxPage.getTraditionalAjaxVisibilityToggleRequiresPlaceholder()); + assertVisible(ajaxPage.getToggleable()); + tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true); + } + { + // Off + TraditionalEnclosureAjaxPage ajaxPage = (TraditionalEnclosureAjaxPage)tester.getLastRenderedPage(); + tester.assertComponentOnAjaxResponse(ajaxPage.getTraditionalAjaxVisibilityToggleRequiresPlaceholder()); + assertInvisible(ajaxPage.getToggleable()); + } + } + + /** + * + */ + public void testInlineEnclosureWithAdditionalAjaxTarget() + { + { + // On + InlineEnclosureWithAdditionalAjaxTargetPage ajaxPage = (InlineEnclosureWithAdditionalAjaxTargetPage)tester.startPage(InlineEnclosureWithAdditionalAjaxTargetPage.class); + assertVisible(ajaxPage.getLabel1()); + assertVisible(ajaxPage.getLabel2()); + tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true); + } + { + // Off + InlineEnclosureWithAdditionalAjaxTargetPage ajaxPage = (InlineEnclosureWithAdditionalAjaxTargetPage)tester.getLastRenderedPage(); + tester.assertComponentOnAjaxResponse(ajaxPage.getLabel2()); + assertInVisible(ajaxPage.getLabel1()); + assertInVisible(ajaxPage.getLabel2()); + tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true); + } + { + // On + InlineEnclosureWithAdditionalAjaxTargetPage ajaxPage = (InlineEnclosureWithAdditionalAjaxTargetPage)tester.getLastRenderedPage(); + tester.assertComponentOnAjaxResponse(ajaxPage.getLabel1()); + tester.assertComponentOnAjaxResponse(ajaxPage.getLabel2()); + assertVisible(ajaxPage.getLabel1()); + assertVisible(ajaxPage.getLabel2()); + tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true); + } + { + // Off + InlineEnclosureWithAdditionalAjaxTargetPage ajaxPage = (InlineEnclosureWithAdditionalAjaxTargetPage)tester.getLastRenderedPage(); + tester.assertComponentOnAjaxResponse(ajaxPage.getLabel2()); + assertInVisible(ajaxPage.getLabel1()); + assertInVisible(ajaxPage.getLabel2()); + } + } + + /** + * + */ + public void testInlineEnclosureAjaxPage() + { + String inlineEnclosureIdPrefix = "InlineEnclosure-"; + + String inlineEnclosureHiddenPattern = "<tr id=\"" + inlineEnclosureIdPrefix + + "1\" style=\"display:none\"></tr>"; + + String inlineEnclosureVisiblePattern = "<tr bgcolor=\"red\" id=\"" + + inlineEnclosureIdPrefix + "1\">"; + + { + // On + InlineEnclosureAjaxPage ajaxPage = (InlineEnclosureAjaxPage)tester.startPage(InlineEnclosureAjaxPage.class); + assertVisible(ajaxPage.getToggleable()); + tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true); + } + { + // Off + InlineEnclosureAjaxPage ajaxPage = (InlineEnclosureAjaxPage)tester.getLastRenderedPage(); + tester.assertContains(inlineEnclosureHiddenPattern); + assertInvisible(ajaxPage.getToggleable()); + tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true); + } + { + // On + InlineEnclosureAjaxPage ajaxPage = (InlineEnclosureAjaxPage)tester.getLastRenderedPage(); + tester.assertContains(inlineEnclosureVisiblePattern); + assertVisible(ajaxPage.getToggleable()); + tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true); + } + { + // Off + InlineEnclosureAjaxPage ajaxPage = (InlineEnclosureAjaxPage)tester.getLastRenderedPage(); + tester.assertContains(inlineEnclosureHiddenPattern); + assertInvisible(ajaxPage.getToggleable()); + } + } + + private final String toggledText = "This button (and red border) should appear and disappear by pressing toggle"; + + + /** + * @param toggleable + */ + protected void assertInvisible(Component toggleable) + { + tester.assertInvisible(toggleable.getPageRelativePath()); + assertDoesNotContain(toggledText); + assertDoesNotContain("Also this"); + } + + /** + * @param toggleable + */ + protected void assertVisible(Component toggleable) + { + tester.assertVisible(toggleable.getPageRelativePath()); + tester.assertContains(Pattern.quote(toggledText)); + tester.assertContains(Pattern.quote("Also this")); + } + + + /** + * @param label + */ + protected void assertVisible(Label label) + { + tester.assertVisible(label.getPageRelativePath()); + tester.assertContains(Pattern.quote(label.getInnermostModel().getObject().toString())); + } + + /** + * @param label + */ + protected void assertInVisible(Label label) + { + tester.assertInvisible(label.getPageRelativePath()); + } + + /** + * @param string + */ + private void assertDoesNotContain(String string) + { + assertFalse("Should not contain: " + string, + tester.getLastResponseAsString().contains(string)); + } + + +} \ No newline at end of file Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TraditionalEnclosureAjaxPage.html URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TraditionalEnclosureAjaxPage.html?rev=1090127&view=auto ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TraditionalEnclosureAjaxPage.html (added) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TraditionalEnclosureAjaxPage.html Fri Apr 8 06:08:05 2011 @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<head> +</head> +<body> +<table border="1" cellpadding="1" cellspacing="1"> +<tr><th>Header row</th></tr> +<tr><td><a wicket:id="link">Toggle</a></td></tr> +<wicket:enclosure child="toggleable-placeholder:toggleable"> +<tr wicket:id="toggleable-placeholder" bgcolor="red"><td><input wicket:id="toggleable" type="button" + value="This button (and red border) should appear and disappear by pressing toggle" +style="border: 1px solid black; background: lightblue;"/> + (Also this)</td></tr> +</wicket:enclosure> +</table> +<br clear="all"/> +<br clear="all"/> +With ajax toggle is also possible, but it requires extra work: when component is invisible, we need to manually create a dummy placeholder. + +</body> +</html> \ No newline at end of file Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TraditionalEnclosureAjaxPage.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TraditionalEnclosureAjaxPage.java?rev=1090127&view=auto ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TraditionalEnclosureAjaxPage.java (added) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TraditionalEnclosureAjaxPage.java Fri Apr 8 06:08:05 2011 @@ -0,0 +1,102 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.markup.html.internal; + +import junit.framework.Assert; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.AjaxLink; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.WebPage; + + +/** + */ +public class TraditionalEnclosureAjaxPage extends WebPage +{ + /** */ + private static final long serialVersionUID = 1L; + private final WebMarkupContainer traditionalAjaxVisibilityToggleRequiresPlaceholder; + private final String toggleableChildId; + private final WebMarkupContainer toggleable; + private final AjaxLink<Void> link; + + /** + * + */ + @SuppressWarnings("serial") + public TraditionalEnclosureAjaxPage() + { + add((traditionalAjaxVisibilityToggleRequiresPlaceholder = new WebMarkupContainer( + "toggleable-placeholder") + { + @Override + public boolean isVisible() + { + return get(toggleableChildId).isVisible(); + } + }).setOutputMarkupPlaceholderTag(true)); + Assert.assertEquals("Ajax requires tag to remain in DOM even if not visible", true, + traditionalAjaxVisibilityToggleRequiresPlaceholder.getOutputMarkupPlaceholderTag()); + { + traditionalAjaxVisibilityToggleRequiresPlaceholder.add((toggleable = new WebMarkupContainer( + toggleableChildId = "toggleable")).setOutputMarkupPlaceholderTag(true)); + add(link = new AjaxLink<Void>("link") + { + @Override + public void onClick(AjaxRequestTarget target) + { + toggleable.setVisible(!toggleable.isVisible()); + ajaxRepaintOnlyToggleableComponentsContainer(target); + } + }); + } + } + + /** + * @param target + */ + private void ajaxRepaintOnlyToggleableComponentsContainer(AjaxRequestTarget target) + { + target.addComponent(traditionalAjaxVisibilityToggleRequiresPlaceholder); // This is what we +// repaint and toggleable is inside it + } + + /** + * @return toggleable webmarkupcontainer + */ + public WebMarkupContainer getToggleable() + { + return toggleable; + } + + /** + * @return toggle link + */ + public AjaxLink<Void> getLink() + { + return link; + } + + /** + * @return the traditional placeholder + */ + public WebMarkupContainer getTraditionalAjaxVisibilityToggleRequiresPlaceholder() + { + return traditionalAjaxVisibilityToggleRequiresPlaceholder; + } +} \ No newline at end of file