WICKET-5381 Add Wicket.Event.unsubscribe method

Additionally update Grunt configs (copy from master branch) to be able to run 
the tests


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

Branch: refs/heads/wicket-6.x
Commit: a75b8a95b49fede5a8dc2077a205b68e724e868e
Parents: 9a85319
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Mon Sep 30 14:59:30 2013 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Mon Sep 30 14:59:30 2013 +0200

----------------------------------------------------------------------
 Gruntfile.js                                    | 137 +++++++++++++++++++
 grunt.js                                        | 108 ---------------
 package.json                                    |  11 ++
 .../wicket/ajax/res/js/wicket-event-jquery.js   |  19 +++
 wicket-core/src/test/js/ajax.js                 |  14 +-
 wicket-core/src/test/js/event.js                |  67 +++++++++
 6 files changed, 241 insertions(+), 115 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/a75b8a95/Gruntfile.js
----------------------------------------------------------------------
diff --git a/Gruntfile.js b/Gruntfile.js
new file mode 100644
index 0000000..127d429
--- /dev/null
+++ b/Gruntfile.js
@@ -0,0 +1,137 @@
+/*
+ * Grunt.js is a tool for automated JavaScript development
+ * https://github.com/cowboy/grunt
+ *
+ * To use it:
+ * 1) install node.js - http://nodejs.org/#download. This will install 'npm' 
(Node Package Manager) too
+ * 2) install grunt - 'npm -g install grunt-cli'
+ * 3) run: npm install (This will use package.json and install all 
dependencies)
+ * 4.1) grunt jshint - checks all JavaScript files with JSHint
+ * 4.2) grunt jshint:core - checks only the files in wicket-core
+ * 4.3) grunt test - starts a web server and runs all tests (Ajax, non-Ajax 
and AMD)
+ */
+
+ /*global module: true */
+
+module.exports = function(grunt) {
+       "use strict";
+
+       var
+               coreJs = [
+                       
'wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-event-jquery.js',
+                       
'wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery-debug.js',
+                       
'wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js',
+                       
"wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckSelector.js",
+                       
"wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadField.js",
+                       
"wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.js"
+               ],
+               extensionsJs = [
+                       
"wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/progressbar.js",
+                       
"wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/palette.js",
+                       
"wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/res/tree.js",
+                       
"wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js",
+                       
"wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/res/modal.js",
+                       
"wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/wicket-filterform.js"
+               ],
+               datetimeJs = [
+                       
"wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/wicket-date.js"
+               ],
+               nativeWebSocketJs = [
+                       
"wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-jquery.js"
+               ],
+               atmosphereJs = [
+                       
"wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/jquery.wicketatmosphere.js"
+               ],
+               testsJs = [
+                       "./wicket-core/src/test/js/ajax.js",
+                       "./wicket-core/src/test/js/head.js",
+                       "./wicket-core/src/test/js/form.js",
+                       "./wicket-core/src/test/js/dom.js",
+                       "./wicket-core/src/test/js/channels.js",
+                       "./wicket-core/src/test/js/event.js",
+                       "./wicket-core/src/test/js/amd.js"
+               ],
+               gruntJs = [
+                       "Gruntfile.js"
+               ];
+
+       // Project configuration.
+       grunt.initConfig({
+               pkg: grunt.file.readJSON('package.json'),
+
+               jshint: {
+                       core: coreJs,
+                       extensions: extensionsJs,
+                       datetime: datetimeJs,
+                       nativeWebSocket: nativeWebSocketJs,
+                       atmosphere: atmosphereJs,
+                       testsJs: testsJs,
+                       grunt: gruntJs,
+
+                       options: {
+                               "boss": true,
+                               "browser": true,
+                               "curly": true,
+                               "eqnull": true,
+                               "eqeqeq": true,
+                               "expr": true,
+                               "evil": true,
+                               "jquery": true,
+                               "latedef": true,
+                               "noarg": true,
+                               "onevar": false,
+                               "smarttabs": true,
+                               "trailing": true,
+                               "undef": true,
+                               "strict": true,
+                               "predef": [
+                                       "Wicket"
+                               ]
+                       }
+               },
+
+               qunit: {
+                       /*
+                        * Runs all tests (w/ ajax).
+                        * See ajax.js header for details how to setup it.
+                        */
+                       all: {
+                               options: {
+                               urls: 
['http://localhost:38888/test/js/all.html']
+                           }
+                       },
+
+                       /**
+                        * Run Asynchronous module definition tests
+                        */
+                       amd: {
+                               options: {
+                                       urls: 
['http://localhost:38888/test/js/amd.html']
+                               }
+                       },
+
+                       /*
+                        * Runs only local tests (w/o ajax ones).
+                        */
+                       local: ['wicket-core/src/test/js/all.html']
+               },
+
+               connect: {
+                       server: {
+                               options: {
+                                       port: 38888,
+                                       base: './wicket-core/src'
+                               }
+                       }
+               }
+       });
+
+       grunt.loadNpmTasks('grunt-contrib-qunit');
+       grunt.loadNpmTasks('grunt-contrib-jshint');
+
+       // This plugin provides the "connect" task - starts a web server for 
the Ajax tests.
+       grunt.loadNpmTasks('grunt-contrib-connect');
+
+       // A convenient task alias.
+       grunt.registerTask('test', ['connect', 'qunit']);
+};

http://git-wip-us.apache.org/repos/asf/wicket/blob/a75b8a95/grunt.js
----------------------------------------------------------------------
diff --git a/grunt.js b/grunt.js
deleted file mode 100644
index 0fea7d0..0000000
--- a/grunt.js
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Grunt.js is a tool for automated JavaScript development
- * https://github.com/cowboy/grunt
- *
- * To use it:
- * 1) install node.js - http://nodejs.org/#download. This will install 'npm' 
(Node Package Manager) too
- * 2) install phantomjs - http://code.google.com/p/phantomjs/downloads/list
- * 3) install grunt - 'npm -g install grunt'
- * 4) run it: grunt lint, grunt lint:core, grunt qunit, grunt qunit:local
- */
-
- /*global module: true */
-module.exports = function(grunt) {
-       "use strict";
-
-       var
-               coreJs = [
-                       
'wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-event-jquery.js',
-                       
'wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery-debug.js',
-                       
'wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js',
-                       
"wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckSelector.js",
-                       
"wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadField.js",
-                       
"wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.js"
-               ],
-               extensionsJs = [
-                       
"wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/progressbar.js",
-                       
"wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/palette.js",
-                       
"wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tree/res/tree.js",
-                       
"wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js",
-                       
"wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/res/modal.js",
-                       
"wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/wicket-filterform.js"
-               ],
-               datetimeJs = [
-                       
"wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/wicket-date.js"
-               ],
-               nativeWebSocketJs = [
-               
"wicket-experimental/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-jquery.js"
-               ],
-               atmosphereJs = [
-                       
"wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/jquery.wicketatmosphere.js"
-               ],
-               testsJs = [
-                       "./wicket-core/src/test/js/ajax.js",
-                       "./wicket-core/src/test/js/head.js",
-                       "./wicket-core/src/test/js/form.js",
-                       "./wicket-core/src/test/js/dom.js",
-                       "./wicket-core/src/test/js/channels.js",
-                       "./wicket-core/src/test/js/event.js",
-                       "./wicket-core/src/test/js/amd.js"
-               ],
-               gruntJs = [
-                       "grunt.js"
-               ];
-
-       // Project configuration.
-       grunt.initConfig({
-               lint: {
-                       core: coreJs,
-                       extensions: extensionsJs,
-                       datetime: datetimeJs,
-                       nativeWebSocket: nativeWebSocketJs,
-                       atmosphere: atmosphereJs,
-                       testsJs: testsJs,
-                       grunt: gruntJs
-               },
-
-               jshint: {
-                       options: {
-                               "boss": true,
-                               "browser": true,
-                               "curly": true,
-                               "eqnull": true,
-                               "eqeqeq": true,
-                               "expr": true,
-                               "evil": true,
-                               "jquery": true,
-                               "latedef": true,
-                               "noarg": true,
-                               "onevar": false,
-                               "smarttabs": true,
-                               "trailing": true,
-                               "undef": true,
-                               "strict": true,
-                               "predef": [
-                                       "Wicket"
-                               ]
-                       }
-               },
-
-               qunit: {
-                       /*
-                        * Runs all tests (w/ ajax).
-                        * See ajax.js header for details how to setup it.
-                        */
-                       index: ['http://localhost/ajax-tests/test/js/all.html'],
-
-                       /**
-                        * Run Asynchronous module definition tests
-                        */
-                       amd: ['http://localhost/ajax-tests/test/js/amd.html'],
-
-                       /*
-                        * Runs only local tests (w/o ajax ones).
-                        */
-                       local: ['wicket-core/src/test/js/all.html']
-               }
-       });
-};

http://git-wip-us.apache.org/repos/asf/wicket/blob/a75b8a95/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..e934c12
--- /dev/null
+++ b/package.json
@@ -0,0 +1,11 @@
+{
+  "name": "wicket-js-unit-tests",
+  "version": "0.1.0",
+  "devDependencies": {
+    "grunt": "~0.4.1",
+    "grunt-contrib-jshint": "~0.6.4",
+    "grunt-contrib-qunit": "~0.3.0",
+    "grunt-contrib-connect": "~0.5.0",
+    "grunt-contrib-nodeunit": "~0.2.1"
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/a75b8a95/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-event-jquery.js
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-event-jquery.js
 
b/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-event-jquery.js
index 12cb75e..bfe9c28 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-event-jquery.js
+++ 
b/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-event-jquery.js
@@ -177,6 +177,25 @@
                        },
 
                        /**
+                        * Un-subscribes a subscriber from a topic.
+                        * @param topic {String} - the topic name. If omitted 
un-subscribes all
+                        *      subscribers from all topics
+                        * @param subscriber {Function} - the handler to 
un-subscribe. If omitted then
+                        *      all subscribers are removed from this topic
+                        */
+                       unsubscribe: function(topic, subscriber) {
+                               if (topic) {
+                                       if (subscriber) {
+                                               jQuery(document).off(topic, 
subscriber);
+                                       } else {
+                                               jQuery(document).off(topic);
+                                       }
+                               } else {
+                                       jQuery(document).off();
+                               }
+                       },
+
+                       /**
                        * Sends a notification to all subscribers for the given 
topic.
                        * Subscribers for topic '*' receive the actual topic as 
first parameter,
                        * otherwise the topic is not passed to subscribers 
which listen for specific

http://git-wip-us.apache.org/repos/asf/wicket/blob/a75b8a95/wicket-core/src/test/js/ajax.js
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/js/ajax.js b/wicket-core/src/test/js/ajax.js
index 26bc90f..204b170 100644
--- a/wicket-core/src/test/js/ajax.js
+++ b/wicket-core/src/test/js/ajax.js
@@ -69,7 +69,7 @@ jQuery(document).ready(function() {
                module('Wicket.Ajax', {
                        setup: function() {
                                // unsubscribe all global listeners
-                               jQuery(document).off();
+                               Wicket.Event.unsubscribe();
                        }
                });
 
@@ -512,7 +512,7 @@ jQuery(document).ready(function() {
                                equal(attrs.u, attributes.u, 'Complete: attrs');
 
                                // unregister all subscribers
-                               jQuery(document).off();
+                               Wicket.Event.unsubscribe();
                        });
 
                        Wicket.Ajax.ajax(attrs);
@@ -561,7 +561,7 @@ jQuery(document).ready(function() {
                                equal(attrs.u, attributes.u, 'Complete: attrs');
 
                                // unregister all subscribers
-                               jQuery(document).off();
+                               Wicket.Event.unsubscribe();
                        });
 
                        Wicket.Ajax.ajax(attrs);
@@ -661,7 +661,7 @@ jQuery(document).ready(function() {
                                ok(settings.url.indexOf('two=2') > 0, 
'Parameter "two" with value "2" is found');
                                start();
 
-                               jQuery(document).off();
+                               Wicket.Event.unsubscribe();
                });
 
                        Wicket.Ajax.ajax(attrs);
@@ -698,7 +698,7 @@ jQuery(document).ready(function() {
                                ok(settings.data.indexOf('one=dynamic2') > -1, 
'Parameter "one" with value "dynamic2" is found');
                                start();
 
-                               jQuery(document).off();
+                               Wicket.Event.unsubscribe();
                        });
 
                        Wicket.Ajax.ajax(attrs);
@@ -836,7 +836,7 @@ jQuery(document).ready(function() {
 
                                if (attrs.event.extraData.round === 2) {
                                        // unregister all global subscribers
-                                       jQuery(document).off();
+                                       Wicket.Event.unsubscribe();
                                        jQuery(window).off("event1");
 
                                        start();
@@ -943,7 +943,7 @@ jQuery(document).ready(function() {
 
                                if (attrs.event.extraData.round === 2) {
                                        // unregister all global subscribers
-                                       jQuery(document).off();
+                                       Wicket.Event.unsubscribe();
 
                                        jQuery(window).off("event1");
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/a75b8a95/wicket-core/src/test/js/event.js
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/js/event.js b/wicket-core/src/test/js/event.js
index 84b9a74..17dc9ca 100644
--- a/wicket-core/src/test/js/event.js
+++ b/wicket-core/src/test/js/event.js
@@ -218,6 +218,73 @@ jQuery(document).ready(function() {
                Wicket.Event.publish('topicName');
        });
 
+       test('unsubscribe a signle subscriber', function() {
+               expect(2);
+
+               var topic = "someTopicName";
+
+               var subscriber = function() {
+                       ok(true, "The subscriber is notified");
+               };
+
+               Wicket.Event.subscribe(topic, subscriber);
+
+               Wicket.Event.publish(topic);
+
+               Wicket.Event.unsubscribe(topic, subscriber);
+               ok(true, "The subscriber is un-subscribed")
+
+               Wicket.Event.publish(topic);
+       });
+
+       test('unsubscribe all subscribers per topic', function() {
+               expect(3);
+
+               var topic = "someTopicName";
+
+               var subscriber1 = function() {
+                       ok(true, "Subscriber 1 is notified");
+               };
+
+               var subscriber2 = function() {
+                       ok(true, "Subscriber 2 is notified");
+               };
+
+               Wicket.Event.subscribe(topic, subscriber1);
+               Wicket.Event.subscribe(topic, subscriber2);
+
+               Wicket.Event.publish(topic);
+
+               Wicket.Event.unsubscribe(topic);
+               ok(true, "The subscribers are un-subscribed")
+
+               Wicket.Event.publish(topic);
+       });
+
+       test('unsubscribe all subscribers (for all topics)', function() {
+               expect(3);
+
+               var topic = "someTopicName";
+
+               var subscriber1 = function() {
+                       ok(true, "Subscriber 1 is notified");
+               };
+
+               var subscriber2 = function() {
+                       ok(true, "Subscriber 2 is notified");
+               };
+
+               Wicket.Event.subscribe(topic, subscriber1);
+               Wicket.Event.subscribe(topic, subscriber2);
+
+               Wicket.Event.publish(topic);
+
+               Wicket.Event.unsubscribe();
+               ok(true, "The subscribers are un-subscribed")
+
+               Wicket.Event.publish(topic);
+       });
+
        test('all topics', function() {
                expect(8);
 

Reply via email to