|
1 | 1 | 'use strict'; |
2 | 2 |
|
| 3 | +var assert = require('assert'); |
| 4 | +var vm = require('vm'); |
3 | 5 | require('should'); |
4 | 6 | var revert = require('../index').revert; |
5 | 7 |
|
@@ -85,7 +87,6 @@ describe('revert: java to js', function() { |
85 | 87 | revert(java).should.eql(['foo', 'bar', 'zoo']); |
86 | 88 | }); |
87 | 89 |
|
88 | | - |
89 | 90 | it('should work when used with cycular reference', function() { |
90 | 91 | var java, result; |
91 | 92 |
|
@@ -182,4 +183,59 @@ describe('revert: java to js', function() { |
182 | 183 | result[1] = result[0]; |
183 | 184 | revert(java).should.eql(result); |
184 | 185 | }); |
| 186 | + |
| 187 | + it('should work in vm', function() { |
| 188 | + revert(new vm.Script(`33`).runInNewContext({})).should.equal(33); |
| 189 | + revert(new vm.Script(`'foo'`).runInNewContext({})).should.equal('foo'); |
| 190 | + revert(new vm.Script(`true`).runInNewContext({})).should.equal(true); |
| 191 | + |
| 192 | + assert.deepEqual(revert(new vm.Script(`new Boolean(true)`).runInNewContext({})), new Boolean(true)); |
| 193 | + assert.deepEqual(revert(new vm.Script(`new Date('2023-01-01')`).runInNewContext({})), new Date('2023-01-01')); |
| 194 | + assert.deepEqual(revert(new vm.Script(`new Number(1)`).runInNewContext({})), new Number(1)); |
| 195 | + assert.deepEqual(revert(new vm.Script(`new RegExp(/[12]/)`).runInNewContext({})), new RegExp(/[12]/)); |
| 196 | + assert.deepEqual(revert(new vm.Script(`new String('foo')`).runInNewContext({})), new String('foo')); |
| 197 | + |
| 198 | + var java = new vm.Script(`[ |
| 199 | + {$class: 'string', $: 'foo'}, |
| 200 | + {$class: 'string', $: 'bar'}, |
| 201 | + {$class: 'string', $: 'zoo'}, |
| 202 | + ]`).runInNewContext({}); |
| 203 | + revert(java).should.eql(['foo', 'bar', 'zoo']); |
| 204 | + |
| 205 | + var error = new Error(); |
| 206 | + error.message = 'this is a java IOException instance'; |
| 207 | + error.name = 'java.io.IOException'; |
| 208 | + error.cause = error; |
| 209 | + assert.deepEqual(revert(new vm.Script(`var error = new Error(); |
| 210 | + error.message = 'this is a java IOException instance'; |
| 211 | + error.name = 'java.io.IOException'; |
| 212 | + error.cause = error; |
| 213 | + var java = { |
| 214 | + $class: 'java.io.IOException', |
| 215 | + $: error, |
| 216 | + };`).runInNewContext({})), error); |
| 217 | + |
| 218 | + class javaError extends Error { |
| 219 | + constructor(message) { |
| 220 | + super(message); |
| 221 | + this.name = 'java.io.IOException'; |
| 222 | + this.cause = this; |
| 223 | + } |
| 224 | + } |
| 225 | + var error2 = new javaError('this is a java IOException instance'); |
| 226 | + |
| 227 | + assert.deepEqual(revert(new vm.Script(`class javaError extends Error { |
| 228 | + constructor(message) { |
| 229 | + super(message); |
| 230 | + this.name = 'java.io.IOException'; |
| 231 | + this.cause = this; |
| 232 | + } |
| 233 | + } |
| 234 | + var error2 = new javaError('this is a java IOException instance'); |
| 235 | + var java = { |
| 236 | + $class: 'java.io.IOException', |
| 237 | + $: error2, |
| 238 | + }; |
| 239 | + java`).runInNewContext({})), error2); |
| 240 | + }); |
185 | 241 | }); |
0 commit comments