/* * 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.io.IOException; import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; import org.apache.wicket.Page; import org.apache.wicket.authorization.Action; import org.apache.wicket.authorization.IAuthorizationStrategy; import org.apache.wicket.markup.IMarkupResourceStreamProvider; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.mock.MockApplication; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.util.resource.IResourceStream; import org.apache.wicket.util.resource.StringResourceStream; import org.apache.wicket.util.tester.DiffUtil; import org.apache.wicket.util.tester.FormTester; import org.apache.wicket.util.tester.WicketTestCase; import org.apache.wicket.util.tester.WicketTester; import org.junit.Test; /** * * @author Juergen Donnerstag */ public class EnclosureTest extends WicketTestCase { /** * @throws Exception */ @Test public void testRenderHomePage() throws Exception { executeTest(EnclosurePage_1.class, "EnclosurePageExpectedResult_1.html"); } /** * @throws Exception */ @Test public void testRenderHomePage2() throws Exception { executeTest(EnclosurePage_2.class, "EnclosurePageExpectedResult_2.html"); } /** * @throws Exception */ @Test public void testRenderHomePage3() throws Exception { executeTest(EnclosurePage_3.class, "EnclosurePageExpectedResult_3.html"); } /** * @throws Exception */ @Test public void testRenderHomePage4() throws Exception { executeTest(EnclosurePage_4.class, new PageParameters().set("visible", false), "EnclosurePageExpectedResult_4.html"); } /** * @throws Exception */ @Test public void testRenderHomePage4_1() throws Exception { executeTest(EnclosurePage_4.class, new PageParameters().set("visible", true), "EnclosurePageExpectedResult_4-1.html"); } /** * @throws Exception */ @Test public void testRenderHomePage5() throws Exception { executeTest(EnclosurePage_5.class, new PageParameters().set("visible", false), "EnclosurePageExpectedResult_5.html"); } /** * @throws Exception */ @Test public void testRenderHomePage5_1() throws Exception { executeTest(EnclosurePage_5.class, new PageParameters().set("visible", true), "EnclosurePageExpectedResult_5-1.html"); } /** * Tests visibility of children after enclosure has been made hidden and visible again * * @throws Exception */ @Test public void testVisibilityOfChildren() throws Exception { // render with enclosure initially visible tester.startPage(EnclosurePage_6.class); String doc = tester.getLastResponse().getDocument(); assertTrue(doc.contains("content1")); assertTrue(doc.contains("content2")); // render with enclosure hidden tester.clickLink("link"); doc = tester.getLastResponse().getDocument(); assertFalse(doc.contains("content1")); assertFalse(doc.contains("content2")); // render with enclosure visible again tester.clickLink("link"); doc = tester.getLastResponse().getDocument(); assertTrue(doc.contains("content1")); assertTrue(doc.contains("content2")); } /** * */ @Test public void testRender() { tester.startPage(EnclosurePage_7.class); } /** * @throws Exception * */ @Test public void testRender8() throws Exception { executeTest(EnclosurePage_8.class, "EnclosurePageExpectedResult_8.html"); } /** * * @param page * @param file * @throws Exception */ private void executePage(final EnclosurePage_9 page, final String file) throws Exception { page.reset(); tester.startPage(page); tester.assertRenderedPage(page.getClass()); assertResultPage(file); } private void assertResultPage(final String file) throws IOException { String document = tester.getLastResponse().getDocument(); DiffUtil.validatePage(document, getClass(), file, true); } /** * @throws Exception */ @Test public void testRender9() throws Exception { executePage(new EnclosurePage_9(), "EnclosurePageExpectedResult_9.html"); EnclosurePage_9 page = (EnclosurePage_9)tester.getLastRenderedPage(); assertTrue(page.inputOnBeforeRender); assertFalse(page.inputValidate); assertTrue(page.labelOnBeforeRender); page.reset(); page.get("form:label").setVisible(false); executePage(page, "EnclosurePageExpectedResult_9-1.html"); // It should be FALSE, but because of auto-component etc. it doesn't // assertFalse(page.inputOnBeforeRender); assertTrue(page.inputOnBeforeRender); assertFalse(page.inputValidate); assertFalse(page.labelOnBeforeRender); page.reset(); page.get("form:label").setVisible(true); executePage(page, "EnclosurePageExpectedResult_9-1-1.html"); assertTrue(page.inputOnBeforeRender); assertFalse(page.inputValidate); assertTrue(page.labelOnBeforeRender); page.reset(); page.get("form:input").setVisible(false); executePage(page, "EnclosurePageExpectedResult_9-3.html"); assertFalse(page.inputOnBeforeRender); assertFalse(page.inputValidate); assertTrue(page.labelOnBeforeRender); page.reset(); page.get("form:label").setVisible(false); executePage(page, "EnclosurePageExpectedResult_9-2.html"); assertFalse(page.inputOnBeforeRender); assertFalse(page.inputValidate); assertFalse(page.labelOnBeforeRender); page.reset(); page.get("form:label").setVisible(true); executePage(page, "EnclosurePageExpectedResult_9-3-1.html"); assertFalse(page.inputOnBeforeRender); assertFalse(page.inputValidate); assertTrue(page.labelOnBeforeRender); page.reset(); page.get("form:input").setVisible(true); executePage(page, "EnclosurePageExpectedResult_9-3-2.html"); assertTrue(page.inputOnBeforeRender); assertFalse(page.inputValidate); assertTrue(page.labelOnBeforeRender); } /** * @throws Exception */ @Test public void testRender9a() throws Exception { Class<? extends Page> clazz = EnclosurePage_9.class; executePage(new EnclosurePage_9(), "EnclosurePageExpectedResult_9.html"); EnclosurePage_9 page = (EnclosurePage_9)tester.getLastRenderedPage(); page.reset(); FormTester formTester = tester.newFormTester("form"); tester.getRequest() .getPostParameters() .setParameterValue(((CheckBox)page.get("form:input")).getInputName(), "true"); page.get("form:label").setVisible(true); formTester.submit(); tester.assertRenderedPage(clazz); assertResultPage("EnclosurePageExpectedResult_9-4.html"); assertTrue(page.inputOnBeforeRender); assertTrue(page.inputValidate); assertTrue(page.labelOnBeforeRender); page.reset(); tester.getRequest() .getPostParameters() .setParameterValue(((CheckBox)page.get("form:input")).getInputName(), "true"); page.get("form:label").setVisible(false); tester.submitForm("form"); tester.assertRenderedPage(clazz); assertResultPage("EnclosurePageExpectedResult_9-2-1.html"); // It should be FALSE, but because of auto-component etc. it doesn't // assertFalse(page.inputOnBeforeRender); assertTrue(page.inputOnBeforeRender); // It should be FALSE, but because of auto-component etc. it doesn't // assertFalse(page.inputValidate); assertTrue(page.inputValidate); assertFalse(page.labelOnBeforeRender); } /** * It must not be a difference if the enclosure controller child is a FormComponent. * * @throws Exception */ @Test public void testRender10() throws Exception { Class<? extends Page> clazz = EnclosurePage_10.class; executeTest(clazz, "EnclosurePageExpectedResult_10.html"); Page page = tester.getLastRenderedPage(); page.get("input").setVisible(false); tester.startPage(page); tester.assertRenderedPage(clazz); tester.assertResultPage(getClass(), "EnclosurePageExpectedResult_10-2.html"); page.get("input").setVisible(true); tester.startPage(page); tester.assertRenderedPage(clazz); tester.assertResultPage(getClass(), "EnclosurePageExpectedResult_10.html"); page.get("label").setVisible(false); tester.startPage(page); tester.assertRenderedPage(clazz); tester.assertResultPage(getClass(), "EnclosurePageExpectedResult_10-3.html"); page.get("input").setVisible(false); tester.startPage(page); tester.assertRenderedPage(clazz); tester.assertResultPage(getClass(), "EnclosurePageExpectedResult_10-2.html"); page.get("input").setVisible(true); tester.startPage(page); tester.assertRenderedPage(clazz); tester.assertResultPage(getClass(), "EnclosurePageExpectedResult_10-3.html"); page.get("label").setVisible(true); tester.startPage(page); tester.assertRenderedPage(clazz); tester.assertResultPage(getClass(), "EnclosurePageExpectedResult_10.html"); } /** * @throws Exception */ @Test public void testRenderPage11() throws Exception { executeTest(EnclosurePage_11.class, "EnclosurePageExpectedResult_11.html"); } /** * @throws Exception */ @Test public void testRenderPage12() throws Exception { executeTest(EnclosurePage_12.class, "EnclosurePageExpectedResult_12.html"); } /** * @throws Exception */ @Test public void testRenderPage13() throws Exception { tester = new WicketTester(new MockApplication() { @Override protected void init() { super.init(); // This should cause all SecuredContainer components to be hidden getSecuritySettings().setAuthorizationStrategy(new IAuthorizationStrategy.AllowAllAuthorizationStrategy() { @Override public boolean isActionAuthorized(Component component, Action action) { return !(component instanceof SecuredContainer_13); } }); } }); executeTest(EnclosurePage_13.class, "EnclosurePageExpectedResult_13.html"); } /** * https://issues.apache.org/jira/browse/WICKET-3842 */ @Test public void testAtrribute() { /** * Page for the test */ class TestPage extends WebPage implements IMarkupResourceStreamProvider { private static final long serialVersionUID = 1L; public TestPage() { final Label l = new Label("msg", "$label$"); add(l); add(new Link<Void>("b") { private static final long serialVersionUID = 1L; @Override public void onClick() { l.setVisible(!l.isVisible()); } }); } @Override public IResourceStream getMarkupResourceStream(MarkupContainer container, Class<?> containerClass) { return new StringResourceStream( "<html><body><div wicket:enclosure='msg'><span wicket:id='msg'></span></div><input type='button' value='Toggle' wicket:id='b'/></body></html>"); } } tester.startPage(new TestPage()); assertTrue(tester.getLastResponseAsString().contains("$label$")); // toggle visibility of enclosure to false tester.clickLink("b"); assertFalse(tester.getLastResponseAsString().contains("$label$")); // toggle visibility of enclosure to back to true tester.clickLink("b"); assertTrue(tester.getLastResponseAsString().contains("$label$")); } /** * Test case for https://issues.apache.org/jira/browse/WICKET-4172 */ @Test public void childWithDeeperPathInTransparentContainer() { boolean enclosureChildVisible = true; tester.startPage(new ChildWithDeeperPathInTransparentContainerPage(enclosureChildVisible)); tester.assertContains(ChildWithDeeperPathInTransparentContainerPage.LABEL_TEXT); enclosureChildVisible = false; tester.startPage(new ChildWithDeeperPathInTransparentContainerPage(enclosureChildVisible)); tester.assertContainsNot(ChildWithDeeperPathInTransparentContainerPage.LABEL_TEXT); } @Test public void nestedEnclousers() { TestPageMarkup p = new TestPageMarkup(); p.setPageMarkup("<wicket:enclosure child='labelOuter'>tOuter Enclosure <span wicket:id='labelOuter'/>" + "<wicket:enclosure>Inner Enclosure <span wicket:id='labelInner' /></wicket:enclosure>" + "</wicket:enclosure>"); p.add(new Label("labelOuter"), new Label("labelInner")); tester.startPage(p); } /** * Test case for https://issues.apache.org/jira/browse/WICKET-6043 */ @Test public void enclosureInsideContainererAndInheritance() throws Exception { tester.startPage(ListViewInContainerPage.class); tester.assertRenderedPage(ListViewInContainerPage.class); } private static class TestPageMarkup extends WebPage implements IMarkupResourceStreamProvider { private String markup; public TestPageMarkup() { } public TestPageMarkup(String markup) { this.markup = markup; } protected String getPageMarkup() { return markup; } public void setPageMarkup(String markup) { this.markup = markup; } @Override public IResourceStream getMarkupResourceStream(MarkupContainer container, Class<?> containerClass) { return new StringResourceStream(getPageMarkup()); } } }