[KARAF-1772] Use wicket test utils to cleanup integration tests

Signed-off-by: Andreas Pieber <anpieber@gmail.com>

git-svn-id: https://svn.apache.org/repos/asf/karaf/webconsole/trunk@1378076 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/core/pom.xml b/core/pom.xml
index f6f07bc..01129c1 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -46,7 +46,6 @@
             <artifactId>org.ops4j.pax.wicket.service</artifactId>
             <version>${ops4j.paxwicket.version}</version>
         </dependency>
-
         <dependency>
             <groupId>org.apache.karaf.jaas</groupId>
             <artifactId>org.apache.karaf.jaas.modules</artifactId>
@@ -67,6 +66,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.ops4j.pax.wicket</groupId>
+            <artifactId>org.ops4j.pax.wicket.test</artifactId>
+            <version>${ops4j.paxwicket.version}</version>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
             <version>${slf4j.version}</version>
diff --git a/core/src/test/java/org/apache/karaf/webconsole/core/BasePageTest.java b/core/src/test/java/org/apache/karaf/webconsole/core/BasePageTest.java
index 065afb7..9c657cb 100644
--- a/core/src/test/java/org/apache/karaf/webconsole/core/BasePageTest.java
+++ b/core/src/test/java/org/apache/karaf/webconsole/core/BasePageTest.java
@@ -60,12 +60,8 @@
 
         replay(brandProvider);
 
-        Map<String, Object> values = new HashMap<String, Object>();
-        values.put("brandProvider", brandProvider);
+        injector.registerBean("brandProvider", brandProvider);
 
-        injector.setValues(values);
-
-        WicketTester tester = new WicketTester(application);
         tester.startPage(BasePage.class);
 
         tester.assertVisible("topPanel:" + imageId);
diff --git a/core/src/test/java/org/apache/karaf/webconsole/core/LoginTest.java b/core/src/test/java/org/apache/karaf/webconsole/core/LoginTest.java
index 9815ce1..12dc168 100644
--- a/core/src/test/java/org/apache/karaf/webconsole/core/LoginTest.java
+++ b/core/src/test/java/org/apache/karaf/webconsole/core/LoginTest.java
@@ -36,11 +36,10 @@
 
     @Test
     public void testSuccessLogin() throws Exception {
-        injector.getValues().put("widgets", new ArrayList<WidgetProvider>());
+        injector.registerBean("widgets", new ArrayList<WidgetProvider>());
 
-        WicketTester tester = new WicketTester(application);
         tester.startPage(LoginPage.class);
-        //tester.debugComponentTrees();
+
         FormTester form = tester.newFormTester("signIn:signInForm");
 
         form.setValue("username", "rootadmin");
@@ -53,7 +52,6 @@
 
     @Test(expected = UnauthorizedInstantiationException.class)
     public void testWrongRoleLogin() throws Exception {
-        WicketTester tester = new WicketTester(application);
         tester.startPage(LoginPage.class);
 
         FormTester form = tester.newFormTester("signIn:signInForm");
diff --git a/core/src/test/java/org/apache/karaf/webconsole/core/TestInjector.java b/core/src/test/java/org/apache/karaf/webconsole/core/TestInjector.java
deleted file mode 100644
index 9d49d6a..0000000
--- a/core/src/test/java/org/apache/karaf/webconsole/core/TestInjector.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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.karaf.webconsole.core;
-
-import java.lang.reflect.Field;
-import java.util.Map;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.application.IComponentInstantiationListener;
-import org.ops4j.pax.wicket.api.PaxWicketBean;
-import org.ops4j.pax.wicket.internal.injection.AbstractPaxWicketInjector;
-import org.ops4j.pax.wicket.util.proxy.LazyInitProxyFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * {@link IComponentInstantiationListener} which injects given values to fields
- * annotated with {@link PaxWicketBean}.
- */
-public class TestInjector extends AbstractPaxWicketInjector implements IComponentInstantiationListener {
-
-    /**
-     * Logger.
-     */
-    private Logger logger = LoggerFactory.getLogger(TestInjector.class);
-
-    /**
-     * Values to inject.
-     */
-    private Map<String, Object> values;
-
-    public TestInjector(Map<String, Object> values) {
-        this.values = values;
-    }
-
-    /**
-     * Set values to be injected.
-     */
-    public void setValues(Map<String, Object> values) {
-        this.values = values;
-    }
-
-    /**
-     * Gets values to inject.
-     * 
-     * @return Injection values
-     */
-    public Map<String, Object> getValues() {
-        return values;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void onInstantiation(Component component) {
-        for (Field field : getFields(component.getClass())) {
-            // iterate over fields and check if there is values to inject 
-            String name = field.getName();
-            Class<?> type = field.getType();
-
-            PaxWicketBean wicketBean = field.getAnnotation(PaxWicketBean.class);
-            if (wicketBean != null) {
-                name = wicketBean.name();
-            }
-
-            if (values.containsKey(name)) {
-                // we have value..
-                final Object value = values.get(name);
-
-                // create instance proxy, just like pax-wicket does
-                if (type.isAssignableFrom(value.getClass())){
-                    logger.debug("Setting value {} for field {}.{}", new Object[] {value, field.getDeclaringClass().getName(), name});
-                    Object createProxy = LazyInitProxyFactory.createProxy(field.getType(), new TestTargetLocator(value));
-                    setField(component, field, createProxy);
-                } else {
-                    logger.error("Type mismath for field {}.{}. Expected {} but {} given", new Object[] {
-                        field.getDeclaringClass().getName(), name, field.getType().getName(), value.getClass().getName()
-                    });
-                }
-            } else {
-                logger.warn("No value provided for field {}.{}", field.getDeclaringClass().getName(), name);
-            }
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void inject(Object toInject, Class<?> toHandle) {
-        throw new UnsupportedOperationException("inject operation should never be executed");
-    }
-
-}
\ No newline at end of file
diff --git a/core/src/test/java/org/apache/karaf/webconsole/core/TestTargetLocator.java b/core/src/test/java/org/apache/karaf/webconsole/core/TestTargetLocator.java
deleted file mode 100644
index d478342..0000000
--- a/core/src/test/java/org/apache/karaf/webconsole/core/TestTargetLocator.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.karaf.webconsole.core;
-
-import org.ops4j.pax.wicket.util.proxy.IProxyTargetLocator;
-
-/**
- * Test target locator for test injections.
- */
-@SuppressWarnings("serial")
-public class TestTargetLocator implements IProxyTargetLocator {
-
-    private Object value;
-
-    public TestTargetLocator(Object value) {
-        this.value = value;
-    }
-
-    public Object locateProxyTarget() {
-        return value;
-    }
-
-}
\ No newline at end of file
diff --git a/core/src/test/java/org/apache/karaf/webconsole/core/WebConsoleTest.java b/core/src/test/java/org/apache/karaf/webconsole/core/WebConsoleTest.java
index 97147b2..e8db02a 100644
--- a/core/src/test/java/org/apache/karaf/webconsole/core/WebConsoleTest.java
+++ b/core/src/test/java/org/apache/karaf/webconsole/core/WebConsoleTest.java
@@ -17,11 +17,9 @@
 package org.apache.karaf.webconsole.core;
 
 import static org.easymock.EasyMock.anyObject;
+import static org.ops4j.pax.wicket.test.spring.SimplifiedPaxWicketInjector.registerBeanInjector;
 
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import org.apache.karaf.webconsole.core.brand.DefaultBrandProvider;
 import org.apache.karaf.webconsole.core.internal.WebConsoleApplication;
@@ -29,24 +27,22 @@
 import org.apache.karaf.webconsole.core.security.KarafJaasWebSession;
 import org.apache.wicket.Page;
 import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
+import org.apache.wicket.extensions.markup.html.tabs.ITab;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.util.tester.WicketTester;
 import org.junit.Before;
+import org.ops4j.pax.wicket.internal.PaxWicketApplicationFactory;
+import org.ops4j.pax.wicket.test.spring.SimplifiedPaxWicketInjector;
 
 /**
  * Base class for webconsole tests.
  */
 public class WebConsoleTest {
 
-    /**
-     * Application instance.
-     */
     protected WebApplication application;
-
-    /**
-     * Test injector.
-     */
-    protected TestInjector injector;
+    protected WicketTester tester;
+    protected SimplifiedPaxWicketInjector injector;
 
     public WebConsoleTest() {
         super();
@@ -60,13 +56,12 @@
             }
         };
 
-        // default configurations values.
-        Map<String, Object> values = new HashMap<String, Object>();
-        values.put("brandProvider", new DefaultBrandProvider());
-        values.put("preferencesService", new JdkPreferencesService());
+        tester = new WicketTester(application);
 
-        injector = new TestInjector(values);
-        application.getComponentInstantiationListeners().add(injector);
+        injector = registerBeanInjector(tester);
+        injector.registerBean("brandProvider", new DefaultBrandProvider());
+        injector.registerBean("preferencesService", new JdkPreferencesService());
+        injector.registerBean("tabs", new ArrayList<ITab>());
     }
 
     protected Class<? extends AuthenticatedWebSession> getWebSessionClass() {
diff --git a/core/src/test/java/org/apache/karaf/webconsole/core/dashboard/DashboardPageTest.java b/core/src/test/java/org/apache/karaf/webconsole/core/dashboard/DashboardPageTest.java
index c6c1540..9bddc09 100644
--- a/core/src/test/java/org/apache/karaf/webconsole/core/dashboard/DashboardPageTest.java
+++ b/core/src/test/java/org/apache/karaf/webconsole/core/dashboard/DashboardPageTest.java
@@ -55,13 +55,10 @@
         ArrayList<WidgetProvider> providers = new ArrayList<WidgetProvider>();
         providers.add(new TestWidgetProvider());
 
-        values.put("widgets", providers);
-        values.put("brandProvider", new DefaultBrandProvider());
-        values.put("preferencesService", new JdkPreferencesService());
+        injector.registerBean("widgets", providers);
+        injector.registerBean("brandProvider", new DefaultBrandProvider());
+        injector.registerBean("preferencesService", new JdkPreferencesService());
 
-        injector.setValues(values);
-
-        WicketTester tester = new WicketTester(application);
         tester.startPage(DashboardPage.class);
 
         tester.assertRenderedPage(DashboardPage.class);
diff --git a/core/src/test/java/org/apache/karaf/webconsole/core/page/SecuredPageTest.java b/core/src/test/java/org/apache/karaf/webconsole/core/page/SecuredPageTest.java
index 6afd917..076df23 100644
--- a/core/src/test/java/org/apache/karaf/webconsole/core/page/SecuredPageTest.java
+++ b/core/src/test/java/org/apache/karaf/webconsole/core/page/SecuredPageTest.java
@@ -35,8 +35,6 @@
      */
     @Test
     public void shouldRenderLogoutLink() {
-        WicketTester tester = new WicketTester(application);
-
         tester.startPage(SinglePage.class);
         tester.debugComponentTrees();
         tester.clickLink("topPanel:logoutLink");
diff --git a/core/src/test/java/org/apache/karaf/webconsole/core/page/SidebarPageTest.java b/core/src/test/java/org/apache/karaf/webconsole/core/page/SidebarPageTest.java
index 963a500..fb7bd8d 100644
--- a/core/src/test/java/org/apache/karaf/webconsole/core/page/SidebarPageTest.java
+++ b/core/src/test/java/org/apache/karaf/webconsole/core/page/SidebarPageTest.java
@@ -45,8 +45,6 @@
 
     @Test
     public void testSidebarWithoutSubItems() {
-        WicketTester tester = new WicketTester(application);
-
         SidebarProvider provider = createMock(SidebarProvider.class);
         expect(provider.getMasterPageLink(anyString(), anyString())).andAnswer(new LinkAnswer("Test link", DashboardPage.class));
         expect(provider.getItems(anyString(), anyString())).andReturn(emptyLinkList());
@@ -64,8 +62,6 @@
 
     @Test(expected = MarkupException.class)
     public void testNoSidebarProvider() {
-        WicketTester tester = new WicketTester(application);
-
         tester.startPage(SidebarPage.class);
     }
 
diff --git a/core/src/test/java/org/apache/karaf/webconsole/core/page/SinglePageTest.java b/core/src/test/java/org/apache/karaf/webconsole/core/page/SinglePageTest.java
index b0158fd..53c8340 100644
--- a/core/src/test/java/org/apache/karaf/webconsole/core/page/SinglePageTest.java
+++ b/core/src/test/java/org/apache/karaf/webconsole/core/page/SinglePageTest.java
@@ -71,19 +71,17 @@
         expect(mock.getItems(anyString(), anyString())).andReturn(emptyLinkList());
 
         tabs.add(mock);
-        values.put("tabs", tabs);
-        injector.setValues(values);
+        injector.registerBean("tabs", tabs);
 
         replay(mock);
 
-        WicketTester tester = new WicketTester(application);
         tester.startPage(SinglePageExt.class);
         tester.debugComponentTrees();
 
         tester.clickLink("topPanel:tabs:0:moduleLink");
 
-        assertTabs(tester, tabs);
-        assertTabLink(tester, 0, "test", SinglePageExt.class);
+        assertTabs(tabs);
+        assertTabLink(0, "test", SinglePageExt.class);
 
 
         verify(mock);
@@ -109,16 +107,14 @@
         expect(mock.getModuleLink(anyString(), anyString())).andAnswer(new LinkAnswer("test", BasePage.class));
 
         tabs.add(mock);
-        values.put("tabs", tabs);
-        injector.setValues(values);
+        injector.registerBean("tabs", tabs);
 
         replay(mock);
 
-        WicketTester tester = new WicketTester(application);
         tester.startPage(SecuredPage.class);
 
-        assertTabs(tester, tabs);
-        assertTabLink(tester, 0, "test", BasePage.class, answer.getPageLinks());
+        assertTabs(tabs);
+        assertTabLink(0, "test", BasePage.class, answer.getPageLinks());
 
         tester.assertLabel("topPanel:tabs:0:moduleLinks:0:link:label", "A1");
         tester.assertLabel("topPanel:tabs:0:moduleLinks:1:link:label", "B1");
@@ -163,32 +159,30 @@
         replay(mock);
         tabs.add(mock);
 
-        values.put("tabs", tabs);
-        injector.setValues(values);
+        injector.registerBean("tabs", tabs);
 
-        WicketTester tester = new WicketTester(application);
         tester.startPage(SecuredPage.class);
 
-        assertTabs(tester, tabs);
-        assertTabLink(tester, 0, "test1", BasePage.class);
-        assertTabLink(tester, 1, "test2", SecuredPage.class);
-        assertTabLink(tester, 2, "test3", SinglePage.class);
-        assertTabLink(tester, 3, "test4", SidebarPage.class);
+        assertTabs(tabs);
+        assertTabLink(0, "test1", BasePage.class);
+        assertTabLink(1, "test2", SecuredPage.class);
+        assertTabLink(2, "test3", SinglePage.class);
+        assertTabLink(3, "test4", SidebarPage.class);
 
         verify(mock);
     }
 
     // additional asserts
 
-    private void assertTabs(WicketTester tester, List<ConsoleTabProvider> tabs) {
+    private void assertTabs(List<ConsoleTabProvider> tabs) {
         tester.assertListView("topPanel:tabs", tabs);
     }
 
-    private void assertTabLink(WicketTester tester, int position, String label, Class<? extends WebPage> page) {
-        assertTabLink(tester, position, label, page, Collections.<Link<Page>>emptyList());
+    private void assertTabLink(int position, String label, Class<? extends WebPage> page) {
+        assertTabLink(position, label, page, Collections.<Link<Page>>emptyList());
     }
 
-    private void assertTabLink(WicketTester tester, int position, String label, Class<? extends WebPage> page, List<Link<Page>> children) {
+    private void assertTabLink(int position, String label, Class<? extends WebPage> page, List<Link<Page>> children) {
         tester.assertLabel("topPanel:tabs:" + position + ":moduleLink:moduleLabel", label);
         tester.assertBookmarkablePageLink("topPanel:tabs:" + position + ":moduleLink", page, new PageParameters());
         if (!children.isEmpty()) {
@@ -203,8 +197,10 @@
 
     // Marker interface for tests, normally serialization is controlled by paxwicket
     // as ConsoleTabProviders are OSGi services.
-    interface SerializableConsoleTabProvider extends Serializable, ConsoleTabProvider {}
+    interface SerializableConsoleTabProvider extends Serializable, ConsoleTabProvider {
+    }
 
     @SuppressWarnings("serial")
-    public static class SinglePageExt extends SinglePage {}
+    public static class SinglePageExt extends SinglePage {
+    }
 }