/* * 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.markupFragments; import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; import org.apache.wicket.Page; import org.apache.wicket.markup.IMarkupFragment; import org.apache.wicket.markup.html.border.Border; import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.markup.html.panel.InlinePanelPage_1; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.util.tester.WicketTestCase; import org.junit.Test; /** * */ public class MarkupFragmentTest extends WicketTestCase { /** * page.getAssociatedMarkup(), page.getMarkup() and page.getMarkup(null) must all return the * same * * @throws Exception */ @Test public void page() throws Exception { IMarkupFragment markup = new MyPage().getAssociatedMarkup(); compareMarkupWithFile(markup, "MyPage_ExpectedResult.html", MyPage.class); markup = new MyPage().getMarkup(); compareMarkupWithFile(markup, "MyPage_ExpectedResult.html", MyPage.class); markup = new MyPage().getMarkup(null); compareMarkupWithFile(markup, "MyPage_ExpectedResult.html", MyPage.class); } /** * * @throws Exception */ @Test public void panel() throws Exception { Page page = new MyPage(); Panel panel = new MyPanel("panel"); page.add(panel); // Get the associated markup file IMarkupFragment markup = panel.getAssociatedMarkup(); compareMarkupWithFile(markup, "MyPanel_ExpectedResult.html", MyPage.class); // The Page is missing the tag to "call" the panel assertNull(panel.getMarkup()); // Create a Page with proper markup for the panel page = new MyPanelPage(); panel = (Panel)page.get("panel"); // getMarkup() returns the "calling" tags markup = panel.getMarkup(); compareMarkupWithString(markup, "<span wicket:id=\"panel\">test</span>"); // getMarkup(null) returns the markup which is used to find a child component, which in case // of Panel is the <wicket:panel> tag and is thus may not be equal to the associated markup // file. markup = panel.getMarkup(null); compareMarkupWithString(markup, "<wicket:panel> <span wicket:id=\"label\">text</span></wicket:panel>"); } /** * @see href http://issues.apache.org/jira/browse/WICKET-3111 * * @throws Exception */ @Test public void panelWithAutoComponent() throws Exception { Page page = new MyPage(); Panel panel = new MyPanelWithAutoComponent("panel"); page.add(panel); // Get the associated markup file IMarkupFragment markup = panel.getAssociatedMarkup(); compareMarkupWithFile(markup, "MyPanelWithAutoComponent_ExpectedResult.html", MyPage.class); // The Page is missing the tag to "call" the panel assertNull(panel.getMarkup()); // Create a Page with proper markup for the panel page = new MyPanelWithAutoComponentPage(); panel = (Panel)page.get("panel"); // getMarkup() returns the "calling" tags markup = panel.getMarkup(); compareMarkupWithString(markup, "<span wicket:id=\"panel\">test</span>"); // getMarkup(null) returns the markup which is used to find a child component markup = panel.getMarkup(null); compareMarkupWithString(markup, "<wicket:panel><a href=\"something\"><span wicket:id=\"label\">text</span></a></wicket:panel>"); } /** * * @throws Exception */ @Test public void label() throws Exception { Component label = new MyPage().get("label"); IMarkupFragment markup = label.getMarkup(); compareMarkupWithString(markup, "<span wicket:id=\"label\">text</span>"); label = new MyPanelPage().get("panel:label"); markup = label.getMarkup(); compareMarkupWithString(markup, "<span wicket:id=\"label\">text</span>"); } /** * * @throws Exception */ @Test public void webMarkupContainer() throws Exception { MarkupContainer container = (MarkupContainer)new MyPage().get("container"); IMarkupFragment markup = container.getMarkup(); compareMarkupWithString(markup, "<span wicket:id=\"container\">text</span>"); // The container doesn't have an external markup file markup = container.getAssociatedMarkup(); assertNull(markup); // Get the markup which is used to search for children. markup = container.getMarkup(null); compareMarkupWithString(markup, "<span wicket:id=\"container\">text</span>"); } /** * * @throws Exception */ @Test public void border() throws Exception { Page page = new MyBorderPage(); Border border = (Border)page.get("border"); // Get the associated markup file IMarkupFragment markup = border.getAssociatedMarkup(); compareMarkupWithFile(markup, "MyBorder_ExpectedResult.html", MyPage.class); // getMarkup() returns the "calling" tags markup = border.getMarkup(); compareMarkupWithString(markup, "<span wicket:id=\"border\">test</span>"); // getMarkup(null) returns the markup which is used to find a child component markup = border.getMarkup(null); compareMarkupWithString(markup, "<wicket:border> 111 <wicket:body/> 222</wicket:border>"); assertNull(border.getBodyContainer().getAssociatedMarkup()); border.dequeue(); markup = border.getBodyContainer().getMarkup(); compareMarkupWithString(markup, "<wicket:body/>"); markup = border.getBodyContainer().getMarkup(null); compareMarkupWithString(markup, "<span wicket:id=\"border\">test</span>"); markup = border.getBodyContainer().getParent().getMarkup(border.getBodyContainer()); compareMarkupWithString(markup, "<wicket:body/>"); // getMarkup(null) returns the markup which is used to find a child component markup = border.getBodyContainer().getMarkup(null); compareMarkupWithString(markup, "<span wicket:id=\"border\">test</span>"); } /** * * @throws Exception */ @Test public void border2() throws Exception { Page page = new MyBorderPage(); Border border = (Border)page.get("border2"); // Get the associated markup file IMarkupFragment markup = border.getAssociatedMarkup(); compareMarkupWithFile(markup, "MyBorder2_ExpectedResult.html", MyPage.class); // getMarkup() returns the "calling" tags markup = border.getMarkup(); compareMarkupWithString(markup, "<span wicket:id=\"border2\">test</span>"); // getMarkup(null) returns the markup which is used to find a child component markup = border.getMarkup(null); compareMarkupWithString(markup, "<wicket:border> 111 <wicket:body>333</wicket:body> 222</wicket:border>"); assertNull(border.getBodyContainer().getAssociatedMarkup()); // See explanation in BaseBorder.BorderBodyContainer.getMarkup() border.dequeue(); markup = border.getBodyContainer().getParent().getMarkup(border.getBodyContainer()); compareMarkupWithString(markup, "<wicket:body>333</wicket:body>"); markup = border.getBodyContainer().getMarkup(); compareMarkupWithString(markup, "<wicket:body>333</wicket:body>"); // getMarkup(null) returns the markup which is used to find a child component markup = border.getBodyContainer().getMarkup(null); compareMarkupWithString(markup, "<span wicket:id=\"border2\">test</span>"); } /** * * @throws Exception */ @Test public void fragments() throws Exception { Page page = new InlinePanelPage_1(); Fragment fragment = (Fragment)page.get("myPanel1"); // Get the associated markup file IMarkupFragment markup = fragment.getAssociatedMarkup(); assertNull(markup); // getMarkup() returns the "calling" tags markup = fragment.getMarkup(); compareMarkupWithString(markup, "<span wicket:id=\"myPanel1\">panel</span>"); // getMarkup(null) returns the markup which is used to find a child component markup = fragment.getMarkup(null); compareMarkupWithString(markup, "<wicket:fragment wicket:id=\"frag1\">panel 1</wicket:fragment>"); } }