package lt.inventi.wicket.application;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Assert;
import org.apache.wicket.Component;
import org.apache.wicket.Page;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.protocol.http.mock.MockServletContext;
import org.apache.wicket.util.tester.WicketTester;
import org.junit.Test;
public class StaticIdInitializationListenerTest {
@Test
public void testStaticId(){
WebApplication app = new WebApplication() {
@Override
public Class<? extends Page> getHomePage() {
return null;
}
};
app.getComponentInitializationListeners()
.add(new StaticIdInitializationListener());
MockServletContext context = new MockServletContext(app , "");
WicketTester test = new WicketTester(app, context);
Panel panel = test.startComponentInPage(StaticIdPanel.class);
Assert.assertTrue(panel.getOutputMarkupId());
Component textField = panel.get("textField");
Assert.assertTrue(textField.getOutputMarkupId());
Assert.assertEquals("textField", textField.getMarkupId());
Component list = panel.get("list");
Assert.assertTrue(list.getOutputMarkupId());
Assert.assertEquals("list", list.getMarkupId());
Component field1 = panel.get("list:0:textField");
Assert.assertTrue( field1.getOutputMarkupId());
Assert.assertEquals("list_0_textField", field1.getMarkupId());
Component field2 = panel.get("list:1:textField");
Assert.assertTrue( field2.getOutputMarkupId());
Assert.assertEquals("list_1_textField", field2.getMarkupId());
Component field3 = panel.get("list:1:list2:1:textField2");
Assert.assertTrue(field3.getOutputMarkupId());
Assert.assertEquals("list_1_list2_1_textField2", field3.getMarkupId());
}
public static class StaticIdPanel extends Panel{
public StaticIdPanel(String id) {
super(id);
add(new TextField<String>("textField"));
final List<String> list = new ArrayList<String>();
list.add("test1");
list.add("test2");
add(new ListView<String>("list", list) {
@Override
protected void populateItem(ListItem<String> item) {
item.add(new TextField<String>("textField"));
item.add(new ListView<String>("list2", list) {
@Override
protected void populateItem(ListItem<String> item2) {
item2.add(new TextField<String>("textField2"));
}
});
}
});
}
}
}