You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2014/08/15 09:51:11 UTC
[01/17] git commit: WICKET-5452 Make Wicket-Atmosphere testable -
AtmosphereTester
Repository: wicket
Updated Branches:
refs/heads/wicket-6.x 39c2b674a -> 3afcc3b79
WICKET-5452 Make Wicket-Atmosphere testable - AtmosphereTester
Quick and dirty implementation of WicketAtmosphereTester
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/2ab1d798
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/2ab1d798
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/2ab1d798
Branch: refs/heads/wicket-6.x
Commit: 2ab1d798e3348ba7037ab461e1be6df55cd68457
Parents: f0eb015
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue Aug 12 17:08:30 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Aug 15 09:44:12 2014 +0200
----------------------------------------------------------------------
.../wicket/atmosphere/AtmosphereBehavior.java | 18 ++---
.../atmosphere/tester/TesterAsyncSupport.java | 70 ++++++++++++++++
.../atmosphere/tester/TesterEventBus.java | 66 +++++++++++++++
.../tester/WicketAtmosphereTester.java | 76 ++++++++++++++++++
.../atmosphere/AtmosphereApplication.java | 79 ++++++++++++++++++
.../wicket/atmosphere/AtmosphereTest.java | 65 +++++++++++++++
.../apache/wicket/atmosphere/ChatMessage.java | 42 ++++++++++
.../org/apache/wicket/atmosphere/HomePage.html | 24 ++++++
.../org/apache/wicket/atmosphere/HomePage.java | 84 ++++++++++++++++++++
.../wicket/atmosphere/ReceiverFilter.java | 40 ++++++++++
10 files changed, 551 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/2ab1d798/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
index 1d04911..9df55bc 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
@@ -24,7 +24,7 @@ import org.apache.wicket.Page;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.ajax.json.JSONException;
import org.apache.wicket.ajax.json.JSONObject;
-import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.behavior.AbstractAjaxBehavior;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
@@ -49,9 +49,8 @@ import org.slf4j.LoggerFactory;
*
* @author papegaaij
*/
-public class AtmosphereBehavior extends Behavior
+public class AtmosphereBehavior extends AbstractAjaxBehavior
implements
- IResourceListener,
AtmosphereResourceEventListener
{
private static final Logger log = LoggerFactory.getLogger(AtmosphereBehavior.class);
@@ -68,8 +67,6 @@ public class AtmosphereBehavior extends Behavior
private String applicationKey;
- private Component component;
-
/**
* Construct.
@@ -85,12 +82,6 @@ public class AtmosphereBehavior extends Behavior
}
@Override
- public void bind(Component component)
- {
- this.component = component;
- }
-
- @Override
public final boolean getStatelessHint(Component component)
{
return false;
@@ -106,8 +97,9 @@ public class AtmosphereBehavior extends Behavior
{
}
+
@Override
- public void onResourceRequested()
+ public void onRequest()
{
RequestCycle requestCycle = RequestCycle.get();
ServletWebRequest request = (ServletWebRequest)requestCycle.getRequest();
@@ -119,7 +111,7 @@ public class AtmosphereBehavior extends Behavior
meteor.suspend(-1);
String uuid = meteor.getAtmosphereResource().uuid();
- Page page = component.getPage();
+ Page page = getComponent().getPage();
page.setMetaData(ATMOSPHERE_UUID, uuid);
findEventBus().registerPage(uuid, page);
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/2ab1d798/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAsyncSupport.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAsyncSupport.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAsyncSupport.java
new file mode 100644
index 0000000..60a3cc0
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAsyncSupport.java
@@ -0,0 +1,70 @@
+/*
+ * 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.atmosphere.tester;
+
+import java.io.IOException;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+
+import org.atmosphere.cpr.Action;
+import org.atmosphere.cpr.AsyncSupport;
+import org.atmosphere.cpr.AtmosphereRequest;
+import org.atmosphere.cpr.AtmosphereResource;
+import org.atmosphere.cpr.AtmosphereResponse;
+
+/**
+ *
+ */
+public class TesterAsyncSupport<E extends AtmosphereResource> implements AsyncSupport<E>
+{
+ @Override
+ public String getContainerName()
+ {
+ return "wicket-atmosphere-tester";
+ }
+
+ @Override
+ public void init(ServletConfig sc) throws ServletException
+ {
+
+ }
+
+ @Override
+ public Action service(AtmosphereRequest req, AtmosphereResponse res) throws IOException, ServletException
+ {
+ return Action.CONTINUE;
+ }
+
+ @Override
+ public void action(E actionEvent)
+ {
+ System.err.println("TesterEventSupport#action(): " + actionEvent);
+ }
+
+ @Override
+ public boolean supportWebSocket()
+ {
+ return true;
+ }
+
+ @Override
+ public AsyncSupport complete(E r)
+ {
+ return this;
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/2ab1d798/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
new file mode 100644
index 0000000..8f30a37
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
@@ -0,0 +1,66 @@
+/*
+ * 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.atmosphere.tester;
+
+import org.apache.wicket.application.IComponentOnBeforeRenderListener;
+import org.apache.wicket.atmosphere.EventBus;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.atmosphere.cpr.AtmosphereConfig;
+import org.atmosphere.cpr.AtmosphereFramework;
+import org.atmosphere.cpr.BroadcasterLifeCyclePolicy;
+import org.atmosphere.cpr.DefaultBroadcasterFactory;
+import org.atmosphere.util.SimpleBroadcaster;
+
+/**
+ *
+ */
+public class TesterEventBus extends EventBus
+{
+ AtmosphereFramework framework = new AtmosphereFramework();
+ AtmosphereConfig config = new AtmosphereConfig(framework);
+ IComponentOnBeforeRenderListener eventSubscriptionCollector;
+
+ public TesterEventBus(WebApplication application)
+ {
+ super(application, new SimpleBroadcaster());
+
+ framework.setBroadcasterFactory(new TesterBroadcasterFactory(config));
+
+ getBroadcaster().initialize("wicket-atmopshere-tester", config);
+ }
+
+ @Override
+ protected IComponentOnBeforeRenderListener createEventSubscriptionCollector()
+ {
+ eventSubscriptionCollector = super.createEventSubscriptionCollector();
+ return eventSubscriptionCollector;
+ }
+
+ @Override
+ public SimpleBroadcaster getBroadcaster()
+ {
+ return (SimpleBroadcaster) super.getBroadcaster();
+ }
+
+ private static class TesterBroadcasterFactory extends DefaultBroadcasterFactory
+ {
+ protected TesterBroadcasterFactory(AtmosphereConfig c)
+ {
+ super(SimpleBroadcaster.class, BroadcasterLifeCyclePolicy.ATMOSPHERE_RESOURCE_POLICY.NEVER.name(), c);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/2ab1d798/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/WicketAtmosphereTester.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/WicketAtmosphereTester.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/WicketAtmosphereTester.java
new file mode 100644
index 0000000..9ae8ad6
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/WicketAtmosphereTester.java
@@ -0,0 +1,76 @@
+/*
+ * 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.atmosphere.tester;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.atmosphere.AtmosphereBehavior;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.util.tester.WicketTester;
+import org.atmosphere.cpr.AtmosphereRequest;
+import org.atmosphere.cpr.AtmosphereResource;
+import org.atmosphere.cpr.AtmosphereResourceImpl;
+import org.atmosphere.cpr.AtmosphereResponse;
+import org.atmosphere.handler.AtmosphereHandlerAdapter;
+import org.atmosphere.util.SimpleBroadcaster;
+
+/**
+ *
+ */
+public class WicketAtmosphereTester
+{
+ private final TesterEventBus eventBus;
+
+ public WicketAtmosphereTester(final WicketTester wicketTester, Page page)
+ {
+ WebApplication application = wicketTester.getApplication();
+ this.eventBus = new TesterEventBus(application);
+
+ AtmosphereBehavior atmosphereBehavior = new AtmosphereBehavior()
+ {
+ @Override
+ public void onRequest()
+ {
+ SimpleBroadcaster broadcaster = eventBus.getBroadcaster();
+
+ AtmosphereResource atmosphereResource = new AtmosphereResourceImpl();
+ AtmosphereRequest atmosphereRequest = AtmosphereRequest.wrap(wicketTester.getRequest());
+ AtmosphereResponse atmosphereResponse = AtmosphereResponse.wrap(wicketTester.getResponse());
+ TesterAsyncSupport asyncSupport = new TesterAsyncSupport();
+ atmosphereResource.initialize(eventBus.config, broadcaster, atmosphereRequest, atmosphereResponse,
+ asyncSupport, new AtmosphereHandlerAdapter());
+
+ atmosphereResource.setBroadcaster(broadcaster);
+ broadcaster.addAtmosphereResource(atmosphereResource);
+
+ String uuid = atmosphereResource.uuid();
+ Page page = getComponent().getPage();
+ eventBus.eventSubscriptionCollector.onBeforeRender(page);
+ page.setMetaData(ATMOSPHERE_UUID, uuid);
+ eventBus.registerPage(uuid, page);
+ }
+ };
+ page.add(atmosphereBehavior);
+
+ wicketTester.executeBehavior(atmosphereBehavior);
+ }
+
+ public WicketAtmosphereTester post(Object payload)
+ {
+ eventBus.post(payload);
+ return this;
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/2ab1d798/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereApplication.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereApplication.java b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereApplication.java
new file mode 100644
index 0000000..aca6e62
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereApplication.java
@@ -0,0 +1,79 @@
+/*
+ * 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.atmosphere;
+
+import java.util.Date;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.atmosphere.config.AtmosphereLogLevel;
+import org.apache.wicket.atmosphere.config.AtmosphereTransport;
+import org.apache.wicket.protocol.http.WebApplication;
+
+/**
+ * Application object for your web application. If you want to run this application without
+ * deploying, run the Start class.
+ */
+public class AtmosphereApplication extends WebApplication
+{
+ private EventBus eventBus;
+
+ @Override
+ public Class<HomePage> getHomePage()
+ {
+ return HomePage.class;
+ }
+
+ public EventBus getEventBus()
+ {
+ return eventBus;
+ }
+
+ public static AtmosphereApplication get()
+ {
+ return (AtmosphereApplication)Application.get();
+ }
+
+ @Override
+ public void init()
+ {
+ super.init();
+ eventBus = new EventBus(this);
+ eventBus.getParameters().setTransport(AtmosphereTransport.STREAMING);
+ eventBus.getParameters().setLogLevel(AtmosphereLogLevel.DEBUG);
+
+ ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+ final Runnable beeper = new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ try
+ {
+ eventBus.post(new Date());
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+ };
+ scheduler.scheduleWithFixedDelay(beeper, 2, 2, TimeUnit.SECONDS);
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/2ab1d798/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
new file mode 100644
index 0000000..5accac5
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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.atmosphere;
+
+import java.util.Date;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.atmosphere.tester.WicketAtmosphereTester;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.tester.WicketTester;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class AtmosphereTest extends Assert
+{
+ @Test
+ public void aa()
+ {
+ WicketTester tester = new WicketTester();
+ HomePage page = new HomePage(new PageParameters())
+ {
+ @Subscribe
+ public void updateTime(AjaxRequestTarget target, Date event)
+ {
+ super.updateTime(target, event);
+
+ System.err.println("updateTime");
+ }
+
+ @Subscribe(contextAwareFilter = ReceiverFilter.class)
+ public void receiveMessage(AjaxRequestTarget target, ChatMessage message)
+ {
+ super.receiveMessage(target, message);
+
+ System.err.println("receiveMessage");
+ }
+ };
+
+ tester.startPage(page);
+
+ WicketAtmosphereTester waTester = new WicketAtmosphereTester(tester, page);
+
+ Date payload = new Date();
+ waTester.post(payload);
+
+ tester.destroy();
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/2ab1d798/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/ChatMessage.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/ChatMessage.java b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/ChatMessage.java
new file mode 100644
index 0000000..c59039f
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/ChatMessage.java
@@ -0,0 +1,42 @@
+/*
+ * 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.atmosphere;
+
+import java.io.Serializable;
+
+public class ChatMessage implements Serializable
+{
+
+ private String receiver;
+ private String message;
+
+ public ChatMessage(String receiver, String message)
+ {
+ this.receiver = receiver;
+ this.message = message;
+ }
+
+ public String getReceiver()
+ {
+ return receiver;
+ }
+
+ public String getMessage()
+ {
+ return message;
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/2ab1d798/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/HomePage.html
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/HomePage.html b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/HomePage.html
new file mode 100644
index 0000000..a3e4dac
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/HomePage.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html xmlns:wicket="http://wicket.apache.org">
+<head>
+<title>Wicket Examples - atmosphere</title>
+<link rel="stylesheet" type="text/css" href="style.css" />
+</head>
+<body>
+ <p>
+ The current time is (updated every 2 seconds from the server using push): <span wicket:id="time"></span>
+ </p>
+ <p>This page also shows a very simple 'chat' client. Type a message in the
+ second input field and send it to everyone. To send a private message, paste
+ the session id (you can find this in the session cookie) of the receiver in
+ the first input field and send a message.</p>
+ <p>
+ Message received: <span wicket:id="message"></span>
+ </p>
+ <form wicket:id="form">
+ <div>Session id of receiver: <input wicket:id="receiver" /></div>
+ Message: <input wicket:id="input" /> <a href="#" wicket:id="send">Send
+ message</a>
+ </form>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/wicket/blob/2ab1d798/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/HomePage.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/HomePage.java b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/HomePage.java
new file mode 100644
index 0000000..34063c7
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/HomePage.java
@@ -0,0 +1,84 @@
+/*
+ * 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.atmosphere;
+
+import java.util.Date;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class HomePage extends WebPage
+{
+ private static final long serialVersionUID = 1L;
+
+ private Component timeLabel;
+ private Component messageLabel;
+ private TextField<String> receiver;
+ private TextField<String> input;
+
+ public HomePage(final PageParameters parameters)
+ {
+ super(parameters);
+
+ add(timeLabel = new Label("time", Model.of("start")).setOutputMarkupId(true));
+ add(messageLabel = new Label("message", Model.of("-")).setOutputMarkupId(true));
+
+ Form<Void> form = new Form<Void>("form");
+ add(form);
+ form.add(receiver = new TextField<String>("receiver", Model.of("")));
+ form.add(input = new TextField<String>("input", Model.of("")));
+ form.add(new AjaxSubmitLink("send", form)
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void onSubmit(AjaxRequestTarget target, Form<?> form)
+ {
+ EventBus.get().post(
+ new ChatMessage(receiver.getModelObject(), input.getModelObject()));
+ }
+
+ @Override
+ protected void onError(AjaxRequestTarget target, Form<?> form)
+ {
+ }
+ });
+
+ setVersioned(false);
+ }
+
+ @Subscribe
+ public void updateTime(AjaxRequestTarget target, Date event)
+ {
+ timeLabel.setDefaultModelObject(event.toString());
+ target.add(timeLabel);
+ }
+
+ @Subscribe(contextAwareFilter = ReceiverFilter.class)
+ public void receiveMessage(AjaxRequestTarget target, ChatMessage message)
+ {
+ messageLabel.setDefaultModelObject(message.getMessage());
+ target.add(messageLabel);
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/2ab1d798/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/ReceiverFilter.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/ReceiverFilter.java b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/ReceiverFilter.java
new file mode 100644
index 0000000..f035433
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/ReceiverFilter.java
@@ -0,0 +1,40 @@
+/*
+ * 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.atmosphere;
+
+import org.apache.wicket.Session;
+
+import com.google.common.base.Predicate;
+
+public class ReceiverFilter implements Predicate<AtmosphereEvent>
+{
+ public ReceiverFilter()
+ {
+ }
+
+ @Override
+ public boolean apply(AtmosphereEvent input)
+ {
+ if (input.getPayload() instanceof ChatMessage)
+ {
+ ChatMessage msg = (ChatMessage)input.getPayload();
+ return msg.getReceiver() == null || msg.getReceiver().isEmpty() ||
+ msg.getReceiver().equals(Session.get().getId());
+ }
+ return false;
+ }
+}
[06/17] git commit: WICKET-5452 Make Wicket-Atmosphere testable -
AtmosphereTester
Posted by mg...@apache.org.
WICKET-5452 Make Wicket-Atmosphere testable - AtmosphereTester
Pretend being a websocket request when using AtmosphereTester
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/2239d1e1
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/2239d1e1
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/2239d1e1
Branch: refs/heads/wicket-6.x
Commit: 2239d1e17f2a23011709815ba6eedbaf5baf8f5e
Parents: 0b770b0
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Aug 13 12:19:22 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Aug 15 09:45:36 2014 +0200
----------------------------------------------------------------------
.../java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java | 2 ++
.../src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java | 2 +-
2 files changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/2239d1e1/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
index 87b3d69..a0b3e27 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
@@ -24,6 +24,7 @@ import org.atmosphere.cpr.AtmosphereRequest;
import org.atmosphere.cpr.AtmosphereResource;
import org.atmosphere.cpr.AtmosphereResourceImpl;
import org.atmosphere.cpr.AtmosphereResponse;
+import org.atmosphere.cpr.HeaderConfig;
import org.atmosphere.handler.AtmosphereHandlerAdapter;
import org.atmosphere.util.SimpleBroadcaster;
@@ -66,6 +67,7 @@ public class AtmosphereTester
page.add(atmosphereBehavior);
wicketTester.startPage(page);
+ wicketTester.getRequest().setHeader(HeaderConfig.X_ATMOSPHERE_TRANSPORT, AtmosphereResource.TRANSPORT.WEBSOCKET.name());
wicketTester.executeBehavior(atmosphereBehavior);
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/2239d1e1/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
index 1161fd6..9f86cdf 100644
--- a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
+++ b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
@@ -59,7 +59,7 @@ public class AtmosphereTest extends Assert
Date payload = new Date();
waTester.post(payload);
- System.err.println(tester.getLastResponseAsString());
+ System.err.println("Ajax response:\n" + tester.getLastResponseAsString());
tester.destroy();
}
[04/17] git commit: WICKET-5452 Make Wicket-Atmosphere testable -
AtmosphereTester
Posted by mg...@apache.org.
WICKET-5452 Make Wicket-Atmosphere testable - AtmosphereTester
Rename WicketAtmosphereTester to AtmosphereTester
Start the page after configuring AtmosphereTester/TesterEventBus so the method collector is called for all components in the page
Expose TesterBroadcasterFactory as BroadcasterFactory#getDefault()
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/e841383c
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/e841383c
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/e841383c
Branch: refs/heads/wicket-6.x
Commit: e841383c045f62d5feb87413f1aa6f694df8dcb7
Parents: d0751c2
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Aug 13 10:32:46 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Aug 15 09:45:17 2014 +0200
----------------------------------------------------------------------
.../atmosphere/tester/AtmosphereTester.java | 77 ++++++++++++++++++++
.../atmosphere/tester/TesterEventBus.java | 13 +---
.../tester/WicketAtmosphereTester.java | 76 -------------------
.../wicket/atmosphere/AtmosphereTest.java | 8 +-
4 files changed, 84 insertions(+), 90 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/e841383c/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
new file mode 100644
index 0000000..87b3d69
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
@@ -0,0 +1,77 @@
+/*
+ * 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.atmosphere.tester;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.atmosphere.AtmosphereBehavior;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.util.tester.WicketTester;
+import org.atmosphere.cpr.AtmosphereRequest;
+import org.atmosphere.cpr.AtmosphereResource;
+import org.atmosphere.cpr.AtmosphereResourceImpl;
+import org.atmosphere.cpr.AtmosphereResponse;
+import org.atmosphere.handler.AtmosphereHandlerAdapter;
+import org.atmosphere.util.SimpleBroadcaster;
+
+/**
+ *
+ */
+public class AtmosphereTester
+{
+ private final TesterEventBus eventBus;
+
+ public AtmosphereTester(final WicketTester wicketTester, Page page)
+ {
+ WebApplication application = wicketTester.getApplication();
+ this.eventBus = new TesterEventBus(application);
+
+ AtmosphereBehavior atmosphereBehavior = new AtmosphereBehavior()
+ {
+ @Override
+ public void onRequest()
+ {
+ SimpleBroadcaster broadcaster = eventBus.getBroadcaster();
+
+ AtmosphereResource atmosphereResource = new AtmosphereResourceImpl();
+ AtmosphereRequest atmosphereRequest = AtmosphereRequest.wrap(wicketTester.getRequest());
+ AtmosphereResponse atmosphereResponse = AtmosphereResponse.wrap(wicketTester.getResponse());
+ TesterAsyncSupport asyncSupport = new TesterAsyncSupport();
+ atmosphereResource.initialize(eventBus.config, broadcaster, atmosphereRequest, atmosphereResponse,
+ asyncSupport, new AtmosphereHandlerAdapter());
+
+ atmosphereResource.setBroadcaster(broadcaster);
+ broadcaster.addAtmosphereResource(atmosphereResource);
+
+ String uuid = atmosphereResource.uuid();
+ Page page = getComponent().getPage();
+
+ page.setMetaData(ATMOSPHERE_UUID, uuid);
+ eventBus.registerPage(uuid, page);
+ }
+ };
+ page.add(atmosphereBehavior);
+
+ wicketTester.startPage(page);
+ wicketTester.executeBehavior(atmosphereBehavior);
+ }
+
+ public AtmosphereTester post(Object payload)
+ {
+ eventBus.post(payload);
+ return this;
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/e841383c/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
index 8f30a37..8a94f04 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
@@ -32,7 +32,6 @@ public class TesterEventBus extends EventBus
{
AtmosphereFramework framework = new AtmosphereFramework();
AtmosphereConfig config = new AtmosphereConfig(framework);
- IComponentOnBeforeRenderListener eventSubscriptionCollector;
public TesterEventBus(WebApplication application)
{
@@ -40,14 +39,7 @@ public class TesterEventBus extends EventBus
framework.setBroadcasterFactory(new TesterBroadcasterFactory(config));
- getBroadcaster().initialize("wicket-atmopshere-tester", config);
- }
-
- @Override
- protected IComponentOnBeforeRenderListener createEventSubscriptionCollector()
- {
- eventSubscriptionCollector = super.createEventSubscriptionCollector();
- return eventSubscriptionCollector;
+ getBroadcaster().initialize("wicket-atmosphere-tester", config);
}
@Override
@@ -61,6 +53,9 @@ public class TesterEventBus extends EventBus
protected TesterBroadcasterFactory(AtmosphereConfig c)
{
super(SimpleBroadcaster.class, BroadcasterLifeCyclePolicy.ATMOSPHERE_RESOURCE_POLICY.NEVER.name(), c);
+
+ // expose myself as BroadcasterFactory.getDefault();
+ factory = this;
}
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/e841383c/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/WicketAtmosphereTester.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/WicketAtmosphereTester.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/WicketAtmosphereTester.java
deleted file mode 100644
index 9ae8ad6..0000000
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/WicketAtmosphereTester.java
+++ /dev/null
@@ -1,76 +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.atmosphere.tester;
-
-import org.apache.wicket.Page;
-import org.apache.wicket.atmosphere.AtmosphereBehavior;
-import org.apache.wicket.protocol.http.WebApplication;
-import org.apache.wicket.util.tester.WicketTester;
-import org.atmosphere.cpr.AtmosphereRequest;
-import org.atmosphere.cpr.AtmosphereResource;
-import org.atmosphere.cpr.AtmosphereResourceImpl;
-import org.atmosphere.cpr.AtmosphereResponse;
-import org.atmosphere.handler.AtmosphereHandlerAdapter;
-import org.atmosphere.util.SimpleBroadcaster;
-
-/**
- *
- */
-public class WicketAtmosphereTester
-{
- private final TesterEventBus eventBus;
-
- public WicketAtmosphereTester(final WicketTester wicketTester, Page page)
- {
- WebApplication application = wicketTester.getApplication();
- this.eventBus = new TesterEventBus(application);
-
- AtmosphereBehavior atmosphereBehavior = new AtmosphereBehavior()
- {
- @Override
- public void onRequest()
- {
- SimpleBroadcaster broadcaster = eventBus.getBroadcaster();
-
- AtmosphereResource atmosphereResource = new AtmosphereResourceImpl();
- AtmosphereRequest atmosphereRequest = AtmosphereRequest.wrap(wicketTester.getRequest());
- AtmosphereResponse atmosphereResponse = AtmosphereResponse.wrap(wicketTester.getResponse());
- TesterAsyncSupport asyncSupport = new TesterAsyncSupport();
- atmosphereResource.initialize(eventBus.config, broadcaster, atmosphereRequest, atmosphereResponse,
- asyncSupport, new AtmosphereHandlerAdapter());
-
- atmosphereResource.setBroadcaster(broadcaster);
- broadcaster.addAtmosphereResource(atmosphereResource);
-
- String uuid = atmosphereResource.uuid();
- Page page = getComponent().getPage();
- eventBus.eventSubscriptionCollector.onBeforeRender(page);
- page.setMetaData(ATMOSPHERE_UUID, uuid);
- eventBus.registerPage(uuid, page);
- }
- };
- page.add(atmosphereBehavior);
-
- wicketTester.executeBehavior(atmosphereBehavior);
- }
-
- public WicketAtmosphereTester post(Object payload)
- {
- eventBus.post(payload);
- return this;
- }
-}
http://git-wip-us.apache.org/repos/asf/wicket/blob/e841383c/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
index e8a5b30..1161fd6 100644
--- a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
+++ b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
@@ -19,7 +19,7 @@ package org.apache.wicket.atmosphere;
import java.util.Date;
import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.atmosphere.tester.WicketAtmosphereTester;
+import org.apache.wicket.atmosphere.tester.AtmosphereTester;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.tester.WicketTester;
import org.junit.Assert;
@@ -31,7 +31,7 @@ import org.junit.Test;
public class AtmosphereTest extends Assert
{
@Test
- public void aa()
+ public void atmospherePush()
{
WicketTester tester = new WicketTester();
HomePage page = new HomePage(new PageParameters())
@@ -54,9 +54,7 @@ public class AtmosphereTest extends Assert
}
};
- tester.startPage(page);
-
- WicketAtmosphereTester waTester = new WicketAtmosphereTester(tester, page);
+ AtmosphereTester waTester = new AtmosphereTester(tester, page);
Date payload = new Date();
waTester.post(payload);
[12/17] git commit: WICKET-5452 Make Wicket-Atmosphere testable -
AtmosphereTester
Posted by mg...@apache.org.
WICKET-5452 Make Wicket-Atmosphere testable - AtmosphereTester
Reuse the already installed EventBus in MyApp#init. Just set TesterBroadcaster for testing purposes.
Add APIs to make it possible to assert on the suspended (by Atmosphere) http response
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/77d0a46e
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/77d0a46e
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/77d0a46e
Branch: refs/heads/wicket-6.x
Commit: 77d0a46ef018a1bb35282fbb374d9de56ac51c39
Parents: 4a38ae1
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu Aug 14 12:05:00 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Aug 15 09:46:22 2014 +0200
----------------------------------------------------------------------
.../wicket/util/tester/BaseWicketTester.java | 10 +-
.../org/apache/wicket/atmosphere/EventBus.java | 27 ++-
.../atmosphere/tester/AtmosphereTester.java | 183 +++++++++++++++----
.../tester/TesterAtmosphereBehavior.java | 65 +++++++
.../atmosphere/tester/TesterBroadcaster.java | 6 +-
.../atmosphere/tester/TesterEventBus.java | 54 ------
.../wicket/atmosphere/AtmosphereTest.java | 68 -------
.../wicket/atmosphere/AtmosphereTesterTest.java | 108 +++++++++++
8 files changed, 358 insertions(+), 163 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/77d0a46e/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java b/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
index 90285bb..15f0785 100644
--- a/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
+++ b/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
@@ -510,6 +510,14 @@ public class BaseWicketTester
}
/**
+ * @param response
+ */
+ public void setLastResponse(final MockHttpServletResponse response)
+ {
+ this.lastResponse = response;
+ }
+
+ /**
* @return session
*/
public Session getSession()
@@ -788,7 +796,7 @@ public class BaseWicketTester
private void recordRequestResponse()
{
lastRequest = request;
- lastResponse = response;
+ setLastResponse(response);
previousRequests.add(request);
previousResponses.add(response);
http://git-wip-us.apache.org/repos/asf/wicket/blob/77d0a46e/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
index a87a9c5..e60ca01 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
@@ -102,9 +102,16 @@ public class EventBus implements UnboundListener
return eventBus;
}
- private final WebApplication application;
+ /**
+ * @param application
+ * @return {@code true} if there is an installed EventBus to the given application
+ */
+ public static boolean isInstalled(Application application)
+ {
+ return application.getMetaData(EVENT_BUS_KEY) != null;
+ }
- private final Broadcaster broadcaster;
+ private final WebApplication application;
private final Multimap<PageKey, EventSubscription> subscriptions = HashMultimap.create();
@@ -114,6 +121,8 @@ public class EventBus implements UnboundListener
private final AtmosphereParameters parameters = new AtmosphereParameters();
+ private Broadcaster broadcaster;
+
/**
* Creates and registers an {@code EventBus} for the given application. The first broadcaster
* returned by the {@code BroadcasterFactory} is used.
@@ -122,7 +131,7 @@ public class EventBus implements UnboundListener
*/
public EventBus(WebApplication application)
{
- this(application, lookupDefaultBroadcaster());
+ this(application, null);
}
private static Broadcaster lookupDefaultBroadcaster()
@@ -184,7 +193,13 @@ public class EventBus implements UnboundListener
*/
public Broadcaster getBroadcaster()
{
- return broadcaster;
+ return broadcaster != null ? broadcaster : lookupDefaultBroadcaster();
+ }
+
+ public EventBus setBroadcaster(Broadcaster broadcaster)
+ {
+ this.broadcaster = broadcaster;
+ return this;
}
/**
@@ -388,7 +403,7 @@ public class EventBus implements UnboundListener
Collections.unmodifiableCollection(subscriptions.get(key)), new EventFilter(event));
}
if (key == null)
- broadcaster.removeAtmosphereResource(resource);
+ getBroadcaster().removeAtmosphereResource(resource);
else if (!subscriptionsForPage.isEmpty())
post(resource, key, subscriptionsForPage, event);
}
@@ -415,7 +430,7 @@ public class EventBus implements UnboundListener
subscriptionsForPage, event);
Response response = new AtmosphereWebResponse(resource.getResponse());
if (application.createRequestCycle(request, response).processRequestAndDetach())
- broadcaster.broadcast(response.toString(), resource);
+ getBroadcaster().broadcast(response.toString(), resource);
}
@Override
http://git-wip-us.apache.org/repos/asf/wicket/blob/77d0a46e/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
index 91ea64e..eb1cf1b 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
@@ -16,63 +16,182 @@
*/
package org.apache.wicket.atmosphere.tester;
+import java.util.List;
+
import org.apache.wicket.Page;
import org.apache.wicket.atmosphere.AtmosphereBehavior;
+import org.apache.wicket.atmosphere.EventBus;
import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.protocol.http.mock.MockHttpServletResponse;
import org.apache.wicket.util.tester.WicketTester;
-import org.atmosphere.cpr.AtmosphereRequest;
+import org.atmosphere.cpr.AtmosphereConfig;
+import org.atmosphere.cpr.AtmosphereFramework;
import org.atmosphere.cpr.AtmosphereResource;
-import org.atmosphere.cpr.AtmosphereResourceImpl;
-import org.atmosphere.cpr.AtmosphereResponse;
import org.atmosphere.cpr.HeaderConfig;
-import org.atmosphere.handler.AtmosphereHandlerAdapter;
/**
- *
+ * A helper for testing Atmosphere enabled pages
*/
public class AtmosphereTester
{
- private final TesterEventBus eventBus;
+ /**
+ * The EventBus that will be used to post/push messages
+ * to the suspended http response
+ */
+ private final EventBus eventBus;
+
+ private final WicketTester wicketTester;
+
+ /**
+ * The response which will be suspended by Atmosphere and
+ * all pushes/post will go to
+ */
+ private MockHttpServletResponse suspendedResponse;
+ private MockHttpServletResponse lastResponse;
+
+ /**
+ * Constructor.
+ *
+ * @param wicketTester
+ * The testing helper
+ * @param page
+ * The page to test
+ */
public AtmosphereTester(final WicketTester wicketTester, Page page)
{
+ this.wicketTester = wicketTester;
+
WebApplication application = wicketTester.getApplication();
- this.eventBus = new TesterEventBus(application);
- AtmosphereBehavior atmosphereBehavior = new AtmosphereBehavior()
+ TesterBroadcaster broadcaster = createBroadcaster();
+
+ if (EventBus.isInstalled(application))
+ {
+ this.eventBus = EventBus.get(application);
+ this.eventBus.setBroadcaster(broadcaster);
+ }
+ else
{
- @Override
- public void onRequest()
- {
- TesterBroadcaster broadcaster = eventBus.getBroadcaster();
-
- AtmosphereResource atmosphereResource = new AtmosphereResourceImpl();
- AtmosphereRequest atmosphereRequest = AtmosphereRequest.wrap(wicketTester.getRequest());
- AtmosphereResponse atmosphereResponse = AtmosphereResponse.wrap(wicketTester.getResponse());
- TesterAsyncSupport asyncSupport = new TesterAsyncSupport();
- atmosphereResource.initialize(broadcaster.getApplicationConfig(), broadcaster, atmosphereRequest, atmosphereResponse,
- asyncSupport, new AtmosphereHandlerAdapter());
-
- atmosphereResource.setBroadcaster(broadcaster);
- broadcaster.addAtmosphereResource(atmosphereResource);
-
- String uuid = atmosphereResource.uuid();
- Page page = getComponent().getPage();
-
- page.setMetaData(ATMOSPHERE_UUID, uuid);
- eventBus.registerPage(uuid, page);
- }
- };
+ this.eventBus = new EventBus(application, broadcaster);
+ }
+
+ initialize(wicketTester, page);
+ }
+
+ private void initialize(final WicketTester wicketTester, Page page)
+ {
+ // remove any already installed AtmosphereBehaviors on the page
+ List<AtmosphereBehavior> behaviors = page.getBehaviors(AtmosphereBehavior.class);
+ page.remove(behaviors.toArray(new AtmosphereBehavior[behaviors.size()]));
+
+ // install AtmosphereBehavior that doesn't use Meteor
+ AtmosphereBehavior atmosphereBehavior = new TesterAtmosphereBehavior(wicketTester, eventBus);
page.add(atmosphereBehavior);
+ // start the page to collect all @Subscribe methods in the component hierarchy
wicketTester.startPage(page);
+
+ // pretend it is a websocket connection
wicketTester.getRequest().setHeader(HeaderConfig.X_ATMOSPHERE_TRANSPORT, AtmosphereResource.TRANSPORT.WEBSOCKET.name());
+
+ // start the "upgrade" connection
+ suspendedResponse = wicketTester.getResponse();
wicketTester.executeBehavior(atmosphereBehavior);
}
- public AtmosphereTester post(Object payload)
+ private TesterBroadcaster createBroadcaster()
+ {
+ TesterBroadcaster broadcaster = new TesterBroadcaster();
+
+ AtmosphereFramework framework = new AtmosphereFramework();
+ AtmosphereConfig config = new AtmosphereConfig(framework);
+
+ TesterBroadcasterFactory broadcasterFactory = new TesterBroadcasterFactory(config, broadcaster);
+ framework.setBroadcasterFactory(broadcasterFactory);
+
+ broadcaster.initialize("wicket-atmosphere-tester", config);
+
+ return broadcaster;
+ }
+
+ /**
+ * @return The collected so far pushed data in the suspended response
+ */
+ public String getPushedResponse()
{
- eventBus.post(payload);
+ return suspendedResponse != null ? suspendedResponse.getDocument() : null;
+ }
+
+ /**
+ * Resets the suspended response to be empty
+ * @return this instance, for chaining
+ */
+ public AtmosphereTester resetResponse()
+ {
+ if (suspendedResponse != null)
+ {
+ suspendedResponse.reset();
+ }
+ return this;
+ }
+
+ /**
+ * Posts a message to all suspended responses
+ *
+ * @param message
+ * The message to push
+ * @return this instance, for chaining
+ */
+ public AtmosphereTester post(Object message)
+ {
+ eventBus.post(message);
+ return this;
+ }
+
+ /**
+ * Posts a message to the suspended response with the given uuid
+ *
+ * @param message
+ * The message to push
+ * @param resourceUuid
+ * The identifier of the suspended http response
+ * @return this instance, for chaining
+ */
+ public AtmosphereTester post(Object message, String resourceUuid)
+ {
+ eventBus.post(message, resourceUuid);
+ return this;
+ }
+
+ /**
+ * Switches the current <em>lastResponse</em> with the <em>suspendedResponse</em>
+ * so the application test can use WicketTester's assert methods.
+ *
+ * Note: Make sure to call {@linkplain #switchOffTestMode()} later to be able to
+ * assert on non-Atmosphere related responses
+ *
+ * @return this instance, for chaining
+ */
+ public AtmosphereTester switchOnTestMode()
+ {
+ lastResponse = wicketTester.getLastResponse();
+ wicketTester.setLastResponse(suspendedResponse);
+ return this;
+ }
+
+ /**
+ * Sets back the <em>lastResponse</em> with the saved on by {@link #switchOnTestMode()}.
+ *
+ * @return this instance, for chaining
+ */
+ public AtmosphereTester switchOffTestMode()
+ {
+ if (lastResponse != null)
+ {
+ wicketTester.setLastResponse(lastResponse);
+ lastResponse = null;
+ }
return this;
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/77d0a46e/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAtmosphereBehavior.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAtmosphereBehavior.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAtmosphereBehavior.java
new file mode 100644
index 0000000..d6632fe
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAtmosphereBehavior.java
@@ -0,0 +1,65 @@
+/*
+ * 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.atmosphere.tester;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.atmosphere.AtmosphereBehavior;
+import org.apache.wicket.atmosphere.EventBus;
+import org.apache.wicket.util.tester.WicketTester;
+import org.atmosphere.cpr.AtmosphereRequest;
+import org.atmosphere.cpr.AtmosphereResource;
+import org.atmosphere.cpr.AtmosphereResourceImpl;
+import org.atmosphere.cpr.AtmosphereResponse;
+import org.atmosphere.handler.AtmosphereHandlerAdapter;
+
+/**
+ * A specialization that doesn't use Meteor to create AtmosphereResource
+ * but creates it manually by using the WicketTester's http request and response
+ */
+class TesterAtmosphereBehavior extends AtmosphereBehavior
+{
+ private final EventBus eventBus;
+ private final WicketTester wicketTester;
+
+ TesterAtmosphereBehavior(WicketTester wicketTester, EventBus eventBus)
+ {
+ this.wicketTester = wicketTester;
+ this.eventBus = eventBus;
+ }
+
+ @Override
+ public void onRequest()
+ {
+ TesterBroadcaster broadcaster = (TesterBroadcaster) eventBus.getBroadcaster();
+
+ AtmosphereResource atmosphereResource = new AtmosphereResourceImpl();
+ AtmosphereRequest atmosphereRequest = AtmosphereRequest.wrap(wicketTester.getRequest());
+ AtmosphereResponse atmosphereResponse = AtmosphereResponse.wrap(wicketTester.getResponse());
+ TesterAsyncSupport asyncSupport = new TesterAsyncSupport();
+ atmosphereResource.initialize(broadcaster.getApplicationConfig(), broadcaster, atmosphereRequest, atmosphereResponse,
+ asyncSupport, new AtmosphereHandlerAdapter());
+
+ atmosphereResource.setBroadcaster(broadcaster);
+ broadcaster.addAtmosphereResource(atmosphereResource);
+
+ String uuid = atmosphereResource.uuid();
+ Page page = getComponent().getPage();
+
+ page.setMetaData(ATMOSPHERE_UUID, uuid);
+ eventBus.registerPage(uuid, page);
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/77d0a46e/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java
index 4fae2da..7452d6a 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java
@@ -19,6 +19,8 @@ package org.apache.wicket.atmosphere.tester;
import org.atmosphere.cpr.AtmosphereConfig;
import org.atmosphere.cpr.AtmosphereResource;
import org.atmosphere.cpr.AtmosphereResponse;
+import org.atmosphere.cpr.BroadcasterConfig;
+import org.atmosphere.cpr.DefaultBroadcaster;
import org.atmosphere.cpr.Entry;
import org.atmosphere.util.SimpleBroadcaster;
@@ -33,9 +35,9 @@ class TesterBroadcaster extends SimpleBroadcaster
}
@Override
- protected void executeBlockingWrite(AtmosphereResource resource, Entry entry)
+ protected void push(Entry entry)
{
- AtmosphereResponse response = resource.getResponse();
+ AtmosphereResponse response = entry.resource.getResponse();
String message = entry.message.toString();
response.write(message);
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/77d0a46e/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
deleted file mode 100644
index 48e97cb..0000000
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
+++ /dev/null
@@ -1,54 +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.atmosphere.tester;
-
-import org.apache.wicket.atmosphere.EventBus;
-import org.apache.wicket.protocol.http.WebApplication;
-import org.atmosphere.cpr.AtmosphereConfig;
-import org.atmosphere.cpr.AtmosphereFramework;
-
-/**
- *
- */
-class TesterEventBus extends EventBus
-{
- public TesterEventBus(WebApplication application)
- {
- super(application, createBroadcaster());
- }
-
- private static TesterBroadcaster createBroadcaster()
- {
- TesterBroadcaster broadcaster = new TesterBroadcaster();
-
- AtmosphereFramework framework = new AtmosphereFramework();
- AtmosphereConfig config = new AtmosphereConfig(framework);
-
- TesterBroadcasterFactory broadcasterFactory = new TesterBroadcasterFactory(config, broadcaster);
- framework.setBroadcasterFactory(broadcasterFactory);
-
- broadcaster.initialize("wicket-atmosphere-tester", config);
-
- return broadcaster;
- }
-
- @Override
- public TesterBroadcaster getBroadcaster()
- {
- return (TesterBroadcaster) super.getBroadcaster();
- }
-}
http://git-wip-us.apache.org/repos/asf/wicket/blob/77d0a46e/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
deleted file mode 100644
index 368367d..0000000
--- a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
+++ /dev/null
@@ -1,68 +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.atmosphere;
-
-import java.util.Date;
-
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.atmosphere.tester.AtmosphereTester;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.wicket.util.tester.WicketTester;
-import org.junit.Assert;
-import org.junit.Test;
-
-/**
- *
- */
-public class AtmosphereTest extends Assert
-{
- @Test
- public void atmospherePush()
- {
- final String updateTimeIsExecuted = "updateTime is executed!";
-
- WicketTester tester = new WicketTester();
- HomePage page = new HomePage(new PageParameters())
- {
- @Subscribe
- public void updateTime(AjaxRequestTarget target, Date event)
- {
- super.updateTime(target, event);
-
- target.appendJavaScript(updateTimeIsExecuted);
- }
-
- @Subscribe(contextAwareFilter = ReceiverFilter.class)
- public void receiveMessage(AjaxRequestTarget target, ChatMessage message)
- {
- super.receiveMessage(target, message);
-
- System.err.println("receiveMessage");
- }
- };
-
- AtmosphereTester waTester = new AtmosphereTester(tester, page);
-
- Date payload = new Date();
- waTester.post(payload);
-
-// System.err.println("Ajax response:\n" + tester.getLastResponseAsString());
- tester.assertContains(updateTimeIsExecuted);
-
- tester.destroy();
- }
-}
http://git-wip-us.apache.org/repos/asf/wicket/blob/77d0a46e/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTesterTest.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTesterTest.java b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTesterTest.java
new file mode 100644
index 0000000..c8f2773
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTesterTest.java
@@ -0,0 +1,108 @@
+/*
+ * 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.atmosphere;
+
+import static org.hamcrest.CoreMatchers.is;
+
+import java.util.Date;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.atmosphere.tester.AtmosphereTester;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.tester.FormTester;
+import org.apache.wicket.util.tester.WicketTester;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class AtmosphereTesterTest extends Assert
+{
+ final AtomicBoolean updateTimeCalled = new AtomicBoolean(false);
+ final AtomicBoolean receiveMessageCalled = new AtomicBoolean(false);
+
+ @Test
+ public void atmospherePush()
+ {
+ final String updateTimeIsExecuted = "updateTime is executed!";
+
+ WicketTester tester = new WicketTester();
+ HomePage page = new HomePage(new PageParameters())
+ {
+ @Subscribe
+ public void updateTime(AjaxRequestTarget target, Date event)
+ {
+ super.updateTime(target, event);
+
+ updateTimeCalled.set(true);
+
+ target.appendJavaScript(updateTimeIsExecuted);
+ }
+
+ @Subscribe(contextAwareFilter = ReceiverFilter.class)
+ public void receiveMessage(AjaxRequestTarget target, ChatMessage message)
+ {
+ super.receiveMessage(target, message);
+ receiveMessageCalled.set(true);
+ }
+ };
+
+ AtmosphereTester waTester = new AtmosphereTester(tester, page);
+
+ assertThat(updateTimeCalled.get(), is(false));
+ assertThat(receiveMessageCalled.get(), is(false));
+
+ Date payload = new Date();
+ waTester.post(payload);
+
+ assertThat(updateTimeCalled.get(), is(true));
+ assertThat(receiveMessageCalled.get(), is(false));
+
+ tester.assertContains(updateTimeIsExecuted);
+
+ final FormTester form = tester.newFormTester("form");
+
+ form.setValue("input", "Atmosphere rocks!");
+
+ form.submit("send");
+
+ assertThat(updateTimeCalled.get(), is(true));
+ assertThat(receiveMessageCalled.get(), is(true));
+
+ // get the the collected so far content of the suspended response
+ // Note: it may contain several <ajax-response>s.
+ // use waTester.resetResponse() to remove the collected data
+ String atmosphereResponse = waTester.getPushedResponse();
+// System.out.println("RES:" + atmosphereResponse);
+
+ // assert
+ Assert.assertFalse("<?xml version=\"1.0\" encoding=\"UTF-8\"?><ajax-response></ajax-response>"
+ .equals(atmosphereResponse));
+
+ waTester.switchOnTestMode();
+ // now the assertions are against the Atmosphere's suspended response data
+ tester.assertComponentOnAjaxResponse("message");
+ waTester.switchOffTestMode();
+ // now the assertions will be the real last response
+
+ tester.assertLabel("message", "Atmosphere rocks!");
+
+ tester.destroy();
+ }
+}
[05/17] git commit: WICKET-5452 Make Wicket-Atmosphere testable -
AtmosphereTester
Posted by mg...@apache.org.
WICKET-5452 Make Wicket-Atmosphere testable - AtmosphereTester
Fix the callback url to the AtmosphereBehavior. It should be an Ajax one to prevent incrementing of the page id/renderCount
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/0b770b05
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/0b770b05
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/0b770b05
Branch: refs/heads/wicket-6.x
Commit: 0b770b05e0f7b86cbe647a155dfe1a82f1bccc3a
Parents: e841383
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Aug 13 12:18:28 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Aug 15 09:45:29 2014 +0200
----------------------------------------------------------------------
.../wicket/atmosphere/AtmosphereBehavior.java | 21 ++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/0b770b05/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
index f41e91f..35c1ed8 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
@@ -24,13 +24,12 @@ import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.ajax.json.JSONException;
import org.apache.wicket.ajax.json.JSONObject;
import org.apache.wicket.behavior.AbstractAjaxBehavior;
-import org.apache.wicket.behavior.IBehaviorListener;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
import org.apache.wicket.request.cycle.RequestCycle;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.http.WebRequest;
import org.apache.wicket.resource.CoreLibrariesContributor;
import org.atmosphere.cpr.AtmosphereRequest;
import org.atmosphere.cpr.AtmosphereResource;
@@ -196,11 +195,9 @@ public class AtmosphereBehavior extends AbstractAjaxBehavior
response.render(JavaScriptHeaderItem.forReference(JQueryWicketAtmosphereResourceReference.get()));
JSONObject options = findEventBus().getParameters().toJSON();
- options.put("url",
- component.urlFor(this, IBehaviorListener.INTERFACE, new PageParameters())
- .toString());
+ options.put("url", getCallbackUrl());
response.render(OnDomReadyHeaderItem.forScript("$('#" + component.getMarkupId() +
- "').wicketAtmosphere(" + options.toString() + ")"));
+ "').wicketAtmosphere(" + options.toString() + ")"));
}
catch (JSONException e)
{
@@ -209,6 +206,18 @@ public class AtmosphereBehavior extends AbstractAjaxBehavior
}
/**
+ * Make it look like a normal Ajax call so the page id/renderCount are not incremented when Atmosphere makes
+ * the "upgrade" request
+ *
+ * @return the url to this behavior's listener interface
+ */
+ @Override
+ public CharSequence getCallbackUrl()
+ {
+ return super.getCallbackUrl() + "&" + WebRequest.PARAM_AJAX + "=true&" + WebRequest.PARAM_AJAX_BASE_URL + "=.";
+ }
+
+ /**
* Find the Atmosphere UUID for the suspended connection for the given page (if any).
*
* @param page
[13/17] git commit: WICKET-5452 Make Wicket-Atmosphere testable -
AtmosphereTester
Posted by mg...@apache.org.
WICKET-5452 Make Wicket-Atmosphere testable - AtmosphereTester
Fix a typo in javadoc. Use Hamcrest matchers
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/66bff0b1
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/66bff0b1
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/66bff0b1
Branch: refs/heads/wicket-6.x
Commit: 66bff0b1351f6559c6a102250bc5a56bf6cd9069
Parents: 77d0a46
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu Aug 14 12:13:39 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Aug 15 09:46:30 2014 +0200
----------------------------------------------------------------------
.../org/apache/wicket/atmosphere/tester/AtmosphereTester.java | 2 +-
.../org/apache/wicket/atmosphere/AtmosphereTesterTest.java | 6 ++++--
2 files changed, 5 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/66bff0b1/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
index eb1cf1b..eee9b19 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
@@ -181,7 +181,7 @@ public class AtmosphereTester
}
/**
- * Sets back the <em>lastResponse</em> with the saved on by {@link #switchOnTestMode()}.
+ * Sets back the <em>lastResponse</em> with the saved one by {@link #switchOnTestMode()}.
*
* @return this instance, for chaining
*/
http://git-wip-us.apache.org/repos/asf/wicket/blob/66bff0b1/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTesterTest.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTesterTest.java b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTesterTest.java
index c8f2773..0d24910 100644
--- a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTesterTest.java
+++ b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTesterTest.java
@@ -16,7 +16,9 @@
*/
package org.apache.wicket.atmosphere;
+import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
import java.util.Date;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -92,8 +94,8 @@ public class AtmosphereTesterTest extends Assert
// System.out.println("RES:" + atmosphereResponse);
// assert
- Assert.assertFalse("<?xml version=\"1.0\" encoding=\"UTF-8\"?><ajax-response></ajax-response>"
- .equals(atmosphereResponse));
+ assertThat(atmosphereResponse,
+ is(not(equalTo("<?xml version=\"1.0\" encoding=\"UTF-8\"?><ajax-response></ajax-response>"))));
waTester.switchOnTestMode();
// now the assertions are against the Atmosphere's suspended response data
[10/17] git commit: WICKET-5452 Make Wicket-Atmosphere testable -
AtmosphereTester
Posted by mg...@apache.org.
WICKET-5452 Make Wicket-Atmosphere testable - AtmosphereTester
Remove custom executors - they are no needed because of TesterBroadcaster#executeBlockingWrite(AtmosphereResource, Entry)
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/2a52b360
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/2a52b360
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/2a52b360
Branch: refs/heads/wicket-6.x
Commit: 2a52b360bf964a162cf8e76d94ad3d42ae17fd88
Parents: 5513936
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Aug 13 15:57:02 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Aug 15 09:46:05 2014 +0200
----------------------------------------------------------------------
.../wicket/atmosphere/tester/TesterEventBus.java | 14 --------------
1 file changed, 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/2a52b360/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
index be88777..48e97cb 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
@@ -16,14 +16,10 @@
*/
package org.apache.wicket.atmosphere.tester;
-import java.util.concurrent.Executors;
-
import org.apache.wicket.atmosphere.EventBus;
import org.apache.wicket.protocol.http.WebApplication;
import org.atmosphere.cpr.AtmosphereConfig;
import org.atmosphere.cpr.AtmosphereFramework;
-import org.atmosphere.cpr.BroadcasterConfig;
-import org.atmosphere.util.VoidExecutorService;
/**
*
@@ -47,16 +43,6 @@ class TesterEventBus extends EventBus
broadcaster.initialize("wicket-atmosphere-tester", config);
- VoidExecutorService sameThreadExecutorService = new VoidExecutorService();
- BroadcasterConfig broadcasterConfig = new BroadcasterConfig(
- sameThreadExecutorService,
- sameThreadExecutorService,
- Executors.newSingleThreadScheduledExecutor(),
- config, "tester-broadcaster-config");
- broadcaster.setBroadcasterConfig(broadcasterConfig);
- broadcasterConfig.setAsyncWriteService(sameThreadExecutorService);
- broadcasterConfig.setExecutorService(sameThreadExecutorService);
-
return broadcaster;
}
[14/17] git commit: WICKET-5619 ConcurrentModificationException may
occur when calling EventBus.post()
Posted by mg...@apache.org.
WICKET-5619 ConcurrentModificationException may occur when calling EventBus.post()
Use Iterables#filter() as suggested at com.google.common.collect.Collections2#filter
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/78fc5b53
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/78fc5b53
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/78fc5b53
Branch: refs/heads/wicket-6.x
Commit: 78fc5b53eb09a76a2e7f307f2ce5fbbd2c8f6c0a
Parents: 66bff0b
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu Aug 14 13:28:44 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Aug 15 09:48:17 2014 +0200
----------------------------------------------------------------------
.../atmosphere/AtmosphereRequestHandler.java | 9 ++++----
.../wicket/atmosphere/AtmosphereWebRequest.java | 8 +++----
.../org/apache/wicket/atmosphere/EventBus.java | 22 ++++++++++++--------
3 files changed, 22 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/78fc5b53/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
index 8824468..3ba143d 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
@@ -16,7 +16,7 @@
*/
package org.apache.wicket.atmosphere;
-import java.util.Collection;
+import java.util.Iterator;
import org.apache.wicket.Component;
import org.apache.wicket.Page;
@@ -44,7 +44,7 @@ public class AtmosphereRequestHandler implements IRequestHandler
private final AtmosphereEvent event;
- private final Collection<EventSubscription> subscriptions;
+ private final Iterator<EventSubscription> subscriptions;
private final EventSubscriptionInvoker eventSubscriptionInvoker;
@@ -58,7 +58,7 @@ public class AtmosphereRequestHandler implements IRequestHandler
* @param event
* @param eventSubscriptionInvoker
*/
- public AtmosphereRequestHandler(PageKey pageKey, Collection<EventSubscription> subscriptions,
+ public AtmosphereRequestHandler(PageKey pageKey, Iterator<EventSubscription> subscriptions,
AtmosphereEvent event, EventSubscriptionInvoker eventSubscriptionInvoker)
{
this.pageKey = pageKey;
@@ -78,8 +78,9 @@ public class AtmosphereRequestHandler implements IRequestHandler
private void executeHandlers(AjaxRequestTarget target, Page page)
{
- for (EventSubscription curSubscription : subscriptions)
+ while (subscriptions.hasNext())
{
+ EventSubscription curSubscription = subscriptions.next();
if (curSubscription.getContextAwareFilter().apply(event))
{
String componentPath = curSubscription.getComponentPath();
http://git-wip-us.apache.org/repos/asf/wicket/blob/78fc5b53/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebRequest.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebRequest.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebRequest.java
index eb8f5c1..b373983 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebRequest.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereWebRequest.java
@@ -17,7 +17,7 @@
package org.apache.wicket.atmosphere;
import java.nio.charset.Charset;
-import java.util.Collection;
+import java.util.Iterator;
import java.util.List;
import java.util.Locale;
@@ -47,12 +47,12 @@ class AtmosphereWebRequest extends ServletWebRequest
private final PageKey pageKey;
- private final Collection<EventSubscription> subscriptions;
+ private final Iterator<EventSubscription> subscriptions;
private final AtmosphereEvent event;
AtmosphereWebRequest(ServletWebRequest wrappedRequest, PageKey pageKey,
- Collection<EventSubscription> subscriptions, AtmosphereEvent event)
+ Iterator<EventSubscription> subscriptions, AtmosphereEvent event)
{
super(wrappedRequest.getContainerRequest(), wrappedRequest.getFilterPrefix());
this.wrappedRequest = wrappedRequest;
@@ -66,7 +66,7 @@ class AtmosphereWebRequest extends ServletWebRequest
return pageKey;
}
- public Collection<EventSubscription> getSubscriptions()
+ public Iterator<EventSubscription> getSubscriptions()
{
return subscriptions;
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/78fc5b53/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
index e60ca01..6b56d56 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
@@ -17,7 +17,7 @@
package org.apache.wicket.atmosphere;
import java.util.Collection;
-import java.util.Collections;
+import java.util.ConcurrentModificationException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -48,9 +48,9 @@ import org.atmosphere.cpr.BroadcasterFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.collect.Collections2;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
@@ -234,7 +234,7 @@ public class EventBus implements UnboundListener
if (log.isDebugEnabled())
{
log.debug("registered page {} for session {}", pageKey.getPageId(),
- pageKey.getSessionId());
+ pageKey.getSessionId());
}
}
@@ -395,21 +395,25 @@ public class EventBus implements UnboundListener
ThreadContext.detach();
ThreadContext.setApplication(application);
PageKey key;
- Collection<EventSubscription> subscriptionsForPage;
+ Iterable<EventSubscription> subscriptionsForPage;
synchronized (this)
{
key = trackedPages.get(resource.uuid());
- subscriptionsForPage = Collections2.filter(
- Collections.unmodifiableCollection(subscriptions.get(key)), new EventFilter(event));
+ Collection<EventSubscription> eventSubscriptions = subscriptions.get(key);
+ subscriptionsForPage = Iterables.filter(eventSubscriptions, new EventFilter(event));
}
if (key == null)
getBroadcaster().removeAtmosphereResource(resource);
- else if (!subscriptionsForPage.isEmpty())
- post(resource, key, subscriptionsForPage, event);
+ else
+ {
+ Iterator<EventSubscription> iterator = subscriptionsForPage.iterator();
+ if (iterator.hasNext())
+ post(resource, key, iterator, event);
+ }
}
private void post(AtmosphereResource resource, PageKey pageKey,
- Collection<EventSubscription> subscriptionsForPage, AtmosphereEvent event)
+ Iterator<EventSubscription> subscriptionsForPage, AtmosphereEvent event)
{
String filterPath = WebApplication.get()
.getWicketFilter()
[11/17] git commit: WICKET-5452 Make Wicket-Atmosphere testable -
AtmosphereTester
Posted by mg...@apache.org.
WICKET-5452 Make Wicket-Atmosphere testable - AtmosphereTester
Add ASL2 headers
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/4a38ae18
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/4a38ae18
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/4a38ae18
Branch: refs/heads/wicket-6.x
Commit: 4a38ae18cc76534f7fa7ace4a3f19cd44c7e41c0
Parents: 2a52b36
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Aug 13 17:08:08 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Aug 15 09:46:12 2014 +0200
----------------------------------------------------------------------
.../wicket/atmosphere/tester/TesterBroadcaster.java | 16 ++++++++++++++++
.../atmosphere/tester/TesterBroadcasterFactory.java | 16 ++++++++++++++++
2 files changed, 32 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/4a38ae18/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java
index ead9f3c..4fae2da 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java
@@ -1,3 +1,19 @@
+/*
+ * 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.atmosphere.tester;
import org.atmosphere.cpr.AtmosphereConfig;
http://git-wip-us.apache.org/repos/asf/wicket/blob/4a38ae18/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcasterFactory.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcasterFactory.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcasterFactory.java
index d1b5008..ef559c1 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcasterFactory.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcasterFactory.java
@@ -1,3 +1,19 @@
+/*
+ * 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.atmosphere.tester;
import org.atmosphere.cpr.AtmosphereConfig;
[15/17] git commit: WICKET-5371 IllegalArgumentException: Argument
'page' may not be null. - when sending event from asynchronous process
Posted by mg...@apache.org.
WICKET-5371 IllegalArgumentException: Argument 'page' may not be null. - when sending event from asynchronous process
Log a warning and unregister all subscriptions for a page when it is no more in the page stores for any reason
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/1d1b4782
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/1d1b4782
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/1d1b4782
Branch: refs/heads/wicket-6.x
Commit: 1d1b4782dbb9dbc41cec097031f338ad889c0f77
Parents: 78fc5b5
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu Aug 14 15:21:18 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Aug 15 09:48:23 2014 +0200
----------------------------------------------------------------------
.../atmosphere/AtmosphereRequestHandler.java | 18 +++++++++++++++---
.../org/apache/wicket/atmosphere/EventBus.java | 16 ++++++++++++++++
2 files changed, 31 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/1d1b4782/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
index 3ba143d..f19e7e0 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
@@ -20,6 +20,7 @@ import java.util.Iterator;
import org.apache.wicket.Component;
import org.apache.wicket.Page;
+import org.apache.wicket.Session;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.protocol.http.WebApplication;
@@ -71,9 +72,20 @@ public class AtmosphereRequestHandler implements IRequestHandler
public void respond(IRequestCycle requestCycle)
{
WebApplication application = WebApplication.get();
- Page page = (Page)application.getMapperContext().getPageInstance(pageKey.getPageId());
- AjaxRequestTarget target = application.newAjaxRequestTarget(page);
- executeHandlers(target, page);
+ Integer pageId = pageKey.getPageId();
+ Page page = (Page) Session.get().getPageManager().getPage(pageId);
+ if (page != null)
+ {
+ AjaxRequestTarget target = application.newAjaxRequestTarget(page);
+ executeHandlers(target, page);
+ }
+ else
+ {
+ LOGGER.warn("Could not find a page with id '{}' for session with id '{}' in the page stores. It will be unregistered",
+ pageId, pageKey.getSessionId());
+ EventBus.get(application).unregister(pageKey);
+
+ }
}
private void executeHandlers(AjaxRequestTarget target, Page page)
http://git-wip-us.apache.org/repos/asf/wicket/blob/1d1b4782/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
index 6b56d56..253473b 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
@@ -290,6 +290,22 @@ public class EventBus implements UnboundListener
}
/**
+ * Unregisters all {@link EventSubscription}s for the given pageKey.
+ *
+ * @param pageKey
+ * The key with the page id and session id
+ */
+ public synchronized void unregister(PageKey pageKey)
+ {
+ if (log.isDebugEnabled())
+ {
+ log.debug("unregistering all subscriptions for page {} for session {}",
+ pageKey.getPageId(), pageKey.getSessionId());
+ }
+ subscriptions.removeAll(pageKey);
+ }
+
+ /**
* Unregisters all {@link EventSubscription}s for the given component, including the
* subscriptions for its behaviors.
*
[16/17] git commit: WICKET-5371 IllegalArgumentException: Argument
'page' may not be null. - when sending event from asynchronous process
Posted by mg...@apache.org.
WICKET-5371 IllegalArgumentException: Argument 'page' may not be null. - when sending event from asynchronous process
Mark the page as dirty to keep it around in case there is no other usage with it (component added/removed/etc.)
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/50df0c16
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/50df0c16
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/50df0c16
Branch: refs/heads/wicket-6.x
Commit: 50df0c168b956f7ed4ffbb5884b7ab15e2d2ff52
Parents: 1d1b478
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu Aug 14 15:24:54 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Aug 15 09:48:23 2014 +0200
----------------------------------------------------------------------
.../java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/50df0c16/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
index f19e7e0..4fd5f02 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereRequestHandler.java
@@ -76,6 +76,7 @@ public class AtmosphereRequestHandler implements IRequestHandler
Page page = (Page) Session.get().getPageManager().getPage(pageId);
if (page != null)
{
+ page.dirty();
AjaxRequestTarget target = application.newAjaxRequestTarget(page);
executeHandlers(target, page);
}
[17/17] git commit: Merge branch 'wicket-6.x' into
wicket-atmosphere-tester
Posted by mg...@apache.org.
Merge branch 'wicket-6.x' into wicket-atmosphere-tester
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/3afcc3b7
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/3afcc3b7
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/3afcc3b7
Branch: refs/heads/wicket-6.x
Commit: 3afcc3b7924e06761713ad58fce90a5a49c7018b
Parents: 50df0c1 39c2b67
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Fri Aug 15 09:50:17 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Aug 15 09:50:17 2014 +0200
----------------------------------------------------------------------
.../wicket/examples/atmosphere/HomePage.java | 7 ++
.../wicket/atmosphere/AtmosphereBehavior.java | 24 +++++-
.../atmosphere/AtmosphereInternalEvent.java | 88 ++++++++++++++++++++
.../org/apache/wicket/atmosphere/EventBus.java | 37 +++++++-
4 files changed, 154 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/3afcc3b7/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/3afcc3b7/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
----------------------------------------------------------------------
diff --cc wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
index 253473b,d2b96b5..113816d
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
@@@ -121,9 -113,17 +120,19 @@@ public class EventBus implements Unboun
private final AtmosphereParameters parameters = new AtmosphereParameters();
+ private Broadcaster broadcaster;
+
/**
+ * A flag indicating whether to be notified about Atmosphere internal events
+ *
+ * <strong>Caution:</strong>: enabling this may cause a lot of <em>onBroadcast</em> notifications
+ *
+ * @see org.apache.wicket.atmosphere.AtmosphereInternalEvent
+ * @see org.atmosphere.cpr.AtmosphereResourceEventListener
+ */
+ private boolean wantAtmosphereNotifications = false;
+
+ /**
* Creates and registers an {@code EventBus} for the given application. The first broadcaster
* returned by the {@code BroadcasterFactory} is used.
*
[09/17] git commit: WICKET-5452 Make Wicket-Atmosphere testable -
AtmosphereTester
Posted by mg...@apache.org.
WICKET-5452 Make Wicket-Atmosphere testable - AtmosphereTester
Pretend it is WebSocket connection
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/5513936e
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/5513936e
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/5513936e
Branch: refs/heads/wicket-6.x
Commit: 5513936eb4decd56a4ab5be07f499f47ace255ca
Parents: beeb000
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Aug 13 15:07:05 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Aug 15 09:45:58 2014 +0200
----------------------------------------------------------------------
.../java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/5513936e/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
index c5b1cb3..91ea64e 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
@@ -66,7 +66,7 @@ public class AtmosphereTester
page.add(atmosphereBehavior);
wicketTester.startPage(page);
- wicketTester.getRequest().setHeader(HeaderConfig.X_ATMOSPHERE_TRANSPORT, AtmosphereResource.TRANSPORT.LONG_POLLING.name());
+ wicketTester.getRequest().setHeader(HeaderConfig.X_ATMOSPHERE_TRANSPORT, AtmosphereResource.TRANSPORT.WEBSOCKET.name());
wicketTester.executeBehavior(atmosphereBehavior);
}
[08/17] git commit: WICKET-5452 Make Wicket-Atmosphere testable -
AtmosphereTester
Posted by mg...@apache.org.
WICKET-5452 Make Wicket-Atmosphere testable - AtmosphereTester
Make it possible to write to the underlying http response
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/beeb0001
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/beeb0001
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/beeb0001
Branch: refs/heads/wicket-6.x
Commit: beeb0001ac71001c7fddaf519109e73a28649457
Parents: 2524554
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Aug 13 15:04:59 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Aug 15 09:45:50 2014 +0200
----------------------------------------------------------------------
.../atmosphere/tester/AtmosphereTester.java | 7 ++-
.../atmosphere/tester/TesterAsyncSupport.java | 4 +-
.../atmosphere/tester/TesterBroadcaster.java | 26 +++++++++
.../tester/TesterBroadcasterFactory.java | 32 ++++++++++++
.../atmosphere/tester/TesterEventBus.java | 55 +++++++++++---------
.../wicket/atmosphere/AtmosphereTest.java | 8 +--
6 files changed, 98 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/beeb0001/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
index a0b3e27..c5b1cb3 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/AtmosphereTester.java
@@ -26,7 +26,6 @@ import org.atmosphere.cpr.AtmosphereResourceImpl;
import org.atmosphere.cpr.AtmosphereResponse;
import org.atmosphere.cpr.HeaderConfig;
import org.atmosphere.handler.AtmosphereHandlerAdapter;
-import org.atmosphere.util.SimpleBroadcaster;
/**
*
@@ -45,13 +44,13 @@ public class AtmosphereTester
@Override
public void onRequest()
{
- SimpleBroadcaster broadcaster = eventBus.getBroadcaster();
+ TesterBroadcaster broadcaster = eventBus.getBroadcaster();
AtmosphereResource atmosphereResource = new AtmosphereResourceImpl();
AtmosphereRequest atmosphereRequest = AtmosphereRequest.wrap(wicketTester.getRequest());
AtmosphereResponse atmosphereResponse = AtmosphereResponse.wrap(wicketTester.getResponse());
TesterAsyncSupport asyncSupport = new TesterAsyncSupport();
- atmosphereResource.initialize(eventBus.config, broadcaster, atmosphereRequest, atmosphereResponse,
+ atmosphereResource.initialize(broadcaster.getApplicationConfig(), broadcaster, atmosphereRequest, atmosphereResponse,
asyncSupport, new AtmosphereHandlerAdapter());
atmosphereResource.setBroadcaster(broadcaster);
@@ -67,7 +66,7 @@ public class AtmosphereTester
page.add(atmosphereBehavior);
wicketTester.startPage(page);
- wicketTester.getRequest().setHeader(HeaderConfig.X_ATMOSPHERE_TRANSPORT, AtmosphereResource.TRANSPORT.WEBSOCKET.name());
+ wicketTester.getRequest().setHeader(HeaderConfig.X_ATMOSPHERE_TRANSPORT, AtmosphereResource.TRANSPORT.LONG_POLLING.name());
wicketTester.executeBehavior(atmosphereBehavior);
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/beeb0001/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAsyncSupport.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAsyncSupport.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAsyncSupport.java
index 60a3cc0..18bb39c 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAsyncSupport.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterAsyncSupport.java
@@ -30,7 +30,7 @@ import org.atmosphere.cpr.AtmosphereResponse;
/**
*
*/
-public class TesterAsyncSupport<E extends AtmosphereResource> implements AsyncSupport<E>
+class TesterAsyncSupport<E extends AtmosphereResource> implements AsyncSupport<E>
{
@Override
public String getContainerName()
@@ -41,7 +41,6 @@ public class TesterAsyncSupport<E extends AtmosphereResource> implements AsyncSu
@Override
public void init(ServletConfig sc) throws ServletException
{
-
}
@Override
@@ -53,7 +52,6 @@ public class TesterAsyncSupport<E extends AtmosphereResource> implements AsyncSu
@Override
public void action(E actionEvent)
{
- System.err.println("TesterEventSupport#action(): " + actionEvent);
}
@Override
http://git-wip-us.apache.org/repos/asf/wicket/blob/beeb0001/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java
new file mode 100644
index 0000000..ead9f3c
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcaster.java
@@ -0,0 +1,26 @@
+package org.apache.wicket.atmosphere.tester;
+
+import org.atmosphere.cpr.AtmosphereConfig;
+import org.atmosphere.cpr.AtmosphereResource;
+import org.atmosphere.cpr.AtmosphereResponse;
+import org.atmosphere.cpr.Entry;
+import org.atmosphere.util.SimpleBroadcaster;
+
+/**
+ *
+ */
+class TesterBroadcaster extends SimpleBroadcaster
+{
+ public AtmosphereConfig getApplicationConfig()
+ {
+ return config;
+ }
+
+ @Override
+ protected void executeBlockingWrite(AtmosphereResource resource, Entry entry)
+ {
+ AtmosphereResponse response = resource.getResponse();
+ String message = entry.message.toString();
+ response.write(message);
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/beeb0001/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcasterFactory.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcasterFactory.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcasterFactory.java
new file mode 100644
index 0000000..d1b5008
--- /dev/null
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterBroadcasterFactory.java
@@ -0,0 +1,32 @@
+package org.apache.wicket.atmosphere.tester;
+
+import org.atmosphere.cpr.AtmosphereConfig;
+import org.atmosphere.cpr.Broadcaster;
+import org.atmosphere.cpr.BroadcasterLifeCyclePolicy;
+import org.atmosphere.cpr.DefaultBroadcasterFactory;
+import org.atmosphere.util.SimpleBroadcaster;
+
+/**
+*
+*/
+class TesterBroadcasterFactory extends DefaultBroadcasterFactory
+{
+ private final TesterBroadcaster singleBroadcaster;
+
+ TesterBroadcasterFactory(AtmosphereConfig c, TesterBroadcaster broadcaster)
+ {
+ super(SimpleBroadcaster.class, BroadcasterLifeCyclePolicy.ATMOSPHERE_RESOURCE_POLICY.NEVER.name(), c);
+
+ this.singleBroadcaster = broadcaster;
+
+ // expose myself as BroadcasterFactory.getDefault();
+ factory = this;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T extends Broadcaster> T lookup(Class<T> c, Object id, boolean createIfNull, boolean unique)
+ {
+ return (T) singleBroadcaster;
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/beeb0001/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
index 8a94f04..be88777 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/tester/TesterEventBus.java
@@ -16,46 +16,53 @@
*/
package org.apache.wicket.atmosphere.tester;
-import org.apache.wicket.application.IComponentOnBeforeRenderListener;
+import java.util.concurrent.Executors;
+
import org.apache.wicket.atmosphere.EventBus;
import org.apache.wicket.protocol.http.WebApplication;
import org.atmosphere.cpr.AtmosphereConfig;
import org.atmosphere.cpr.AtmosphereFramework;
-import org.atmosphere.cpr.BroadcasterLifeCyclePolicy;
-import org.atmosphere.cpr.DefaultBroadcasterFactory;
-import org.atmosphere.util.SimpleBroadcaster;
+import org.atmosphere.cpr.BroadcasterConfig;
+import org.atmosphere.util.VoidExecutorService;
/**
*
*/
-public class TesterEventBus extends EventBus
+class TesterEventBus extends EventBus
{
- AtmosphereFramework framework = new AtmosphereFramework();
- AtmosphereConfig config = new AtmosphereConfig(framework);
-
public TesterEventBus(WebApplication application)
{
- super(application, new SimpleBroadcaster());
-
- framework.setBroadcasterFactory(new TesterBroadcasterFactory(config));
-
- getBroadcaster().initialize("wicket-atmosphere-tester", config);
+ super(application, createBroadcaster());
}
- @Override
- public SimpleBroadcaster getBroadcaster()
+ private static TesterBroadcaster createBroadcaster()
{
- return (SimpleBroadcaster) super.getBroadcaster();
+ TesterBroadcaster broadcaster = new TesterBroadcaster();
+
+ AtmosphereFramework framework = new AtmosphereFramework();
+ AtmosphereConfig config = new AtmosphereConfig(framework);
+
+ TesterBroadcasterFactory broadcasterFactory = new TesterBroadcasterFactory(config, broadcaster);
+ framework.setBroadcasterFactory(broadcasterFactory);
+
+ broadcaster.initialize("wicket-atmosphere-tester", config);
+
+ VoidExecutorService sameThreadExecutorService = new VoidExecutorService();
+ BroadcasterConfig broadcasterConfig = new BroadcasterConfig(
+ sameThreadExecutorService,
+ sameThreadExecutorService,
+ Executors.newSingleThreadScheduledExecutor(),
+ config, "tester-broadcaster-config");
+ broadcaster.setBroadcasterConfig(broadcasterConfig);
+ broadcasterConfig.setAsyncWriteService(sameThreadExecutorService);
+ broadcasterConfig.setExecutorService(sameThreadExecutorService);
+
+ return broadcaster;
}
- private static class TesterBroadcasterFactory extends DefaultBroadcasterFactory
+ @Override
+ public TesterBroadcaster getBroadcaster()
{
- protected TesterBroadcasterFactory(AtmosphereConfig c)
- {
- super(SimpleBroadcaster.class, BroadcasterLifeCyclePolicy.ATMOSPHERE_RESOURCE_POLICY.NEVER.name(), c);
-
- // expose myself as BroadcasterFactory.getDefault();
- factory = this;
- }
+ return (TesterBroadcaster) super.getBroadcaster();
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/beeb0001/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
index 9f86cdf..368367d 100644
--- a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
+++ b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
@@ -33,6 +33,8 @@ public class AtmosphereTest extends Assert
@Test
public void atmospherePush()
{
+ final String updateTimeIsExecuted = "updateTime is executed!";
+
WicketTester tester = new WicketTester();
HomePage page = new HomePage(new PageParameters())
{
@@ -41,8 +43,7 @@ public class AtmosphereTest extends Assert
{
super.updateTime(target, event);
- System.err.println("updateTime");
- target.appendJavaScript("updateTime is executed");
+ target.appendJavaScript(updateTimeIsExecuted);
}
@Subscribe(contextAwareFilter = ReceiverFilter.class)
@@ -59,7 +60,8 @@ public class AtmosphereTest extends Assert
Date payload = new Date();
waTester.post(payload);
- System.err.println("Ajax response:\n" + tester.getLastResponseAsString());
+// System.err.println("Ajax response:\n" + tester.getLastResponseAsString());
+ tester.assertContains(updateTimeIsExecuted);
tester.destroy();
}
[07/17] git commit: WICKET-5452 Make Wicket-Atmosphere testable -
AtmosphereTester
Posted by mg...@apache.org.
WICKET-5452 Make Wicket-Atmosphere testable - AtmosphereTester
Upgrade Atmosphere to 2.1.8
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/2524554a
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/2524554a
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/2524554a
Branch: refs/heads/wicket-6.x
Commit: 2524554a3b26b63c2f42c895505d3a7638d3edd6
Parents: 2239d1e
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Aug 13 12:42:25 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Aug 15 09:45:43 2014 +0200
----------------------------------------------------------------------
wicket-experimental/wicket-atmosphere/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/2524554a/wicket-experimental/wicket-atmosphere/pom.xml
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/pom.xml b/wicket-experimental/wicket-atmosphere/pom.xml
index 6b257c8..d92b0b5 100644
--- a/wicket-experimental/wicket-atmosphere/pom.xml
+++ b/wicket-experimental/wicket-atmosphere/pom.xml
@@ -27,7 +27,7 @@
<version>0.20-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
- <atmosphere.version>2.1.4</atmosphere.version>
+ <atmosphere.version>2.1.8</atmosphere.version>
</properties>
<name>Wicket-Atmosphere</name>
<description>Wicket-Atmosphere provides integration of the Atmosphere Framework in Wicket.</description>
[03/17] git commit: WICKET-5452 Make Wicket-Atmosphere testable -
AtmosphereTester
Posted by mg...@apache.org.
WICKET-5452 Make Wicket-Atmosphere testable - AtmosphereTester
Fix the atmosphere behavior listener interface's type
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/d0751c2b
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/d0751c2b
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/d0751c2b
Branch: refs/heads/wicket-6.x
Commit: d0751c2b1de861222f4b53fdcc76dc7719c0ff38
Parents: 0582a24
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Aug 13 08:56:21 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Aug 15 09:45:00 2014 +0200
----------------------------------------------------------------------
.../java/org/apache/wicket/atmosphere/AtmosphereBehavior.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/d0751c2b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
index 9a863c8..f41e91f 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
@@ -18,13 +18,13 @@ package org.apache.wicket.atmosphere;
import org.apache.wicket.Application;
import org.apache.wicket.Component;
-import org.apache.wicket.IResourceListener;
import org.apache.wicket.MetaDataKey;
import org.apache.wicket.Page;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.ajax.json.JSONException;
import org.apache.wicket.ajax.json.JSONObject;
import org.apache.wicket.behavior.AbstractAjaxBehavior;
+import org.apache.wicket.behavior.IBehaviorListener;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
@@ -197,7 +197,7 @@ public class AtmosphereBehavior extends AbstractAjaxBehavior
response.render(JavaScriptHeaderItem.forReference(JQueryWicketAtmosphereResourceReference.get()));
JSONObject options = findEventBus().getParameters().toJSON();
options.put("url",
- component.urlFor(this, IResourceListener.INTERFACE, new PageParameters())
+ component.urlFor(this, IBehaviorListener.INTERFACE, new PageParameters())
.toString());
response.render(OnDomReadyHeaderItem.forScript("$('#" + component.getMarkupId() +
"').wicketAtmosphere(" + options.toString() + ")"));
[02/17] git commit: WICKET-5452 Make Wicket-Atmosphere testable -
AtmosphereTester
Posted by mg...@apache.org.
WICKET-5452 Make Wicket-Atmosphere testable - AtmosphereTester
Atmosphere tester - write to the http response (doesn't work)
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/0582a243
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/0582a243
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/0582a243
Branch: refs/heads/wicket-6.x
Commit: 0582a24373b2bcd981f398c39f8cfea85cd08e06
Parents: 2ab1d79
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue Aug 12 17:30:46 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Aug 15 09:44:53 2014 +0200
----------------------------------------------------------------------
.../wicket/atmosphere/AtmosphereBehavior.java | 1 +
.../atmosphere/AtmosphereApplication.java | 79 --------------------
.../wicket/atmosphere/AtmosphereTest.java | 3 +
3 files changed, 4 insertions(+), 79 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/0582a243/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
index 9df55bc..9a863c8 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
@@ -189,6 +189,7 @@ public class AtmosphereBehavior extends AbstractAjaxBehavior
@Override
public void renderHead(Component component, IHeaderResponse response)
{
+ super.renderHead(component, response);
try
{
CoreLibrariesContributor.contributeAjax(component.getApplication(), response);
http://git-wip-us.apache.org/repos/asf/wicket/blob/0582a243/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereApplication.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereApplication.java b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereApplication.java
deleted file mode 100644
index aca6e62..0000000
--- a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereApplication.java
+++ /dev/null
@@ -1,79 +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.atmosphere;
-
-import java.util.Date;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.wicket.Application;
-import org.apache.wicket.atmosphere.config.AtmosphereLogLevel;
-import org.apache.wicket.atmosphere.config.AtmosphereTransport;
-import org.apache.wicket.protocol.http.WebApplication;
-
-/**
- * Application object for your web application. If you want to run this application without
- * deploying, run the Start class.
- */
-public class AtmosphereApplication extends WebApplication
-{
- private EventBus eventBus;
-
- @Override
- public Class<HomePage> getHomePage()
- {
- return HomePage.class;
- }
-
- public EventBus getEventBus()
- {
- return eventBus;
- }
-
- public static AtmosphereApplication get()
- {
- return (AtmosphereApplication)Application.get();
- }
-
- @Override
- public void init()
- {
- super.init();
- eventBus = new EventBus(this);
- eventBus.getParameters().setTransport(AtmosphereTransport.STREAMING);
- eventBus.getParameters().setLogLevel(AtmosphereLogLevel.DEBUG);
-
- ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
- final Runnable beeper = new Runnable()
- {
- @Override
- public void run()
- {
- try
- {
- eventBus.post(new Date());
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- };
- scheduler.scheduleWithFixedDelay(beeper, 2, 2, TimeUnit.SECONDS);
- }
-}
http://git-wip-us.apache.org/repos/asf/wicket/blob/0582a243/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
index 5accac5..e8a5b30 100644
--- a/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
+++ b/wicket-experimental/wicket-atmosphere/src/test/java/org/apache/wicket/atmosphere/AtmosphereTest.java
@@ -42,6 +42,7 @@ public class AtmosphereTest extends Assert
super.updateTime(target, event);
System.err.println("updateTime");
+ target.appendJavaScript("updateTime is executed");
}
@Subscribe(contextAwareFilter = ReceiverFilter.class)
@@ -60,6 +61,8 @@ public class AtmosphereTest extends Assert
Date payload = new Date();
waTester.post(payload);
+ System.err.println(tester.getLastResponseAsString());
+
tester.destroy();
}
}