package lt.inventi.wicket.component.bootstrap.tab; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.assertThat; import java.util.Arrays; import java.util.List; import org.apache.wicket.extensions.markup.html.tabs.AbstractTab; import org.apache.wicket.extensions.markup.html.tabs.TabbedPanel; import org.apache.wicket.markup.IMarkupFragment; import org.apache.wicket.markup.Markup; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.Model; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.util.string.StringValue; import org.apache.wicket.util.tester.WicketTester; import org.junit.Test; public class RememberingTabbedPanelTest { private static final List<AbstractTab> TABS = Arrays.asList(new AbstractTab(Model.of("First")) { @Override public WebMarkupContainer getPanel(String panelId) { return new TestPanel(panelId); } }, new AbstractTab(Model.of("Second")) { @Override public WebMarkupContainer getPanel(String panelId) { return new TestPanel(panelId); } }); private WicketTester tester = new WicketTester(); @Test public void setsCurrentTabIndexIntoPageParameters() { TestPage page = tester.startPage(TestPage.class); StringValue tabParam = tester.getLastRenderedPage().getPageParameters().get("tabs"); assertThat(tabParam.toString(), is(nullValue())); assertThat(page.getTabs().getSelectedTab(), is(0)); tester.clickLink("tabs:tabs-container:tabs:1:link"); tabParam = tester.getLastRenderedPage().getPageParameters().get("tabs"); assertThat(tabParam.toString(), equalTo("1")); assertThat(page.getTabs().getSelectedTab(), is(1)); } @Test public void doesntFailWhenSettingTabOutOfRange() { TestPage page = tester.startPage(TestPage.class, new PageParameters().set("tabs", 100)); assertThat(page.getTabs().getSelectedTab(), is(0)); } public static class TestPage extends WebPage { public TestPage(PageParameters parameters) { super(parameters); add(new RememberingTabbedPanel<AbstractTab>("tabs", TABS)); } @SuppressWarnings("unchecked") TabbedPanel<AbstractTab> getTabs() { return (TabbedPanel<AbstractTab>) get("tabs"); } @Override public IMarkupFragment getMarkup() { return Markup.of("<html><head></head><body><div wicket:id=\"tabs\"></div></body></html>"); } } private static class TestPanel extends Panel { public TestPanel(String id) { super(id); } } }