remote.require should return the same object for the same module.
authorCheng Zhao <zcbenz@gmail.com>
Tue, 23 Jul 2013 03:59:07 +0000 (11:59 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Tue, 23 Jul 2013 03:59:07 +0000 (11:59 +0800)
This is required to use jasmine to test methods of the remote module.

renderer/api/lib/remote.coffee
spec/api/ipc.coffee [new file with mode: 0644]

index 3a7436e..d43feeb 100644 (file)
@@ -87,9 +87,14 @@ window.addEventListener 'unload', (event) ->
   ipc.sendChannelSync 'ATOM_BROWSER_RELEASE_RENDER_VIEW'
 
 # Get remote module.
+# (Just like node's require, the modules are cached permanently, note that this
+#  is safe leak since the object is not expected to get freed in browser)
+moduleCache = {}
 exports.require = (module) ->
+  return moduleCache[module] if moduleCache[module]?
+
   meta = ipc.sendChannelSync 'ATOM_BROWSER_REQUIRE', module
-  metaToValue meta
+  moduleCache[module] = metaToValue meta
 
 # Get object with specified id.
 exports.getObject = (id) ->
diff --git a/spec/api/ipc.coffee b/spec/api/ipc.coffee
new file mode 100644 (file)
index 0000000..b348218
--- /dev/null
@@ -0,0 +1,9 @@
+assert = require 'assert'
+remote = require 'remote'
+
+describe 'ipc', ->
+  describe 'remote.require', ->
+    it 'should returns same object for the same module', ->
+      dialog1 = remote.require 'dialog'
+      dialog2 = remote.require 'dialog'
+      assert.equal dialog1, dialog2