[Xmpp4js-commit] SF.net SVN: xmpp4js: [727] trunk/src
Status: Beta
Brought to you by:
h-iverson
From: <h-i...@us...> - 2008-07-07 18:34:38
|
Revision: 727 http://xmpp4js.svn.sourceforge.net/xmpp4js/?rev=727&view=rev Author: h-iverson Date: 2008-07-07 11:34:42 -0700 (Mon, 07 Jul 2008) Log Message: ----------- removed relience on ext.util.observable Modified Paths: -------------- trunk/src/main/javascript/BayeuxXmppClient.js trunk/src/main/javascript/Events.js trunk/src/main/javascript/JabberClient.js trunk/src/main/javascript/PluginManager.js trunk/src/main/javascript/XmppConnection.js trunk/src/main/javascript/chat/Chat.js trunk/src/main/javascript/chat/ChatManager.js trunk/src/main/javascript/ext/ServiceDisco.js trunk/src/main/javascript/muc/MucManager.js trunk/src/main/javascript/muc/MucRoom.js trunk/src/main/javascript/roster/PresenceManager.js trunk/src/main/javascript/roster/RosterItemManager.js trunk/src/main/javascript/transport/Base.js trunk/src/main/javascript/workflow/Login.js trunk/src/main/javascript/workflow/Registration.js trunk/src/test/javascript/DelegateManagerTest.html Added Paths: ----------- trunk/src/test/javascript/EventProviderTest.html Modified: trunk/src/main/javascript/BayeuxXmppClient.js =================================================================== --- trunk/src/main/javascript/BayeuxXmppClient.js 2008-07-07 00:24:29 UTC (rev 726) +++ trunk/src/main/javascript/BayeuxXmppClient.js 2008-07-07 18:34:42 UTC (rev 727) @@ -80,4 +80,4 @@ } -Ext.extend(Xmpp4Js.BayeuxXmppClient , Ext.util.Observable, Xmpp4Js.BayeuxXmppClient .prototype); \ No newline at end of file +Ext.extend(Xmpp4Js.BayeuxXmppClient , Xmpp4Js.Event.EventProvider, Xmpp4Js.BayeuxXmppClient .prototype); \ No newline at end of file Modified: trunk/src/main/javascript/Events.js =================================================================== --- trunk/src/main/javascript/Events.js 2008-07-07 00:24:29 UTC (rev 726) +++ trunk/src/main/javascript/Events.js 2008-07-07 18:34:42 UTC (rev 727) @@ -45,7 +45,8 @@ var fireArgs = arguments; $H(this.map).each(function(pair) { try { - pair.value.apply(pair.value,fireArgs); + // scope doesn't matter, should have been set with bind() + pair.value.apply(null,fireArgs); } catch(e) { // TODO do something } @@ -118,4 +119,111 @@ args.shift(); dm.fire.apply( dm, args ); -} \ No newline at end of file +} + +Ext.namespace( "Xmpp4Js.Event" ); + +// TODO add test +Xmpp4Js.Event.EventProvider = function(config) { + this.eventListenerManager = new EventListenerManager(); + + if( config.listeners ) { + this.on( config.listeners ); + } +} + +Xmpp4Js.Event.EventProvider.prototype = { + addEvents: function(events) { + // do nothing, just here for compat with Observable + if( !this.eventListenerManager ) { + this.eventListenerManager = new EventListenerManager(); + } + }, + + /** + * If doing multiple, should scope and options be passed? doesn't seem likely. + */ + addListener: function(event, listener, scope, options) { + if( typeof event == "object" ) { + for( var e in event ) { + if( e != "scope" && e != "options" ) { + this.addListener( e, event[e], event.scope ? event.scope : undefined, event.options ? event.options : undefined ); + } + } + return; + } + + // if scope is specified, run the listener funciton in that scope + if( scope ) { + listener = listener.bind(scope); + } + + // immediately remove the listener and then call it. + if( options && options["single"] == true ) { + var eventProvider = this; + var originalListener = listener; // prevent recursion + + listener = function() { + eventProvider.removeListener( event, arguments.callee ); // remove this + + originalListener.apply(this, arguments); // use current this and arguments + } + } + + + + this.eventListenerManager.add( event, listener ); + }, + + removeListener: function(event, listener) { + if( typeof event == "object" ) { + for( var e in event ) { + this.removeListener( e, event[e] ); + } + } + + // TODO this code could probably be refactored to eventListenerManager + var removeId; + var delegateMap = this.eventListenerManager.getMap( event ); + for( var id in delegateMap ) { + var delegateListener = delegateMap[id]; + if( delegateListener === listener ) { + removeId = id; + } + } + + this.eventListenerManager.remove( event, id ); + }, + + fireEvent: function(event, args) { + var callArgs = $A(arguments); + callArgs.shift(); // pull off the event + + this.eventListenerManager.fireArgs( event, callArgs ); + }, + + hasListener: function() { + alert( "hasListener not implemented" ); + }, + + purgeListeners: function() { + alert( "hasListener not implemented" ); + }, + + relayEvents: function() { + alert( "relayEvents not implemented" ); + }, + + resumeEvents: function() { + alert( "resumeEvents not implemented" ); + }, + + suspendEvents: function() { + alert( "suspendEvents not implemented" ); + } + + +} + +Xmpp4Js.Event.EventProvider.prototype.on = Xmpp4Js.Event.EventProvider.prototype.addListener; +Xmpp4Js.Event.EventProvider.prototype.un = Xmpp4Js.Event.EventProvider.prototype.removeListener; \ No newline at end of file Modified: trunk/src/main/javascript/JabberClient.js =================================================================== --- trunk/src/main/javascript/JabberClient.js 2008-07-07 00:24:29 UTC (rev 726) +++ trunk/src/main/javascript/JabberClient.js 2008-07-07 18:34:42 UTC (rev 727) @@ -622,7 +622,7 @@ } } -Ext.extend(Xmpp4Js.JabberConnection, Ext.util.Observable, Xmpp4Js.JabberConnection.prototype); +Ext.extend(Xmpp4Js.JabberConnection, Xmpp4Js.Event.EventProvider, Xmpp4Js.JabberConnection.prototype); /** * @constructor Modified: trunk/src/main/javascript/PluginManager.js =================================================================== --- trunk/src/main/javascript/PluginManager.js 2008-07-07 00:24:29 UTC (rev 726) +++ trunk/src/main/javascript/PluginManager.js 2008-07-07 18:34:42 UTC (rev 727) @@ -92,7 +92,7 @@ } } -Ext.extend( PluginManager, Ext.util.Observable, PluginManager.prototype ); +Ext.extend( PluginManager, Xmpp4Js.Event.EventProvider, PluginManager.prototype ); Modified: trunk/src/main/javascript/XmppConnection.js =================================================================== --- trunk/src/main/javascript/XmppConnection.js 2008-07-07 00:24:29 UTC (rev 726) +++ trunk/src/main/javascript/XmppConnection.js 2008-07-07 18:34:42 UTC (rev 727) @@ -264,5 +264,5 @@ } } -Ext.extend( Xmpp4Js.Connection, Ext.util.Observable, Xmpp4Js.Connection.prototype ); +Ext.extend( Xmpp4Js.Connection, Xmpp4Js.Event.EventProvider, Xmpp4Js.Connection.prototype ); Modified: trunk/src/main/javascript/chat/Chat.js =================================================================== --- trunk/src/main/javascript/chat/Chat.js 2008-07-07 00:24:29 UTC (rev 726) +++ trunk/src/main/javascript/chat/Chat.js 2008-07-07 18:34:42 UTC (rev 727) @@ -137,4 +137,4 @@ } }; -Ext.extend(Xmpp4Js.Chat.Chat, Ext.util.Observable, Xmpp4Js.Chat.Chat.prototype); +Ext.extend(Xmpp4Js.Chat.Chat, Xmpp4Js.Event.EventProvider, Xmpp4Js.Chat.Chat.prototype); Modified: trunk/src/main/javascript/chat/ChatManager.js =================================================================== --- trunk/src/main/javascript/chat/ChatManager.js 2008-07-07 00:24:29 UTC (rev 726) +++ trunk/src/main/javascript/chat/ChatManager.js 2008-07-07 18:34:42 UTC (rev 727) @@ -240,4 +240,4 @@ }; -Ext.extend(Xmpp4Js.Chat.ChatManager, Ext.util.Observable, Xmpp4Js.Chat.ChatManager.prototype); \ No newline at end of file +Ext.extend(Xmpp4Js.Chat.ChatManager, Xmpp4Js.Event.EventProvider, Xmpp4Js.Chat.ChatManager.prototype); \ No newline at end of file Modified: trunk/src/main/javascript/ext/ServiceDisco.js =================================================================== --- trunk/src/main/javascript/ext/ServiceDisco.js 2008-07-07 00:24:29 UTC (rev 726) +++ trunk/src/main/javascript/ext/ServiceDisco.js 2008-07-07 18:34:42 UTC (rev 727) @@ -271,7 +271,7 @@ return instances[con.id]; }; -Ext.extend( ServiceDiscoManager, Ext.util.Observable, ServiceDiscoManager.prototype ); +Ext.extend( ServiceDiscoManager, Xmpp4Js.Event.EventProvider, ServiceDiscoManager.prototype ); Modified: trunk/src/main/javascript/muc/MucManager.js =================================================================== --- trunk/src/main/javascript/muc/MucManager.js 2008-07-07 00:24:29 UTC (rev 726) +++ trunk/src/main/javascript/muc/MucManager.js 2008-07-07 18:34:42 UTC (rev 727) @@ -73,4 +73,4 @@ } } -Ext.extend( Xmpp4Js.Muc.MucManager, Ext.util.Observable, Xmpp4Js.Muc.MucManager.prototype); \ No newline at end of file +Ext.extend( Xmpp4Js.Muc.MucManager, Xmpp4Js.Event.EventProvider, Xmpp4Js.Muc.MucManager.prototype); \ No newline at end of file Modified: trunk/src/main/javascript/muc/MucRoom.js =================================================================== --- trunk/src/main/javascript/muc/MucRoom.js 2008-07-07 00:24:29 UTC (rev 726) +++ trunk/src/main/javascript/muc/MucRoom.js 2008-07-07 18:34:42 UTC (rev 727) @@ -24,4 +24,4 @@ } } -Ext.extend( Xmpp4Js.Muc.MucRoom, Ext.util.Observable, Xmpp4Js.Muc.MucRoom.prototype); \ No newline at end of file +Ext.extend( Xmpp4Js.Muc.MucRoom, Xmpp4Js.Event.EventProvider, Xmpp4Js.Muc.MucRoom.prototype); \ No newline at end of file Modified: trunk/src/main/javascript/roster/PresenceManager.js =================================================================== --- trunk/src/main/javascript/roster/PresenceManager.js 2008-07-07 00:24:29 UTC (rev 726) +++ trunk/src/main/javascript/roster/PresenceManager.js 2008-07-07 18:34:42 UTC (rev 727) @@ -116,7 +116,7 @@ } } -Ext.extend(Xmpp4Js.Roster.PresenceManager, Ext.util.Observable, Xmpp4Js.Roster.PresenceManager.prototype); +Ext.extend(Xmpp4Js.Roster.PresenceManager, Xmpp4Js.Event.EventProvider, Xmpp4Js.Roster.PresenceManager.prototype); Modified: trunk/src/main/javascript/roster/RosterItemManager.js =================================================================== --- trunk/src/main/javascript/roster/RosterItemManager.js 2008-07-07 00:24:29 UTC (rev 726) +++ trunk/src/main/javascript/roster/RosterItemManager.js 2008-07-07 18:34:42 UTC (rev 727) @@ -214,4 +214,4 @@ } } -Ext.extend( Xmpp4Js.Roster.RosterItemManager, Ext.util.Observable, Xmpp4Js.Roster.RosterItemManager.prototype); +Ext.extend( Xmpp4Js.Roster.RosterItemManager, Xmpp4Js.Event.EventProvider, Xmpp4Js.Roster.RosterItemManager.prototype); Modified: trunk/src/main/javascript/transport/Base.js =================================================================== --- trunk/src/main/javascript/transport/Base.js 2008-07-07 00:24:29 UTC (rev 726) +++ trunk/src/main/javascript/transport/Base.js 2008-07-07 18:34:42 UTC (rev 727) @@ -483,4 +483,4 @@ } } -Ext.extend( Xmpp4Js.Transport.Base, Ext.util.Observable, Xmpp4Js.Transport.Base.prototype ); +Ext.extend( Xmpp4Js.Transport.Base, Xmpp4Js.Event.EventProvider, Xmpp4Js.Transport.Base.prototype ); Modified: trunk/src/main/javascript/workflow/Login.js =================================================================== --- trunk/src/main/javascript/workflow/Login.js 2008-07-07 00:24:29 UTC (rev 726) +++ trunk/src/main/javascript/workflow/Login.js 2008-07-07 18:34:42 UTC (rev 727) @@ -94,4 +94,4 @@ } }; -Ext.extend( Xmpp4Js.Workflow.Login, Ext.util.Observable, Xmpp4Js.Workflow.Login.prototype ); \ No newline at end of file +Ext.extend( Xmpp4Js.Workflow.Login, Xmpp4Js.Event.EventProvider, Xmpp4Js.Workflow.Login.prototype ); \ No newline at end of file Modified: trunk/src/main/javascript/workflow/Registration.js =================================================================== --- trunk/src/main/javascript/workflow/Registration.js 2008-07-07 00:24:29 UTC (rev 726) +++ trunk/src/main/javascript/workflow/Registration.js 2008-07-07 18:34:42 UTC (rev 727) @@ -67,4 +67,4 @@ } }; -Ext.extend( Xmpp4Js.Workflow.Registration, Ext.util.Observable, Xmpp4Js.Workflow.Registration.prototype ); \ No newline at end of file +Ext.extend( Xmpp4Js.Workflow.Registration, Xmpp4Js.Event.EventProvider, Xmpp4Js.Workflow.Registration.prototype ); \ No newline at end of file Modified: trunk/src/test/javascript/DelegateManagerTest.html =================================================================== --- trunk/src/test/javascript/DelegateManagerTest.html 2008-07-07 00:24:29 UTC (rev 726) +++ trunk/src/test/javascript/DelegateManagerTest.html 2008-07-07 18:34:42 UTC (rev 727) @@ -34,6 +34,24 @@ assertEquals( 1, execCount ); } +function testAddDelegate_One_Scope() { + + var expectedScope = { + field: "abc123" + } + var actualScope; + + var method = function() { + actualScope = this; + }.bind(expectedScope); + + dm.add(method); + + dm.fire(); + + assertEquals( "Scope did not match", expectedScope, actualScope ); +} + function testAddDelegate_Many() { var execCount = 0; Added: trunk/src/test/javascript/EventProviderTest.html =================================================================== --- trunk/src/test/javascript/EventProviderTest.html (rev 0) +++ trunk/src/test/javascript/EventProviderTest.html 2008-07-07 18:34:42 UTC (rev 727) @@ -0,0 +1,206 @@ +<html> + <head> + <title>JSUnit - RosterWindowTest</title> + <script language="javascript" src="app/jsUnitCore.js"></script> + + <script type="text/javascript" src="includes.js"></script> + <script type="text/javascript" src="common-test-library.js"></script> + + + </head> + <body> + <script type="text/javascript"> + + +var DummyClass = function() { + this.addEvents({ + "something" : true, + "somethingelse" : true + }); +} + +Ext.extend( DummyClass, Xmpp4Js.Event.EventProvider, {} ); + +var dummy; + +function setUp() { + dummy = new DummyClass(); +} +function tearDown() { + dummy = null; +} + +// TODO test Xmpp4Js.Ext.PacketExtensionProvider itself. + +function testAddListenerSingle() { + + var eventFired = false; + + dummy.on("something", function() { + eventFired = true; + }); + + dummy.fireEvent( "something" ); + + assertTrue( "Event was not fired", eventFired ); +} + +function testAddListenerSingleArg() { + + var expectedArgument = "abc123"; + var actualArgument; + + dummy.on("something", function(arg) { + actualArgument = arg; + }); + + dummy.fireEvent( "something", expectedArgument ); + + assertEquals( "Argument did not match", expectedArgument, actualArgument); +} + +function testAddListenerSingleScope() { + + var expectedScope = { + field: "abc123" + }; + var actualScope; + + dummy.on("something", function() { + actualScope = this; + }, expectedScope); + + dummy.fireEvent( "something" ); + + // assertSame? + assertEquals( "Scope did not match", expectedScope, actualScope); + assertEquals( "Field on scope did not match", expectedScope.field, actualScope.field); +} + +function testAddListenerMultiple() { + + var somethingFired = false; + var somethingelseFired = false; + + dummy.on({ + "something": function() { + somethingFired = true; + }, + "somethingelse": function() { + somethingelseFired = true; + } + }); + + dummy.fireEvent( "something" ); + dummy.fireEvent( "somethingelse" ); + + assertTrue( "Event was not fired (something)", somethingFired ); + assertTrue( "Event was not fired (somethingelse)", somethingelseFired ); +} + +// scope can not be passed in arguments +function testAddListenerMultipleScopeInline() { + + var expectedScope = { + field: "abc123" + }; + var actualScope; + + dummy.on({ + scope: expectedScope, + + "something": function() { + actualScope = this; + } + }); + + dummy.fireEvent( "something" ); + + // assertSame? + assertEquals( "Scope did not match", expectedScope, actualScope); + assertEquals( "Field on scope did not match", expectedScope.field, actualScope.field); +} + +function testRemoveListenerSingle() { + + var eventFired = false; + var somethingListener = function() { + eventFired = true; + }; + + + dummy.on("something", somethingListener); + dummy.un("something", somethingListener); + + dummy.fireEvent( "something" ); + + assertFalse( "Event WAS fired but should not have been", eventFired ); + +} + +function testRemoveListenerMultiple() { + + var somethingFired = false; + var somethingelseFired = false; + + var somethingListner = function() { + somethingFired = true; + }; + + var somethingelseListener = function() { + somethingelseFired = true; + } + + dummy.on({ + "something": somethingListner, + "somethingelse": somethingelseListener + }); + + dummy.un({ + "something": somethingListner, + "somethingelse": somethingelseListener + }); + + dummy.fireEvent( "something" ); + dummy.fireEvent( "somethingelse" ); + + assertFalse( "Event WAS fired but should not have been (something)", somethingFired ); + assertFalse( "Event WAS fired but should not have been (somethingelse)", somethingelseFired ); +} + +function testAddListenerSingleOptionSingle() { + + + var eventFiredCount = 0; + + dummy.on("something", function() { + eventFiredCount++ + }, undefined, {single:true}); + + dummy.fireEvent( "something" ); + dummy.fireEvent( "something" ); + + assertEquals( "Event was fired more than once", 1, eventFiredCount ); +} + +function BROKEN_testAddListenerSingleOptionSingle_Recursion() { + + + var eventFiredCount = 0; + + dummy.on("something", function() { + eventFiredCount++ + dummy.fireEvent( "something" ); + }, undefined, {single:true}); + + dummy.fireEvent( "something" ); + + assertEquals( "Event was fired more than once", 1, eventFiredCount ); +} + + + </script> + </body> +</html> + + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |