remote: support arguments of type Date
authorRobo <hop2deep@gmail.com>
Tue, 29 Dec 2015 20:11:31 +0000 (01:41 +0530)
committerRobo <hop2deep@gmail.com>
Tue, 29 Dec 2015 20:11:31 +0000 (01:41 +0530)
atom/browser/lib/rpc-server.coffee
atom/renderer/api/lib/remote.coffee
spec/api-ipc-spec.coffee
spec/fixtures/module/print_name.js

index e0256081e68a6a604097f7b87b6b610d012d482f..873349f3e97a10d4698d10780e36169342b33c65 100644 (file)
@@ -67,6 +67,7 @@ unwrapArgs = (sender, args) ->
       when 'remote-object' then objectsRegistry.get meta.id
       when 'array' then unwrapArgs sender, meta.value
       when 'buffer' then new Buffer(meta.value)
+      when 'date' then new Date(meta.value)
       when 'promise' then Promise.resolve(then: metaToValue(meta.then))
       when 'object'
         ret = v8Util.createObjectWithName meta.name
index 3ed44278bd717e3981a562f2782abaa5063d89a3..b73fbf50b7c1af75417b0082f7fe0bc01c697dc5 100644 (file)
@@ -18,6 +18,8 @@ wrapArgs = (args, visited=[]) ->
       type: 'array', value: wrapArgs(value, visited)
     else if Buffer.isBuffer value
       type: 'buffer', value: Array::slice.call(value, 0)
+    else if value instanceof Date
+      type: 'date', value: value.getTime()
     else if value?.constructor.name is 'Promise'
       type: 'promise', then: valueToMeta(value.then.bind(value))
     else if value? and typeof value is 'object' and v8Util.getHiddenValue value, 'atomId'
index 1aa715c9f759de629cbebb8dc1957132f15c0324..67ef717d5045f4ad1b13b561d9b36ef9430cb3cb 100644 (file)
@@ -53,11 +53,19 @@ describe 'ipc module', ->
       assert.equal obj.test, 'test'
 
   describe 'remote value in browser', ->
+    print = path.join(fixtures, 'module', 'print_name.js')
+
     it 'keeps its constructor name for objects', ->
       buf = new Buffer('test')
-      print_name = remote.require path.join(fixtures, 'module', 'print_name.js')
+      print_name = remote.require print
       assert.equal print_name.print(buf), 'Buffer'
 
+    it 'supports instanceof Date', ->
+      now = new Date()
+      print_name = remote.require print
+      assert.equal print_name.print(now), 'Date'
+      assert.deepEqual print_name.echo(now), now
+
   describe 'remote promise', ->
     it 'can be used as promise in each side', (done) ->
       promise = remote.require path.join(fixtures, 'module', 'promise.js')
index 09ec33341f5cd46fb023fdfb867c26044adcd910..01d13f4ba8bf03172de807f2860a0a39d1181223 100644 (file)
@@ -1,3 +1,7 @@
 exports.print = function(obj) {
   return obj.constructor.name;
 }
+
+exports.echo = function(obj) {
+  return obj;
+}