Updated Branches:
  refs/heads/master ff6a79e51 -> 6e655dacb

WICKET-5423 Create IResource based implementation of Native Web Sockets

Add support for testing WebSocketResource and unit tests


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/6e655dac
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/6e655dac
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/6e655dac

Branch: refs/heads/master
Commit: 6e655dacbd1663d6629e9c5d97749c45636680f1
Parents: ff6a79e
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Thu Nov 21 17:20:04 2013 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Thu Nov 21 17:20:04 2013 +0200

----------------------------------------------------------------------
 .../ws/util/tester/TestWebSocketProcessor.java  |  42 ++++-
 .../ws/util/tester/WebSocketTester.java         |  36 +++-
 .../ws/util/tester/TestWebSocketResource.java   | 104 +++++++++++
 .../util/tester/WebSocketBehaviorTestPage.java  |  83 +++++++++
 .../ws/util/tester/WebSocketTestPage.java       |  83 ---------
 .../tester/WebSocketTesterBehaviorTest.java     | 178 +++++++++++++++++++
 .../tester/WebSocketTesterResourceTest.java     | 142 +++++++++++++++
 .../ws/util/tester/WebSocketTesterTest.java     | 177 ------------------
 8 files changed, 582 insertions(+), 263 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/6e655dac/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
index 0d79e9e..80642a8 100644
--- 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
+++ 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketProcessor.java
@@ -48,6 +48,17 @@ abstract class TestWebSocketProcessor extends 
AbstractWebSocketProcessor
        }
 
        /**
+        * Constructor.
+        *
+        * @param resourceName
+        *      the name of the shared resource that will handle the web socket 
messages
+        */
+       public TestWebSocketProcessor(final WicketTester wicketTester, final 
String resourceName)
+       {
+               super(createRequest(wicketTester, resourceName),  
wicketTester.getApplication());
+       }
+
+       /**
         * Creates an HttpServletRequest that is needed by 
AbstractWebSocketProcessor
         *
         * @param page
@@ -57,14 +68,41 @@ abstract class TestWebSocketProcessor extends 
AbstractWebSocketProcessor
        private static HttpServletRequest createRequest(final WicketTester 
wicketTester, final Page page)
        {
                Args.notNull(page, "page");
-               Application application = page.getApplication();
+               MockHttpServletRequest request = createRequest(wicketTester);
+               request.addParameter("pageId", page.getId());
+               return request;
+       }
+
+       /**
+        * Creates an HttpServletRequest that is needed by 
AbstractWebSocketProcessor
+        *
+        * @param resourceName
+        *      the page that may have registered {@link 
org.apache.wicket.protocol.ws.api.WebSocketBehavior}
+        * @return a mock http request
+        */
+       private static HttpServletRequest createRequest(final WicketTester 
wicketTester, final String resourceName)
+       {
+               Args.notNull(resourceName, "resourceName");
+               MockHttpServletRequest request = createRequest(wicketTester);
+               request.addParameter("resourceName", resourceName);
+               return request;
+       }
+
+       /**
+        * Creates an HttpServletRequest that is needed by 
AbstractWebSocketProcessor
+        *
+        * @return a mock http request
+        */
+       private static MockHttpServletRequest createRequest(final WicketTester 
wicketTester)
+       {
+               Application application = wicketTester.getApplication();
                HttpSession httpSession = wicketTester.getHttpSession();
                MockHttpServletRequest request = new 
MockHttpServletRequest(application, httpSession, null);
-               request.addParameter("pageId", page.getId());
                request.addParameter(WebRequest.PARAM_AJAX_BASE_URL, ".");
                return request;
        }
 
+
        /**
         * Setups TestWebSocketConnection.
         *

http://git-wip-us.apache.org/repos/asf/wicket/blob/6e655dac/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTester.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTester.java
 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTester.java
index 761690b..4f8a9b5 100644
--- 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTester.java
+++ 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTester.java
@@ -47,8 +47,42 @@ public class WebSocketTester
                WebApplication webApplication = wicketTester.getApplication();
                webApplication.getWicketFilter().setFilterPath("");
 
-               socketProcessor = new TestWebSocketProcessor(wicketTester, 
page) {
+               socketProcessor = new TestWebSocketProcessor(wicketTester, page)
+               {
+                       @Override
+                       protected void onOutMessage(String message)
+                       {
+                               WebSocketTester.this.onOutMessage(message);
+                       }
+
+                       @Override
+                       protected void onOutMessage(byte[] message, int offset, 
int length)
+                       {
+                               WebSocketTester.this.onOutMessage(message, 
offset, length);
+                       }
+               };
+               socketProcessor.onOpen(null);
+       }
+
+       /**
+        * Constructor.
+        *
+        * Prepares a WebSockConnection that will be used to send messages from 
the client (the test case)
+        * to the server.
+        *
+        * @param resourceName
+        *      the name of the shared WebSocketResource that will handle the 
web socket messages
+        */
+       public WebSocketTester(final WicketTester wicketTester, final String 
resourceName)
+       {
+               Args.notNull(wicketTester, "wicketTester");
+               Args.notNull(resourceName, "resourceName");
+
+               WebApplication webApplication = wicketTester.getApplication();
+               webApplication.getWicketFilter().setFilterPath("");
 
+               socketProcessor = new TestWebSocketProcessor(wicketTester, 
resourceName)
+               {
                        @Override
                        protected void onOutMessage(String message)
                        {

http://git-wip-us.apache.org/repos/asf/wicket/blob/6e655dac/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketResource.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketResource.java
 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketResource.java
new file mode 100644
index 0000000..2bee3f1
--- /dev/null
+++ 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/TestWebSocketResource.java
@@ -0,0 +1,104 @@
+/*
+ * 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.protocol.ws.util.tester;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.wicket.util.string.Strings;
+import org.junit.Assert;
+import org.apache.wicket.protocol.ws.api.WebSocketRequestHandler;
+import org.apache.wicket.protocol.ws.api.WebSocketResource;
+import org.apache.wicket.protocol.ws.api.message.BinaryMessage;
+import org.apache.wicket.protocol.ws.api.message.ClosedMessage;
+import org.apache.wicket.protocol.ws.api.message.ConnectedMessage;
+import org.apache.wicket.protocol.ws.api.message.TextMessage;
+
+/**
+ *
+ */
+public class TestWebSocketResource extends WebSocketResource
+{
+       static final String TEXT = "TestWebSocketResource-text";
+       static final String BINARY = "TestWebSocketResource-binary";
+
+       static final AtomicBoolean ON_CONNECT_CALLED = new AtomicBoolean(false);
+       static final AtomicBoolean ON_CLOSE_CALLED = new AtomicBoolean(false);
+
+       private final String expectedMessage;
+
+       private final byte[] expectedBinaryMessage;
+       private final int expectedOffset;
+       private final int expectedLength;
+
+       TestWebSocketResource(String expected)
+       {
+               this.expectedMessage = expected;
+
+               this.expectedBinaryMessage = null;
+               this.expectedOffset = -1;
+               this.expectedLength = -1;
+       }
+
+       TestWebSocketResource(byte[] message, int offset, int length)
+       {
+               this.expectedBinaryMessage = message;
+               this.expectedOffset = offset;
+               this.expectedLength = length;
+
+               this.expectedMessage = null;
+       }
+
+       @Override
+       protected void onConnect(ConnectedMessage message)
+       {
+               super.onConnect(message);
+               ON_CONNECT_CALLED.set(true);
+       }
+
+       @Override
+       protected void onClose(ClosedMessage message)
+       {
+               ON_CLOSE_CALLED.set(true);
+               super.onClose(message);
+       }
+
+       @Override
+       protected void onMessage(WebSocketRequestHandler handler, TextMessage 
message)
+       {
+               super.onMessage(handler, message);
+
+               String text = message.getText();
+               Assert.assertEquals(expectedMessage, text);
+               handler.push(Strings.capitalize(text));
+       }
+
+       @Override
+       protected void onMessage(WebSocketRequestHandler handler, BinaryMessage 
binaryMessage)
+       {
+               super.onMessage(handler, binaryMessage);
+
+               byte[] data = binaryMessage.getData();
+               int offset = binaryMessage.getOffset();
+               int length = binaryMessage.getLength();
+
+               Assert.assertEquals(expectedBinaryMessage, data);
+               Assert.assertEquals(expectedOffset, offset);
+               Assert.assertEquals(expectedLength, length);
+
+               handler.push(data, offset, length);
+       }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/6e655dac/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketBehaviorTestPage.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketBehaviorTestPage.java
 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketBehaviorTestPage.java
new file mode 100644
index 0000000..affe977
--- /dev/null
+++ 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketBehaviorTestPage.java
@@ -0,0 +1,83 @@
+/*
+ * 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.protocol.ws.util.tester;
+
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.protocol.ws.api.WebSocketRequestHandler;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.protocol.ws.api.WebSocketBehavior;
+import org.apache.wicket.protocol.ws.api.message.BinaryMessage;
+import org.apache.wicket.protocol.ws.api.message.TextMessage;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.string.Strings;
+import org.junit.Assert;
+
+/**
+ * A page used for {@link WebSocketTesterBehaviorTest}
+ *
+ * @since 6.0
+ */
+class WebSocketBehaviorTestPage extends WebPage implements 
IMarkupResourceStreamProvider
+{
+       WebSocketBehaviorTestPage()
+       {
+               add(new WebSocketBehavior() {});
+       }
+
+       WebSocketBehaviorTestPage(final String expectedMessage)
+       {
+               add(new WebSocketBehavior()
+               {
+                       @Override
+                       protected void onMessage(WebSocketRequestHandler 
handler, TextMessage message)
+                       {
+                               // assert the inbould message
+                               Assert.assertEquals(expectedMessage, 
message.getText());
+                               
+                               // now send an outbound message
+                               
handler.push(Strings.capitalize(expectedMessage));
+                       }
+               });
+       }
+       
+       WebSocketBehaviorTestPage(final byte[] message, final int offset, final 
int length)
+       {
+               add(new WebSocketBehavior()
+               {
+                       @Override
+                       protected void onMessage(WebSocketRequestHandler 
handler, BinaryMessage binaryMessage)
+                       {
+                               Assert.assertArrayEquals(message, 
binaryMessage.getData());
+                               Assert.assertEquals(offset, 
binaryMessage.getOffset());
+                               Assert.assertEquals(length, 
binaryMessage.getLength());
+                               
+                               String msg = new String(message);
+                               byte[] pushedMessage = 
Strings.capitalize(msg).getBytes();
+                               
+                               handler.push(pushedMessage, offset + 1, length 
- 1);
+                       }
+               });
+       }
+
+       @Override
+       public IResourceStream getMarkupResourceStream(MarkupContainer 
container, Class<?> containerClass)
+       {
+               return new StringResourceStream("<html/>");
+       }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/6e655dac/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTestPage.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTestPage.java
 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTestPage.java
deleted file mode 100644
index 39eef88..0000000
--- 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTestPage.java
+++ /dev/null
@@ -1,83 +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.wicket.protocol.ws.util.tester;
-
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.protocol.ws.api.WebSocketRequestHandler;
-import org.apache.wicket.markup.IMarkupResourceStreamProvider;
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.protocol.ws.api.WebSocketBehavior;
-import org.apache.wicket.protocol.ws.api.message.BinaryMessage;
-import org.apache.wicket.protocol.ws.api.message.TextMessage;
-import org.apache.wicket.util.resource.IResourceStream;
-import org.apache.wicket.util.resource.StringResourceStream;
-import org.apache.wicket.util.string.Strings;
-import org.junit.Assert;
-
-/**
- * A page used for {@link WebSocketTesterTest}
- *
- * @since 6.0
- */
-class WebSocketTestPage extends WebPage implements 
IMarkupResourceStreamProvider
-{
-       WebSocketTestPage()
-       {
-               add(new WebSocketBehavior() {});
-       }
-
-       WebSocketTestPage(final String expectedMessage)
-       {
-               add(new WebSocketBehavior()
-               {
-                       @Override
-                       protected void onMessage(WebSocketRequestHandler 
handler, TextMessage message)
-                       {
-                               // assert the inbould message
-                               Assert.assertEquals(expectedMessage, 
message.getText());
-                               
-                               // now send an outbound message
-                               
handler.push(Strings.capitalize(expectedMessage));
-                       }
-               });
-       }
-       
-       WebSocketTestPage(final byte[] message, final int offset, final int 
length)
-       {
-               add(new WebSocketBehavior()
-               {
-                       @Override
-                       protected void onMessage(WebSocketRequestHandler 
handler, BinaryMessage binaryMessage)
-                       {
-                               Assert.assertArrayEquals(message, 
binaryMessage.getData());
-                               Assert.assertEquals(offset, 
binaryMessage.getOffset());
-                               Assert.assertEquals(length, 
binaryMessage.getLength());
-                               
-                               String msg = new String(message);
-                               byte[] pushedMessage = 
Strings.capitalize(msg).getBytes();
-                               
-                               handler.push(pushedMessage, offset + 1, length 
- 1);
-                       }
-               });
-       }
-
-       @Override
-       public IResourceStream getMarkupResourceStream(MarkupContainer 
container, Class<?> containerClass)
-       {
-               return new StringResourceStream("<html/>");
-       }
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/6e655dac/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTesterBehaviorTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTesterBehaviorTest.java
 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTesterBehaviorTest.java
new file mode 100644
index 0000000..ce123cb
--- /dev/null
+++ 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTesterBehaviorTest.java
@@ -0,0 +1,178 @@
+/*
+ * 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.protocol.ws.util.tester;
+
+import java.io.UnsupportedEncodingException;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.wicket.event.IEvent;
+import org.apache.wicket.protocol.ws.IWebSocketSettings;
+import org.apache.wicket.protocol.ws.api.WebSocketPushBroadcaster;
+import org.apache.wicket.protocol.ws.api.event.WebSocketPushPayload;
+import org.apache.wicket.protocol.ws.api.message.ConnectedMessage;
+import org.apache.wicket.protocol.ws.api.message.IWebSocketPushMessage;
+import org.apache.wicket.protocol.ws.api.registry.PageIdKey;
+import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.tester.WicketTester;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests for WebSocketTester.
+ * Uses WebSocketBehavior.
+ *
+ * @since 6.0
+ */
+public class WebSocketTesterBehaviorTest extends Assert
+{
+       WicketTester tester;
+
+       @Before
+       public void before()
+       {
+               tester = new WicketTester();
+       }
+
+       @After
+       public void after()
+       {
+               tester.destroy();
+       }
+
+       /**
+        * A simple test that sends and receives a text message.
+        * The page asserts that it received the correct message and then
+        * pushed back the same message but capitalized.
+        */
+       @Test
+       public void sendTextMessageBehavior()
+       {
+               final String expectedMessage = "some message";
+
+               WebSocketBehaviorTestPage page = new 
WebSocketBehaviorTestPage(expectedMessage);
+               tester.startPage(page);
+
+               WebSocketTester webSocketTester = new WebSocketTester(tester, 
page) {
+                       @Override
+                       protected void onOutMessage(String message)
+                       {
+                               
assertEquals(Strings.capitalize(expectedMessage), message);
+                       }
+               };
+
+               webSocketTester.sendMessage(expectedMessage);
+               webSocketTester.destroy();
+       }
+
+       /**
+        * A simple test that sends and receives a binary message.
+        * The page asserts that it received the correct message, offset and 
lenght and then
+        * pushes back the same message but capitalized, offset plus 1 and 
length minus 1.
+        */
+       @Test
+       public void sendBinaryMessageBehavior() throws 
UnsupportedEncodingException
+       {
+               final byte[] expectedMessage = "some message".getBytes("UTF-8");
+               final int offset = 1;
+               final int length = 2;
+
+               WebSocketBehaviorTestPage page = new 
WebSocketBehaviorTestPage(expectedMessage, offset, length);
+               tester.startPage(page);
+
+               WebSocketTester webSocketTester = new WebSocketTester(tester, 
page) {
+                       @Override
+                       protected void onOutMessage(byte[] message, int off, 
int len)
+                       {
+                               try
+                               {
+                                       String msg = new 
String(expectedMessage);
+                                       byte[] pushedMessage = 
Strings.capitalize(msg).getBytes("UTF-8");
+
+                                       assertArrayEquals(pushedMessage, 
message);
+                                       assertEquals(offset + 1, off);
+                                       assertEquals(length - 1, len);
+
+                               } catch (UnsupportedEncodingException uex)
+                               {
+                                       throw new RuntimeException(uex);
+                               }
+                       }
+               };
+
+               webSocketTester.sendMessage(expectedMessage, offset, length);
+               webSocketTester.destroy();
+       }
+
+       @Test
+       public void serverSideBroadcast()
+       {
+               final String message = "Broadcasted Message";
+
+               final AtomicBoolean messageReceived = new AtomicBoolean(false);
+
+               WebSocketBehaviorTestPage page = new WebSocketBehaviorTestPage()
+               {
+                       @Override
+                       public void onEvent(IEvent<?> event)
+                       {
+                               super.onEvent(event);
+
+                               if (event.getPayload() instanceof 
WebSocketPushPayload)
+                               {
+                                       WebSocketPushPayload payload = 
(WebSocketPushPayload) event.getPayload();
+
+                                       if (payload.getMessage() instanceof 
BroadcastMessage)
+                                       {
+                                               BroadcastMessage 
broadcastMessage = (BroadcastMessage) payload.getMessage();
+                                               if 
(message.equals(broadcastMessage.getText()))
+                                               {
+                                                       
messageReceived.set(true);
+                                               }
+                                       }
+                               }
+                       }
+               };
+               tester.startPage(page);
+               tester.getSession().bind();
+
+               new WebSocketTester(tester, page);
+               IWebSocketSettings webSocketSettings = 
IWebSocketSettings.Holder.get(tester.getApplication());
+               WebSocketPushBroadcaster broadcaster = new 
WebSocketPushBroadcaster(webSocketSettings.getConnectionRegistry());
+               ConnectedMessage wsMessage = new 
ConnectedMessage(tester.getApplication(),
+                               tester.getHttpSession().getId(), new 
PageIdKey(page.getPageId()));
+               broadcaster.broadcast(wsMessage, new BroadcastMessage(message));
+
+               assertEquals(true, messageReceived.get());
+       }
+
+       private static class BroadcastMessage implements IWebSocketPushMessage
+       {
+               private final String message;
+
+               private BroadcastMessage(String message)
+               {
+                       this.message = message;
+               }
+
+               public String getText()
+               {
+                       return message;
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/6e655dac/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTesterResourceTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTesterResourceTest.java
 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTesterResourceTest.java
new file mode 100644
index 0000000..d64c35d
--- /dev/null
+++ 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTesterResourceTest.java
@@ -0,0 +1,142 @@
+/*
+ * 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.protocol.ws.util.tester;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.wicket.mock.MockApplication;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.tester.WicketTester;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests for WebSocketTester.
+ * Uses WebSocketBehavior.
+ *
+ * @since 6.0
+ */
+public class WebSocketTesterResourceTest extends Assert
+{
+       private static final String EXPECTED_TEXT = "expected text";
+       private static final byte[] EXPECTED_BINARY = new byte[] {1, 2, 3};
+       private static final int    EXPECTED_OFFSET = 1;
+       private static final int    EXPECTED_LENGTH = 1;
+
+       private static final AtomicBoolean ON_OUT_TEXT_CALLED = new 
AtomicBoolean(false);
+       private static final AtomicBoolean ON_OUT_BINARY_CALLED = new 
AtomicBoolean(false);
+
+       WicketTester tester;
+
+       @Before
+       public void before()
+       {
+               TestWebSocketResource.ON_CONNECT_CALLED.set(false);
+               TestWebSocketResource.ON_CLOSE_CALLED.set(false);
+               ON_OUT_BINARY_CALLED.set(false);
+               ON_OUT_TEXT_CALLED.set(false);
+
+               WebApplication application = new MockApplication()
+               {
+                       @Override
+                       protected void init()
+                       {
+                               super.init();
+
+                               
getSharedResources().add(TestWebSocketResource.TEXT,
+                                               new 
TestWebSocketResource(EXPECTED_TEXT));
+
+                               
getSharedResources().add(TestWebSocketResource.BINARY,
+                                               new 
TestWebSocketResource(EXPECTED_BINARY, EXPECTED_OFFSET, EXPECTED_LENGTH));
+                       }
+               };
+               tester = new WicketTester(application);
+       }
+
+       @After
+       public void after()
+       {
+               tester.destroy();
+       }
+
+       /**
+        * A simple test that sends and receives a text message.
+        * The page asserts that it received the correct message and then
+        * pushed back the same message but capitalized.
+        */
+       @Test
+       public void sendTextMessage()
+       {
+               assertFalse(TestWebSocketResource.ON_CONNECT_CALLED.get());
+
+               WebSocketTester webSocketTester = new WebSocketTester(tester, 
TestWebSocketResource.TEXT)
+               {
+                       @Override
+                       protected void onOutMessage(String message)
+                       {
+                               ON_OUT_TEXT_CALLED.set(true);
+                               assertEquals(Strings.capitalize(EXPECTED_TEXT), 
message);
+                       }
+               };
+
+               assertTrue(TestWebSocketResource.ON_CONNECT_CALLED.get());
+               assertFalse(ON_OUT_TEXT_CALLED.get());
+
+               webSocketTester.sendMessage(EXPECTED_TEXT);
+               assertTrue(ON_OUT_TEXT_CALLED.get());
+
+               assertFalse(TestWebSocketResource.ON_CLOSE_CALLED.get());
+               webSocketTester.destroy();
+               assertTrue(TestWebSocketResource.ON_CLOSE_CALLED.get());
+       }
+
+       /**
+        * A simple test that sends and receives a text message.
+        * The page asserts that it received the correct message and then
+        * pushed back the same message but capitalized.
+        */
+       @Test
+       public void sendBinaryMessage()
+       {
+               assertFalse(TestWebSocketResource.ON_CONNECT_CALLED.get());
+
+               WebSocketTester webSocketTester = new WebSocketTester(tester, 
TestWebSocketResource.BINARY)
+               {
+                       @Override
+                       protected void onOutMessage(byte[] message, int offset, 
int length)
+                       {
+                               ON_OUT_BINARY_CALLED.set(true);
+                               Assert.assertArrayEquals(EXPECTED_BINARY, 
message);
+                               Assert.assertEquals(offset, offset);
+                               Assert.assertEquals(length, length);
+                       }
+               };
+
+               assertTrue(TestWebSocketResource.ON_CONNECT_CALLED.get());
+               assertFalse(ON_OUT_BINARY_CALLED.get());
+
+               webSocketTester.sendMessage(EXPECTED_BINARY, EXPECTED_OFFSET, 
EXPECTED_LENGTH);
+               assertTrue(ON_OUT_BINARY_CALLED.get());
+
+               assertFalse(TestWebSocketResource.ON_CLOSE_CALLED.get());
+               webSocketTester.destroy();
+               assertTrue(TestWebSocketResource.ON_CLOSE_CALLED.get());
+       }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/6e655dac/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTesterTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTesterTest.java
 
b/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTesterTest.java
deleted file mode 100644
index cb66c0d..0000000
--- 
a/wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/test/java/org/apache/wicket/protocol/ws/util/tester/WebSocketTesterTest.java
+++ /dev/null
@@ -1,177 +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.wicket.protocol.ws.util.tester;
-
-import java.io.UnsupportedEncodingException;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.apache.wicket.event.IEvent;
-import org.apache.wicket.protocol.ws.IWebSocketSettings;
-import org.apache.wicket.protocol.ws.api.WebSocketPushBroadcaster;
-import org.apache.wicket.protocol.ws.api.event.WebSocketPushPayload;
-import org.apache.wicket.protocol.ws.api.message.ConnectedMessage;
-import org.apache.wicket.protocol.ws.api.message.IWebSocketPushMessage;
-import org.apache.wicket.protocol.ws.api.registry.PageIdKey;
-import org.apache.wicket.util.string.Strings;
-import org.apache.wicket.util.tester.WicketTester;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Tests for WebSocketTester.
- *
- * @since 6.0
- */
-public class WebSocketTesterTest extends Assert
-{
-       WicketTester tester;
-
-       @Before
-       public void before()
-       {
-               tester = new WicketTester();
-       }
-
-       @After
-       public void after()
-       {
-               tester.destroy();
-       }
-
-       /**
-        * A simple test that sends and receives a text message.
-        * The page asserts that it received the correct message and then
-        * pushed back the same message but capitalized.
-        */
-       @Test
-       public void sendTextMessage()
-       {
-               final String expectedMessage = "some message";
-
-               WebSocketTestPage page = new WebSocketTestPage(expectedMessage);
-               tester.startPage(page);
-
-               WebSocketTester webSocketTester = new WebSocketTester(tester, 
page) {
-                       @Override
-                       protected void onOutMessage(String message)
-                       {
-                               
assertEquals(Strings.capitalize(expectedMessage), message);
-                       }
-               };
-
-               webSocketTester.sendMessage(expectedMessage);
-               webSocketTester.destroy();
-       }
-
-       /**
-        * A simple test that sends and receives a binary message.
-        * The page asserts that it received the correct message, offset and 
lenght and then
-        * pushes back the same message but capitalized, offset plus 1 and 
length minus 1.
-        */
-       @Test
-       public void sendBinaryMessage() throws UnsupportedEncodingException
-       {
-               final byte[] expectedMessage = "some message".getBytes("UTF-8");
-               final int offset = 1;
-               final int length = 2;
-
-               WebSocketTestPage page = new WebSocketTestPage(expectedMessage, 
offset, length);
-               tester.startPage(page);
-
-               WebSocketTester webSocketTester = new WebSocketTester(tester, 
page) {
-                       @Override
-                       protected void onOutMessage(byte[] message, int off, 
int len)
-                       {
-                               try
-                               {
-                                       String msg = new 
String(expectedMessage);
-                                       byte[] pushedMessage = 
Strings.capitalize(msg).getBytes("UTF-8");
-
-                                       assertArrayEquals(pushedMessage, 
message);
-                                       assertEquals(offset + 1, off);
-                                       assertEquals(length - 1, len);
-
-                               } catch (UnsupportedEncodingException uex)
-                               {
-                                       throw new RuntimeException(uex);
-                               }
-                       }
-               };
-
-               webSocketTester.sendMessage(expectedMessage, offset, length);
-               webSocketTester.destroy();
-       }
-
-       @Test
-       public void serverSideBroadcast()
-       {
-               final String message = "Broadcasted Message";
-
-               final AtomicBoolean messageReceived = new AtomicBoolean(false);
-
-               WebSocketTestPage page = new WebSocketTestPage()
-               {
-                       @Override
-                       public void onEvent(IEvent<?> event)
-                       {
-                               super.onEvent(event);
-
-                               if (event.getPayload() instanceof 
WebSocketPushPayload)
-                               {
-                                       WebSocketPushPayload payload = 
(WebSocketPushPayload) event.getPayload();
-
-                                       if (payload.getMessage() instanceof 
BroadcastMessage)
-                                       {
-                                               BroadcastMessage 
broadcastMessage = (BroadcastMessage) payload.getMessage();
-                                               if 
(message.equals(broadcastMessage.getText()))
-                                               {
-                                                       
messageReceived.set(true);
-                                               }
-                                       }
-                               }
-                       }
-               };
-               tester.startPage(page);
-               tester.getSession().bind();
-
-               new WebSocketTester(tester, page);
-               IWebSocketSettings webSocketSettings = 
IWebSocketSettings.Holder.get(tester.getApplication());
-               WebSocketPushBroadcaster broadcaster = new 
WebSocketPushBroadcaster(webSocketSettings.getConnectionRegistry());
-               ConnectedMessage wsMessage = new 
ConnectedMessage(tester.getApplication(),
-                               tester.getHttpSession().getId(), new 
PageIdKey(page.getPageId()));
-               broadcaster.broadcast(wsMessage, new BroadcastMessage(message));
-
-               assertEquals(true, messageReceived.get());
-       }
-
-       private static class BroadcastMessage implements IWebSocketPushMessage
-       {
-               private final String message;
-
-               private BroadcastMessage(String message)
-               {
-                       this.message = message;
-               }
-
-               public String getText()
-               {
-                       return message;
-               }
-       }
-}

Reply via email to