Repository: tapestry-5 Updated Branches: refs/heads/master 30a66c952 -> e087cad11
TAP5-2100: ZoneRefresh mixin triggers refresh event with wrong context Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/e087cad1 Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/e087cad1 Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/e087cad1 Branch: refs/heads/master Commit: e087cad11d609bc251727be91bf3d523811d541d Parents: 30a66c9 Author: Ivan Khalopik <ikhalo...@gmail.com> Authored: Thu Mar 28 19:40:14 2013 +0300 Committer: Jochen Kemnade <jochen.kemn...@eddyson.de> Committed: Mon Aug 4 10:42:25 2014 +0200 ---------------------------------------------------------------------- .../tapestry5/corelib/mixins/ZoneRefresh.java | 5 ++- tapestry-core/src/test/app1/Index.tml | 4 ++ .../src/test/app1/ZoneRefreshWithContext.tml | 13 ++++++ .../integration/app1/ZoneRefreshTest.java | 21 ++++++++++ .../app1/pages/ZoneRefreshWithContext.java | 44 ++++++++++++++++++++ 5 files changed, 85 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/e087cad1/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/ZoneRefresh.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/ZoneRefresh.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/ZoneRefresh.java index 130f7dc..d2ca6dd 100644 --- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/ZoneRefresh.java +++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/mixins/ZoneRefresh.java @@ -17,6 +17,7 @@ package org.apache.tapestry5.corelib.mixins; import org.apache.tapestry5.BindingConstants; import org.apache.tapestry5.ComponentResources; import org.apache.tapestry5.EventConstants; +import org.apache.tapestry5.EventContext; import org.apache.tapestry5.Link; import org.apache.tapestry5.annotations.AfterRender; import org.apache.tapestry5.annotations.Events; @@ -83,10 +84,10 @@ public class ZoneRefresh javaScriptSupport.require("t5/core/zone-refresh").with(zone.getClientId(), period, link.toString()); } - Object onZoneRefresh() + Object onZoneRefresh(EventContext eventContext) { CaptureResultCallback<Object> callback = new CaptureResultCallback<Object>(); - resources.triggerEvent(EventConstants.REFRESH, context, callback); + resources.triggerContextEvent(EventConstants.REFRESH, eventContext, callback); if (callback.getResult() != null) { http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/e087cad1/tapestry-core/src/test/app1/Index.tml ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/app1/Index.tml b/tapestry-core/src/test/app1/Index.tml index d9a0252..1e7ca79 100644 --- a/tapestry-core/src/test/app1/Index.tml +++ b/tapestry-core/src/test/app1/Index.tml @@ -159,6 +159,10 @@ -- refreshes zone with an event handler returning zone </li> <li> + <a href="ZoneRefreshWithContext">Zone Refresh With Context</a> + -- refreshes zone with a context + </li> + <li> <a href="UnsupportedParameterBlockDemo">Unsupported Parameter Block Demo</a> -- informal block parameter to a component that does not support informal parameters </li> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/e087cad1/tapestry-core/src/test/app1/ZoneRefreshWithContext.tml ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/app1/ZoneRefreshWithContext.tml b/tapestry-core/src/test/app1/ZoneRefreshWithContext.tml new file mode 100644 index 0000000..956daab --- /dev/null +++ b/tapestry-core/src/test/app1/ZoneRefreshWithContext.tml @@ -0,0 +1,13 @@ +<html xmlns:t='http://tapestry.apache.org/schema/tapestry_5_1_0.xsd'> + <head> + </head> + + <body> + Using zone with context : + <span t:type='zone' t:mixins='zonerefresh' t:period='2' t:context='counter' id='zone' t:id='zone'> + ${changed} + </span> + <t:actionlink t:id='link' zone='zone'>Add</t:actionlink> + </body> + +</html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/e087cad1/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/ZoneRefreshTest.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/ZoneRefreshTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/ZoneRefreshTest.java index c18890c..1178fb1 100644 --- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/ZoneRefreshTest.java +++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/ZoneRefreshTest.java @@ -44,6 +44,27 @@ public class ZoneRefreshTest extends App1TestCase checkZoneValues("zone", 3); } + @Test + public void test_if_zone_with_context_works() throws Exception + { + openBaseURL(); + clickAndWait("link=Zone Refresh With Context"); + + // assert that counter value didn't changed + assertText("zone", "false"); + Thread.sleep(2000l); + assertText("zone", "false"); + + // increment counter + click("link=Add"); + waitForAjaxRequestsToComplete(); + + // assert that counter value didn't changed + assertText("zone", "true"); + Thread.sleep(2000l); + assertText("zone", "true"); + } + private void checkZoneValues(String zone, int times) throws Exception { // Wait until Prototype is loaded ... http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/e087cad1/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ZoneRefreshWithContext.java ---------------------------------------------------------------------- diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ZoneRefreshWithContext.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ZoneRefreshWithContext.java new file mode 100644 index 0000000..2af2885 --- /dev/null +++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ZoneRefreshWithContext.java @@ -0,0 +1,44 @@ +// Copyright 2011 The Apache Software Foundation +// +// Licensed 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.tapestry5.integration.app1.pages; + +import org.apache.tapestry5.annotations.Persist; +import org.apache.tapestry5.annotations.Property; + +public class ZoneRefreshWithContext +{ + @Persist + @Property + private int counter; + + @Persist + @Property + private boolean changed; + + void setupRender() + { + counter = 0; + } + + void onRefreshFromZone(int counter) + { + this.changed = this.counter != counter; + } + + void onActionFromLink() + { + this.counter++; + } +} +