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);