Repository: cordova-lib
Updated Branches:
  refs/heads/master 9014dd69f -> e050180c5


CB-10940 Can't add Android platform from path

Added corresponding tests for events.forwardEventsTo

 This closes #418


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

Branch: refs/heads/master
Commit: e050180c5ab2d3149bb0dfdc5f37fc317b159773
Parents: 9014dd6
Author: daserge <v-ses...@microsoft.com>
Authored: Mon Mar 28 17:06:45 2016 +0300
Committer: Vladimir Kotikov <v-vlk...@microsoft.com>
Committed: Tue Mar 29 12:25:36 2016 +0300

----------------------------------------------------------------------
 cordova-common/spec/events.spec.js | 48 +++++++++++++++++++++++++++++++++
 cordova-common/src/events.js       |  9 ++++++-
 2 files changed, 56 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/e050180c/cordova-common/spec/events.spec.js
----------------------------------------------------------------------
diff --git a/cordova-common/spec/events.spec.js 
b/cordova-common/spec/events.spec.js
new file mode 100644
index 0000000..a9e7f43
--- /dev/null
+++ b/cordova-common/spec/events.spec.js
@@ -0,0 +1,48 @@
+/**
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you 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.
+*/
+
+var events = require('../src/events');
+
+describe('forwardEventsTo method', function () {
+    afterEach(function() {
+        events.forwardEventsTo(null);
+    });
+    it('should not go to infinite loop when trying to forward to self', 
function () {
+        expect(function() {
+            events.forwardEventsTo(events);
+            events.emit('log', 'test message');
+        }).not.toThrow();
+    });
+    it('should reset forwarding after trying to forward to self', function () {
+        var EventEmitter = require('events').EventEmitter;
+        var anotherEventEmitter = new EventEmitter();
+        var logSpy = jasmine.createSpy('logSpy');
+        anotherEventEmitter.on('log', logSpy);
+
+        events.forwardEventsTo(anotherEventEmitter);
+        events.emit('log', 'test message #1');
+        expect(logSpy).toHaveBeenCalled();
+
+        logSpy.reset();
+
+        events.forwardEventsTo(events);
+        events.emit('log', 'test message #2');
+        expect(logSpy).not.toHaveBeenCalled();
+    });
+});

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/e050180c/cordova-common/src/events.js
----------------------------------------------------------------------
diff --git a/cordova-common/src/events.js b/cordova-common/src/events.js
index 868d363..8751976 100644
--- a/cordova-common/src/events.js
+++ b/cordova-common/src/events.js
@@ -42,7 +42,14 @@ module.exports.forwardEventsTo = function (eventEmitter) {
     if (!(eventEmitter instanceof EventEmitter))
         throw new Error('Cordova events could be redirected to another 
EventEmitter instance only');
 
-    EVENTS_RECEIVER = eventEmitter;
+    // CB-10940 Skipping forwarding to self to avoid infinite recursion.
+    // This is the case when the modules are npm-linked.
+    if (this !== eventEmitter) {
+        EVENTS_RECEIVER = eventEmitter;
+    } else {
+        // Reset forwarding if we are subscribing to self
+        EVENTS_RECEIVER = undefined;
+    }
 };
 
 var emit = INSTANCE.emit;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cordova.apache.org
For additional commands, e-mail: commits-h...@cordova.apache.org

Reply via email to