blob: e8898657eeae1487437f5c8ac111aa3400d1ef13 [file] [log] [blame]
/*
* 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.queueing;
import static org.apache.wicket.queueing.WicketMatchers.hasPath;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.nullValue;
import java.util.ArrayList;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.markup.IMarkupResourceStreamProvider;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.border.Border;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.internal.Enclosure;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
import org.apache.wicket.queueing.bodyisachild.BodyIsAChildPage;
import org.apache.wicket.queueing.bodyisachild.LoginPanel;
import org.apache.wicket.queueing.nestedborders.InnerBorder;
import org.apache.wicket.queueing.nestedborders.OuterBorder;
import org.apache.wicket.queueing.nestedpanels.InnerPanel;
import org.apache.wicket.queueing.nestedpanels.OuterPanel;
import org.apache.wicket.util.resource.IResourceStream;
import org.apache.wicket.util.resource.StringResourceStream;
import org.apache.wicket.util.tester.FormTester;
import org.apache.wicket.util.tester.WicketTestCase;
import org.junit.Assert;
import org.junit.Test;
public class ComponentQueueingTest extends WicketTestCase
{
/** {@code [a,b,c] -> [a[b[c]]] } */
@Test
public void dequeue1()
{
TestPage p = new TestPage();
p.setPageMarkup("<p wicket:id='a'><p wicket:id='b'><p wicket:id='c'></p></p></p>");
MarkupContainer a = new A(), b = new B(), c = new C();
p.queue(b, c, a);
assertThat(p, hasPath(a, b, c));
tester.startPage(p);
}
/** {@code [a[b,c]] -> [a[b[c]]] } */
@Test
public void dequeue2()
{
TestPage p = new TestPage();
p.setPageMarkup("<p wicket:id='a'><p wicket:id='b'><p wicket:id='c'></p></p></p>");
MarkupContainer a = new A(), b = new B(), c = new C();
p.queue(a);
a.queue(b, c);
tester.startPage(p);
assertThat(p, hasPath(a, b, c));
}
/** {@code [a[b[c]] -> [a[b[c]]] } */
@Test
public void dequeue3()
{
TestPage p = new TestPage();
p.setPageMarkup("<p wicket:id='a'><p wicket:id='b'><p wicket:id='c'></p></p></p>");
MarkupContainer a = new A(), b = new B(), c = new C();
p.queue(a);
a.queue(b);
b.queue(c);
tester.startPage(p);
assertThat(p, hasPath(a, b, c));
}
/** {@code [a[b],c] -> [a[b[c]]] } */
@Test
public void dequeue4()
{
TestPage p = new TestPage();
p.setPageMarkup("<p wicket:id='a'><p wicket:id='b'><p wicket:id='c'></p></p></p>");
MarkupContainer a = new A(), b = new B(), c = new C();
p.queue(a, c);
a.queue(b);
tester.startPage(p);
assertThat(p, hasPath(a, b, c));
}
/** {@code [a(b)],c] -> [a[b[c]]] } */
@Test
public void dequeue5()
{
TestPage p = new TestPage();
p.setPageMarkup("<p wicket:id='a'><p wicket:id='b'><p wicket:id='c'></p></p></p>");
MarkupContainer a = new A(), b = new B(), c = new C();
p.queue(a, c);
a.add(b);
tester.startPage(p);
assertThat(p, hasPath(a, b, c));
}
/** {@code [a,b,c] -> [a[b,c]] } */
@Test
public void dequeue6()
{
TestPage p = new TestPage();
p.setPageMarkup("<p wicket:id='a'><p wicket:id='b'></p><p wicket:id='c'></p></p>");
MarkupContainer a = new A(), b = new B(), c = new C();
p.queue(a, b, c);
tester.startPage(p);
assertThat(p, hasPath(new Path(a, b)));
assertThat(p, hasPath(new Path(a, c)));
}
/**
* {a[b{e}[d,f{g}]],c} -> [a[b[c,d[e],f[g]]]]
*/
@Test
public void dequeue7()
{
TestPage p = new TestPage();
// @formatter:off
p.setPageMarkup(
" <p wicket:id='a'>"
+ " <p wicket:id='b'>"
+ " <p wicket:id='c'></p>"
+ " <p wicket:id='d'>"
+ " <p wicket:id='e'></p>"
+ " </p>"
+ " <p wicket:id='f'>"
+ " <p wicket:id='g'></p>"
+ " </p>"
+ " </p>"
+ "</p>");
// @formatter:on
MarkupContainer a = new A(), b = new B(), c = new C(), d = new D(), e = new E(), f = new F(), g = new G();
a.add(b);
b.queue(e);
p.queue(a, c);
b.add(d);
f.queue(g);
b.add(f);
tester.startPage(p);
assertThat(p, hasPath(new Path(a, b, c)));
assertThat(p, hasPath(new Path(a, b, d, e)));
assertThat(p, hasPath(new Path(a, b, f, g)));
}
/** {@code [a,c[b]] ->| [a[b[c]]] } */
@Test
public void dequeueError1()
{
TestPage p = new TestPage();
p.setPageMarkup("<p wicket:id='a'><p wicket:id='b'><p wicket:id='c'></p></p></p>");
MarkupContainer a = new A(), b = new B(), c = new C();
p.queue(b, c);
c.queue(a);
try
{
tester.startPage(p);
Assert.fail();
}
catch (WicketRuntimeException e)
{
// expected
}
}
/** {@code [a,q[r,s]] - > [a[q[r[s]]]] } */
@Test
public void panel1()
{
MarkupContainer a = new A(), r = new R(), s = new S();
TestPanel q = new TestPanel("q");
q.setPanelMarkup("<wicket:panel><p wicket:id='r'><p wicket:id='s'></p></p></wicket:panel>");
q.queue(r, s);
TestPage p = new TestPage();
p.setPageMarkup("<p wicket:id='a'><p wicket:id='q'></p></p>");
p.queue(a, q);
tester.startPage(p);
assertThat(p, hasPath(new Path(a, q, r, s)));
}
/** panel has leading markup */
@Test
public void panel2()
{
MarkupContainer r = new R();
TestPanel q = new TestPanel("q");
q.setPanelMarkup("<html><body><wicket:panel><p wicket:id='r'></p></wicket:panel></body></html>");
q.queue(r);
TestPage p = new TestPage();
p.setPageMarkup("<p wicket:id='q'></p>");
p.queue(q);
tester.startPage(p);
assertThat(p, hasPath(new Path(q, r)));
}
/** panel with a static header section */
@Test
public void panel3()
{
MarkupContainer r = new R();
TestPanel q = new TestPanel("q");
q.setPanelMarkup("<html><head><wicket:head><meta/></wicket:head></head>"
+ "<body><wicket:panel><p wicket:id='r'></p></wicket:panel></body></html>");
q.queue(r);
TestPage p = new TestPage();
p.setPageMarkup("<html><head></head><body><p wicket:id='q'></p></body></html>");
p.queue(q);
tester.startPage(p);
assertThat(p, hasPath(new Path(q, r)));
tester.assertContains("<meta/>"); // contributed by <wicket:head>
}
/**
* test with inner panels
*/
@Test
public void nestedPanels()
{
MarkupContainer r = new R(), s = new S();
Panel innerPanel = new InnerPanel("inner");
innerPanel.queue(s);
Panel outerPanel = new OuterPanel("outer");
outerPanel.queue(r, innerPanel);
TestPage p = new TestPage();
p.setPageMarkup("<html><head></head><body><p wicket:id='outer'></p></body></html>");
p.queue(outerPanel);
tester.startPage(p);
assertThat(p, hasPath(new Path(outerPanel, r)));
assertThat(p, hasPath(new Path(outerPanel, innerPanel, s)));
tester.assertContains("<meta/>"); // contributed by <wicket:head> in outer
tester.assertContains("<meta2/>"); // contributed by <wicket:head> in inner
}
@Test
public void repeater1()
{
TestPage p = new TestPage();
p.setPageMarkup("<p wicket:id='lv'><p wicket:id='b'><p wicket:id='c'></p></p></p>");
LV l = new LV(3)
{
@Override
protected void populateItem(ListItem<Integer> item)
{
item.queue(new B(), new C());
}
};
p.queue(l);
tester.startPage(p);
assertThat(l.size(), is(3));
for (Component item : l)
{
assertThat(p, hasPath(new Path(l, item, new B(), new C())));
}
}
/** repeater */
@Test
public void repeater2()
{
TestPage p = new TestPage();
p.setPageMarkup("<p wicket:id='a'><p wicket:id='lv'><p wicket:id='b'><p wicket:id='c'></p></p></p></p>");
MarkupContainer a = new A();
LV l = new LV(3)
{
@Override
protected void populateItem(ListItem<Integer> item)
{
item.queue(new B(), new C());
}
};
p.queue(a, l);
tester.startPage(p);
assertThat(l.size(), is(3));
for (Component item : l)
{
assertThat(p, hasPath(new Path(a, l, item, new B(), new C())));
}
}
/** repeater with a panel inside */
@Test
public void repeater3()
{
TestPage p = new TestPage();
p.setPageMarkup("<p wicket:id='a'><p wicket:id='lv'><p wicket:id='b'><p wicket:id='q'></p></p></p></p>");
MarkupContainer a = new A();
LV l = new LV(3)
{
@Override
protected void populateItem(ListItem<Integer> item)
{
TestPanel q = new TestPanel("q");
q.setPanelMarkup("<wicket:panel><p wicket:id='r'><p wicket:id='s'></p></p></wicket:panel>");
q.queue(new R(), new S());
item.queue(q, new B());
}
};
p.queue(a, l);
tester.startPage(p);
assertThat(l.size(), is(3));
for (Component item : l)
{
assertThat(p, hasPath(new Path(a, l, item, new B()).add("q").add(new R(), new S())));
}
}
/** dequeue, then rerender the page instance after a callback is executed */
@Test
public void callback()
{
TestPage p = new TestPage();
p.setPageMarkup("<p wicket:id='a'><a wicket:id='l'><p wicket:id='b'></p></a></p>");
MarkupContainer a = new A(), b = new B();
L l = new L();
p.queue(a, b, l);
tester.startPage(p);
assertThat(p, hasPath(new Path(a, l, b)));
assertThat(l.isClicked(), is(false));
tester.clickLink(l);
assertThat(l.isClicked(), is(true));
}
/** queuing two components with the same id */
@Test
public void queueIdCollission()
{
try
{
new A().queue(new B(), new B());
Assert
.fail("Should not be able to queue two components with the same id under the same parent");
}
catch (WicketRuntimeException e)
{
// expected
}
}
@Test
public void autos1()
{
TestPage p = new TestPage();
p.setPageMarkup("<wicket:enclosure child='a'><div wicket:id='a'></div><div wicket:id='b'></div></wicket:enclosure>");
A a = new A();
B b = new B();
p.queue(a, b);
tester.startPage(p);
assertTrue(a.getParent() instanceof Enclosure);
assertTrue(b.getParent() instanceof Enclosure);
// A is visible, enclosure renders
assertEquals(
"<wicket:enclosure child=\"a\"><div wicket:id=\"a\"></div><div wicket:id=\"b\"></div></wicket:enclosure>",
tester.getLastResponseAsString());
// A is not visible, enclosure does not render
a.setVisible(false);
tester.startPage(p);
assertEquals("", tester.getLastResponseAsString());
}
@Test
public void autos2()
{
TestPage p = new TestPage();
p.setPageMarkup("<wicket:enclosure child='a'><div wicket:id='a'></div><div wicket:id='b'></div></wicket:enclosure>");
A a = new A();
B b = new B();
p.add(a, b);
tester.startPage(p);
assertTrue(a.getParent() instanceof TestPage);
assertTrue(b.getParent() instanceof TestPage);
// A is visible, enclosure renders
assertEquals(
"<wicket:enclosure child=\"a\"><div wicket:id=\"a\"></div><div wicket:id=\"b\"></div></wicket:enclosure>",
tester.getLastResponseAsString());
// A is not visible, enclosure does not render
a.setVisible(false);
tester.startPage(p);
assertEquals("", tester.getLastResponseAsString());
}
@Test
public void autos3()
{
TestPage p = new TestPage();
p.setPageMarkup("<wicket:enclosure child='a'><div wicket:id='a'></div><div wicket:id='b'></div></wicket:enclosure>");
A a = new A();
B b = new B();
p.queue(b);
p.add(a);
tester.startPage(p);
assertTrue(a.getParent() instanceof TestPage);
assertTrue(b.getParent() instanceof Enclosure);
// A is visible, enclosure renders
assertEquals(
"<wicket:enclosure child=\"a\"><div wicket:id=\"a\"></div><div wicket:id=\"b\"></div></wicket:enclosure>",
tester.getLastResponseAsString());
// A is not visible, enclosure does not render
a.setVisible(false);
tester.startPage(p);
assertEquals("", tester.getLastResponseAsString());
}
@Test
public void autos4()
{
TestPage p = new TestPage();
p.setPageMarkup("<wicket:enclosure child='a'><div wicket:id='a'></div><div wicket:id='b'></div></wicket:enclosure>");
A a = new A();
B b = new B();
p.add(b);
p.queue(a);
tester.startPage(p);
assertTrue(a.getParent() instanceof Enclosure);
assertTrue(b.getParent() instanceof TestPage);
// A is visible, enclosure renders
assertEquals(
"<wicket:enclosure child=\"a\"><div wicket:id=\"a\"></div><div wicket:id=\"b\"></div></wicket:enclosure>",
tester.getLastResponseAsString());
// A is not visible, enclosure does not render
a.setVisible(false);
tester.startPage(p);
assertEquals("", tester.getLastResponseAsString());
}
@Test
public void autos5()
{
TestPage p = new TestPage();
p.setPageMarkup("<wicket:enclosure child='a'><div wicket:id='a'></div><div wicket:id='b'></div></wicket:enclosure>");
A a = new A();
B b = new B();
p.queue(a);
p.add(b);
tester.startPage(p);
assertTrue(a.getParent() instanceof Enclosure);
assertTrue(b.getParent() instanceof TestPage);
// A is visible, enclosure renders
assertEquals(
"<wicket:enclosure child=\"a\"><div wicket:id=\"a\"></div><div wicket:id=\"b\"></div></wicket:enclosure>",
tester.getLastResponseAsString());
// A is not visible, enclosure does not render
a.setVisible(false);
tester.startPage(p);
assertEquals("", tester.getLastResponseAsString());
}
/**
* Test InlineEnclosure
*/
@Test
public void autos6()
{
TestPage p = new TestPage();
p.setPageMarkup("<div wicket:enclosure='a'><div wicket:id='a'></div><div wicket:id='b'></div></div>");
A a = new A();
B b = new B();
p.queue(a, b);
tester.startPage(p);
assertTrue(a.getParent() instanceof Enclosure);
assertTrue(b.getParent() instanceof Enclosure);
// A is visible, enclosure renders
assertEquals(
"<div wicket:enclosure=\"a\" id=\"wicket__InlineEnclosure_20793898271\"><div wicket:id=\"a\"></div><div wicket:id=\"b\"></div></div>",
tester.getLastResponseAsString());
// A is not visible, inline enclosure render only itself (the placeholder tag)
a.setVisible(false);
tester.startPage(p);
assertEquals("<div id=\"wicket__InlineEnclosure_20793898271\" style=\"display:none\"></div>", tester.getLastResponseAsString());
}
/**
* Test empty child attribute
*/
@Test
public void autos7()
{
TestPage p = new TestPage();
p.setPageMarkup("<wicket:enclosure child=''><div wicket:id='a'></div></wicket:enclosure>");
A a = new A();
p.queue(a);
tester.startPage(p);
assertTrue(a.getParent() instanceof Enclosure);
// A is visible, enclosure renders
assertEquals(
"<wicket:enclosure child=\"a\"><div wicket:id=\"a\"></div></wicket:enclosure>",
tester.getLastResponseAsString());
// A is not visible, enclosure does not render
a.setVisible(false);
tester.startPage(p);
assertEquals("", tester.getLastResponseAsString());
}
/**
* Test autocomponent inside not-queue region
*/
@Test
public void autosInsideNotQueueRegion()
{
TestPage p = new TestPage();
p.setPageMarkup("<div wicket:id='outerContainer'><wicket:enclosure><div wicket:id='a'></div></wicket:enclosure></div>");
Label a = new Label("a", "a");
WebMarkupContainer outer;
p.add(outer = new WebMarkupContainer("outerContainer"));
outer.queue(a);
tester.startPage(p);
assertTrue(a.getParent() instanceof Enclosure);
}
@Test
public void border1()
{
MarkupContainer a = new A(), b = new B(), r = new R(), s = new S();
TestBorder border = new TestBorder("border");
border.setBorderMarkup("<wicket:border><b1 wicket:id='r'><b2 wicket:id='s'>" +
"<wicket:body/></b2></b1></wicket:border>");
border.queueToBorder(r, s);
TestPage p = new TestPage();
p.setPageMarkup("<out1 wicket:id='a'><p wicket:id='border'><in1 wicket:id='b'></in1></p></out1>");
p.queue(a, border, b);
tester.startPage(p);
assertThat(p, hasPath(new Path(a, border, r, s, border.getBodyContainer(), b)));
}
@Test
public void queueBorderBody() throws Exception
{
TestBorder border = new TestBorder("border");
border.setBorderMarkup("<wicket:border><wicket:body/></wicket:border>");
TestPage p = new TestPage();
p.setPageMarkup("<div wicket:id=\"border\"><span wicket:id=\"label\"></span></div>");
p.add(border);
border.queue(new Label("label", "test"));
tester.startPage(p);
}
@Test
public void border_nested()
{
MarkupContainer a = new A(), b = new B(), c= new C(), d = new D(), r = new R(), s = new S();
Border outerBorder = new OuterBorder("outerBorder");
Border innerBorder = new InnerBorder("innerBorder");
outerBorder.queueToBorder(r, innerBorder);
innerBorder.queueToBorder(c, d);
outerBorder.queueToBorder(s);
TestPage p = new TestPage();
p.setPageMarkup("<p wicket:id='a'><p wicket:id='outerBorder'><p wicket:id='b'></p></p></p>");
p.queue(b, outerBorder, a);
tester.startPage(p);
assertThat(p, hasPath(new Path(a, outerBorder, r, innerBorder, c, d, innerBorder.getBodyContainer(), s)));
assertThat(p, hasPath(new Path(a, outerBorder, r, outerBorder.getBodyContainer(), b)));
}
@Test
public void fragment1() {
MarkupContainer a = new A(), b = new B(), r = new R(), s = new S();
TestPage page = new TestPage();
page.setPageMarkup("<a wicket:id='a'></a><f wicket:id='fragment'></f><b wicket:id='b'></b>"
+ "<wicket:fragment wicket:id='f'><r wicket:id='r'></r><s wicket:id='s'></s></wicket:fragment>");
Fragment fragment = new Fragment("fragment", "f", page);
fragment.queue(r, s);
page.queue(a, b, fragment);
assertThat(page, hasPath(new Path(a)));
assertThat(page, hasPath(new Path(b)));
assertThat(page, hasPath(new Path(fragment, r)));
assertThat(page, hasPath(new Path(fragment, s)));
}
@Test
public void fragment_doesNotDequeueAcrossRegion()
{
MarkupContainer a = new A();
TestPage page = new TestPage();
page.setPageMarkup("<f wicket:id='fragment'></f><wicket:fragment wicket:id='f'><a wicket:id='a'></a></wicket:fragment>");
Fragment fragment = new Fragment("fragment", "f", page);
page.queue(a, fragment);
assertThat(page, hasPath(new Path(fragment)));
assertThat(a.getParent(), is(nullValue()));
}
@Test
public void containerTag1()
{
MarkupContainer a = new A(), b = new B();
TestPage page = new TestPage();
page.setPageMarkup("<wicket:container wicket:id='a'><b wicket:id='b'></b></wicket:container>");
page.queue(a, b);
assertThat(page, hasPath(new Path(a, b)));
}
@Test
public void queueInsideHeader()
{
TestPage page = new TestPage();
page.setPageMarkup("<html>"
+"<head><title wicket:id='title'></title></head>"
+ "<body><div>"
+ "Hello!"
+ "</div></body>"
+ "</html>");
page.queue(new Label("title"));
tester.startPage(page);
tester.assertContains("title");
}
@Test
public void queueInsideAutoLink()
{
TestPage page = new TestPage();
page.setPageMarkup("<wicket:link>"
+ "<a href='test.html'>"
+ "<wicket:container wicket:id='test'>test</wicket:container>"
+ "</a></wicket:link>");
page.queue(new WebMarkupContainer("test"));
tester.startPage(page);
}
@Test
public void queueInsideLabelComponent()
{
TestPage page = new TestPage();
page.setPageMarkup("<label wicket:for='input'>"
+ "label:"
+ "<input wicket:id='input'/>"
+ "</label>");
page.queue(new TextField<>("input", Model.of("test")));
tester.startPage(page);
}
@Test
public void queueNestedEnclosure()
{
TestPage page = new TestPage();
page.setPageMarkup( "<div wicket:enclosure='outer'>" +
"<div wicket:id='outer'>" +
" <div wicket:enclosure='middle'>" +
" <div wicket:enclosure='inner'>" +
" <div wicket:id='inner'>inner</div>" +
" </div>" +
" <div wicket:id='middle'>middle</div>" +
" </div>" +
" outer" +
"</div>" +
"</div>");
WebMarkupContainer container = new WebMarkupContainer("outer");
container.add(new WebMarkupContainer("middle"));
container.add(new WebMarkupContainer("inner"));
page.add(container);
tester.startPage(page);
}
/**
* https://issues.apache.org/jira/browse/WICKET-6088
*/
@Test
public void queueComponentInsideWcAndEnclosure()
{
TestPage page = new TestPage();
page.setPageMarkup(" <div wicket:id=\"container\">\n" +
" <div wicket:enclosure=\"child\">\n" +
" <p wicket:id=\"child\">1</p>\n" +
" <a wicket:id=\"child2\">2</a>\n" +
" </div>\n" +
" </div>");
WebMarkupContainer container = new WebMarkupContainer("container");
container.queue(new Label("child")
{
@Override
protected void onInitialize()
{
super.onInitialize();
setDefaultModel(Model.of("test"));
}
});
container.queue(new WebMarkupContainer("child2").setVisible(false));
page.queue(container);
tester.startPage(page);
}
@Test
public void queueComponentInsideBorderAndEnclosure()
{
TestPage page = new TestPage();
page.setPageMarkup(" <div wicket:id=\"panel\"></div>");
TestPanel panel = new TestPanel("panel");
panel.setPanelMarkup("<wicket:panel>\n"
+ "<div wicket:id=\"border\">\n" +
" <div wicket:enclosure=\"child\">\n" +
" <p wicket:id=\"child\">1</p>\n" +
" </div>\n" +
" </div>\n" +
"</wicket:panel>");
TestBorder border = new TestBorder("border");
border.setBorderMarkup("<wicket:border><wicket:body/></wicket:border>");
panel.add(border);
page.add(panel);
border.add(new Label("child"));
tester.startPage(page);
}
/**
* https://issues.apache.org/jira/browse/WICKET-6036
*/
@Test
public void nestedTags()
{
IncorrectCloseTagPanel p = new IncorrectCloseTagPanel("test");
tester.startComponentInPage(p);
}
/**
* https://issues.apache.org/jira/browse/WICKET-6077
*/
@Test
public void bodyIsAChild() {
tester.startPage(BodyIsAChildPage.class);
tester.assertRenderedPage(BodyIsAChildPage.class);
String username = "USER";
String password = "PASSWD";
FormTester formTester = tester.newFormTester("wmc:login:loginForm");
formTester.setValue("usernameFormGroup:usernameFormGroup_body:username", username);
formTester.setValue("passwordFormGroup:passwordFormGroup_body:password", password);
formTester.submit();
LoginPanel loginPanel = (LoginPanel) tester.getComponentFromLastRenderedPage("wmc:login");
assertEquals(username, loginPanel.pojo.username);
assertEquals(password, loginPanel.pojo.password);
}
private static class A extends WebMarkupContainer
{
public A()
{
super("a");
}
}
private static class B extends WebMarkupContainer
{
public B()
{
super("b");
}
}
private static class C extends WebMarkupContainer
{
public C()
{
super("c");
}
}
private static class D extends WebMarkupContainer
{
public D()
{
super("d");
}
}
private static class E extends WebMarkupContainer
{
public E()
{
super("e");
}
}
private static class F extends WebMarkupContainer
{
public F()
{
super("f");
}
}
private static class G extends WebMarkupContainer
{
public G()
{
super("g");
}
}
private static class R extends WebMarkupContainer
{
public R()
{
super("r");
}
}
private static class S extends WebMarkupContainer
{
public S()
{
super("s");
}
}
private static abstract class LV extends ListView<Integer>
{
public LV(int size)
{
super("lv");
ArrayList<Integer> values = new ArrayList<>();
for (int i = 0; i < size; i++)
values.add(i);
setModel(new Model<>(values));
}
}
private static class L extends Link<Void>
{
private boolean clicked = false;
public L()
{
super("l");
}
@Override
public void onClick()
{
clicked = true;
}
public boolean isClicked()
{
return clicked;
}
}
private static class TestPage extends WebPage implements IMarkupResourceStreamProvider
{
private String markup;
public TestPage()
{
}
public TestPage(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());
}
}
private static class TestPanel extends Panel implements IMarkupResourceStreamProvider
{
private String markup;
public TestPanel(String id)
{
super(id);
}
protected void setPanelMarkup(String markup)
{
this.markup = markup;
}
protected String getPanelMarkup()
{
return markup;
}
@Override
public IResourceStream getMarkupResourceStream(MarkupContainer container,
Class<?> containerClass)
{
return new StringResourceStream(getPanelMarkup());
}
}
private static class TestBorder extends Border implements IMarkupResourceStreamProvider
{
private String markup;
public TestBorder(String id)
{
super(id);
}
protected void setBorderMarkup(String markup)
{
this.markup = markup;
}
protected String getBorderMarkup()
{
return markup;
}
@Override
public IResourceStream getMarkupResourceStream(MarkupContainer container,
Class<?> containerClass)
{
return new StringResourceStream(getBorderMarkup());
}
}
}