You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pa...@apache.org on 2013/10/28 09:46:16 UTC
[09/27] git commit: WICKET-5381 Add Wicket.Event.unsubscribe method
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-4997
Commit: a75b8a95b49fede5a8dc2077a205b68e724e868e
Parents: 9a85319
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Mon Sep 30 14:59:30 2013 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
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);