| 
									
										
										
										
											2016-03-25 13:03:49 -07:00
										 |  |  | const assert = require('assert') | 
					
						
							| 
									
										
										
										
											2016-06-23 15:20:04 -07:00
										 |  |  | const Module = require('module') | 
					
						
							| 
									
										
										
										
											2016-03-25 13:03:49 -07:00
										 |  |  | const path = require('path') | 
					
						
							| 
									
										
										
										
											2018-09-14 02:10:51 +10:00
										 |  |  | const { remote } = require('electron') | 
					
						
							|  |  |  | const { BrowserWindow } = remote | 
					
						
							|  |  |  | const { closeWindow } = require('./window-helpers') | 
					
						
							| 
									
										
										
										
											2016-01-11 18:40:23 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-25 16:40:15 -07:00
										 |  |  | const nativeModulesEnabled = remote.getGlobal('nativeModulesEnabled') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-27 16:45:58 -04:00
										 |  |  | describe('modules support', () => { | 
					
						
							|  |  |  |   const fixtures = path.join(__dirname, 'fixtures') | 
					
						
							| 
									
										
										
										
											2016-02-16 17:09:41 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-27 16:45:58 -04:00
										 |  |  |   describe('third-party module', () => { | 
					
						
							| 
									
										
										
										
											2018-08-24 14:24:24 -07:00
										 |  |  |     (nativeModulesEnabled ? describe : describe.skip)('runas', () => { | 
					
						
							| 
									
										
										
										
											2017-10-27 16:45:58 -04:00
										 |  |  |       it('can be required in renderer', () => { | 
					
						
							| 
									
										
										
										
											2017-05-25 16:40:15 -07:00
										 |  |  |         require('runas') | 
					
						
							|  |  |  |       }) | 
					
						
							| 
									
										
										
										
											2016-02-16 17:09:41 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-27 16:45:58 -04:00
										 |  |  |       it('can be required in node binary', (done) => { | 
					
						
							|  |  |  |         const runas = path.join(fixtures, 'module', 'runas.js') | 
					
						
							|  |  |  |         const child = require('child_process').fork(runas) | 
					
						
							|  |  |  |         child.on('message', (msg) => { | 
					
						
							| 
									
										
										
										
											2018-09-14 02:10:51 +10:00
										 |  |  |           assert.strictEqual(msg, 'ok') | 
					
						
							| 
									
										
										
										
											2017-05-25 16:40:15 -07:00
										 |  |  |           done() | 
					
						
							| 
									
										
										
										
											2016-03-25 13:03:49 -07:00
										 |  |  |         }) | 
					
						
							|  |  |  |       }) | 
					
						
							| 
									
										
										
										
											2017-05-25 16:40:15 -07:00
										 |  |  |     }) | 
					
						
							| 
									
										
										
										
											2016-02-16 17:09:41 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-28 12:10:14 +01:00
										 |  |  |     // TODO(alexeykuzmin): Disabled during the Chromium 62 (Node.js 9) upgrade.
 | 
					
						
							|  |  |  |     // Enable it back when "ffi" module supports Node.js 9.
 | 
					
						
							|  |  |  |     // https://github.com/electron/electron/issues/11274
 | 
					
						
							|  |  |  |     xdescribe('ffi', () => { | 
					
						
							| 
									
										
										
										
											2017-11-16 00:05:46 +03:00
										 |  |  |       before(function () { | 
					
						
							| 
									
										
										
										
											2018-02-27 12:08:27 -05:00
										 |  |  |         if (!nativeModulesEnabled || process.platform === 'win32' || | 
					
						
							|  |  |  |             process.arch === 'arm64') { | 
					
						
							| 
									
										
										
										
											2017-11-16 00:05:46 +03:00
										 |  |  |           this.skip() | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }) | 
					
						
							| 
									
										
										
										
											2016-05-23 23:31:00 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-27 16:45:58 -04:00
										 |  |  |       it('does not crash', () => { | 
					
						
							|  |  |  |         const ffi = require('ffi') | 
					
						
							|  |  |  |         const libm = ffi.Library('libm', { | 
					
						
							| 
									
										
										
										
											2017-05-25 16:40:15 -07:00
										 |  |  |           ceil: ['double', ['double']] | 
					
						
							| 
									
										
										
										
											2016-03-25 13:03:49 -07:00
										 |  |  |         }) | 
					
						
							| 
									
										
										
										
											2018-09-14 02:10:51 +10:00
										 |  |  |         assert.strictEqual(libm.ceil(1.5), 2) | 
					
						
							| 
									
										
										
										
											2016-03-25 13:03:49 -07:00
										 |  |  |       }) | 
					
						
							| 
									
										
										
										
											2017-05-25 16:40:15 -07:00
										 |  |  |     }) | 
					
						
							| 
									
										
										
										
											2017-04-20 10:48:17 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-27 16:45:58 -04:00
										 |  |  |     describe('q', () => { | 
					
						
							|  |  |  |       const Q = require('q') | 
					
						
							|  |  |  |       describe('Q.when', () => { | 
					
						
							|  |  |  |         it('emits the fullfil callback', (done) => { | 
					
						
							|  |  |  |           Q(true).then((val) => { | 
					
						
							| 
									
										
										
										
											2018-09-14 02:10:51 +10:00
										 |  |  |             assert.strictEqual(val, true) | 
					
						
							| 
									
										
										
										
											2017-04-20 10:48:17 -07:00
										 |  |  |             done() | 
					
						
							|  |  |  |           }) | 
					
						
							| 
									
										
										
										
											2016-03-25 13:03:49 -07:00
										 |  |  |         }) | 
					
						
							|  |  |  |       }) | 
					
						
							|  |  |  |     }) | 
					
						
							| 
									
										
										
										
											2017-01-10 19:29:22 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-27 16:45:58 -04:00
										 |  |  |     describe('coffee-script', () => { | 
					
						
							|  |  |  |       it('can be registered and used to require .coffee files', () => { | 
					
						
							|  |  |  |         assert.doesNotThrow(() => { | 
					
						
							| 
									
										
										
										
											2017-04-20 10:48:17 -07:00
										 |  |  |           require('coffee-script').register() | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |         assert.strictEqual(require('./fixtures/module/test.coffee'), true) | 
					
						
							| 
									
										
										
										
											2017-02-07 08:48:01 -08:00
										 |  |  |       }) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |   }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-27 16:45:58 -04:00
										 |  |  |   describe('global variables', () => { | 
					
						
							|  |  |  |     describe('process', () => { | 
					
						
							|  |  |  |       it('can be declared in a module', () => { | 
					
						
							| 
									
										
										
										
											2017-01-30 09:58:44 -08:00
										 |  |  |         assert.strictEqual(require('./fixtures/module/declare-process'), 'declared process') | 
					
						
							| 
									
										
										
										
											2017-01-10 19:29:22 -08:00
										 |  |  |       }) | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-27 16:45:58 -04:00
										 |  |  |     describe('global', () => { | 
					
						
							|  |  |  |       it('can be declared in a module', () => { | 
					
						
							| 
									
										
										
										
											2017-01-30 10:08:12 -08:00
										 |  |  |         assert.strictEqual(require('./fixtures/module/declare-global'), 'declared global') | 
					
						
							| 
									
										
										
										
											2017-01-10 19:29:22 -08:00
										 |  |  |       }) | 
					
						
							|  |  |  |     }) | 
					
						
							| 
									
										
										
										
											2017-02-06 15:08:08 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-27 16:45:58 -04:00
										 |  |  |     describe('Buffer', () => { | 
					
						
							|  |  |  |       it('can be declared in a module', () => { | 
					
						
							| 
									
										
										
										
											2017-02-06 15:08:08 -08:00
										 |  |  |         assert.strictEqual(require('./fixtures/module/declare-buffer'), 'declared Buffer') | 
					
						
							|  |  |  |       }) | 
					
						
							|  |  |  |     }) | 
					
						
							| 
									
										
										
										
											2017-01-10 19:29:22 -08:00
										 |  |  |   }) | 
					
						
							| 
									
										
										
										
											2016-06-23 15:20:04 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-27 16:45:58 -04:00
										 |  |  |   describe('Module._nodeModulePaths', () => { | 
					
						
							|  |  |  |     describe('when the path is inside the resources path', () => { | 
					
						
							|  |  |  |       it('does not include paths outside of the resources path', () => { | 
					
						
							| 
									
										
										
										
											2017-04-20 10:48:17 -07:00
										 |  |  |         let modulePath = process.resourcesPath | 
					
						
							| 
									
										
										
										
											2018-09-14 02:10:51 +10:00
										 |  |  |         assert.deepStrictEqual(Module._nodeModulePaths(modulePath), [ | 
					
						
							| 
									
										
										
										
											2017-04-20 10:48:17 -07:00
										 |  |  |           path.join(process.resourcesPath, 'node_modules') | 
					
						
							|  |  |  |         ]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         modulePath = process.resourcesPath + '-foo' | 
					
						
							| 
									
										
										
										
											2017-10-27 16:45:58 -04:00
										 |  |  |         const nodeModulePaths = Module._nodeModulePaths(modulePath) | 
					
						
							| 
									
										
										
										
											2017-04-20 10:48:17 -07:00
										 |  |  |         assert(nodeModulePaths.includes(path.join(modulePath, 'node_modules'))) | 
					
						
							|  |  |  |         assert(nodeModulePaths.includes(path.join(modulePath, '..', 'node_modules'))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         modulePath = path.join(process.resourcesPath, 'foo') | 
					
						
							| 
									
										
										
										
											2018-09-14 02:10:51 +10:00
										 |  |  |         assert.deepStrictEqual(Module._nodeModulePaths(modulePath), [ | 
					
						
							| 
									
										
										
										
											2017-04-20 10:48:17 -07:00
										 |  |  |           path.join(process.resourcesPath, 'foo', 'node_modules'), | 
					
						
							|  |  |  |           path.join(process.resourcesPath, 'node_modules') | 
					
						
							|  |  |  |         ]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         modulePath = path.join(process.resourcesPath, 'node_modules', 'foo') | 
					
						
							| 
									
										
										
										
											2018-09-14 02:10:51 +10:00
										 |  |  |         assert.deepStrictEqual(Module._nodeModulePaths(modulePath), [ | 
					
						
							| 
									
										
										
										
											2017-04-20 10:48:17 -07:00
										 |  |  |           path.join(process.resourcesPath, 'node_modules', 'foo', 'node_modules'), | 
					
						
							|  |  |  |           path.join(process.resourcesPath, 'node_modules') | 
					
						
							|  |  |  |         ]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         modulePath = path.join(process.resourcesPath, 'node_modules', 'foo', 'bar') | 
					
						
							| 
									
										
										
										
											2018-09-14 02:10:51 +10:00
										 |  |  |         assert.deepStrictEqual(Module._nodeModulePaths(modulePath), [ | 
					
						
							| 
									
										
										
										
											2017-04-20 10:48:17 -07:00
										 |  |  |           path.join(process.resourcesPath, 'node_modules', 'foo', 'bar', 'node_modules'), | 
					
						
							|  |  |  |           path.join(process.resourcesPath, 'node_modules', 'foo', 'node_modules'), | 
					
						
							|  |  |  |           path.join(process.resourcesPath, 'node_modules') | 
					
						
							|  |  |  |         ]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         modulePath = path.join(process.resourcesPath, 'node_modules', 'foo', 'node_modules', 'bar') | 
					
						
							| 
									
										
										
										
											2018-09-14 02:10:51 +10:00
										 |  |  |         assert.deepStrictEqual(Module._nodeModulePaths(modulePath), [ | 
					
						
							| 
									
										
										
										
											2017-04-20 10:48:17 -07:00
										 |  |  |           path.join(process.resourcesPath, 'node_modules', 'foo', 'node_modules', 'bar', 'node_modules'), | 
					
						
							|  |  |  |           path.join(process.resourcesPath, 'node_modules', 'foo', 'node_modules'), | 
					
						
							|  |  |  |           path.join(process.resourcesPath, 'node_modules') | 
					
						
							|  |  |  |         ]) | 
					
						
							|  |  |  |       }) | 
					
						
							| 
									
										
										
										
											2016-06-23 15:20:04 -07:00
										 |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-27 16:45:58 -04:00
										 |  |  |     describe('when the path is outside the resources path', () => { | 
					
						
							|  |  |  |       it('includes paths outside of the resources path', () => { | 
					
						
							| 
									
										
										
										
											2018-10-02 03:56:31 +02:00
										 |  |  |         const modulePath = path.resolve('/foo') | 
					
						
							| 
									
										
										
										
											2018-09-14 02:10:51 +10:00
										 |  |  |         assert.deepStrictEqual(Module._nodeModulePaths(modulePath), [ | 
					
						
							| 
									
										
										
										
											2017-04-20 10:48:17 -07:00
										 |  |  |           path.join(modulePath, 'node_modules'), | 
					
						
							|  |  |  |           path.resolve('/node_modules') | 
					
						
							|  |  |  |         ]) | 
					
						
							|  |  |  |       }) | 
					
						
							| 
									
										
										
										
											2016-06-23 15:20:04 -07:00
										 |  |  |     }) | 
					
						
							|  |  |  |   }) | 
					
						
							| 
									
										
										
										
											2017-04-03 19:46:24 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-20 10:48:17 -07:00
										 |  |  |   describe('require', () => { | 
					
						
							|  |  |  |     describe('when loaded URL is not file: protocol', () => { | 
					
						
							|  |  |  |       let w | 
					
						
							| 
									
										
										
										
											2017-04-04 09:08:27 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-20 10:48:17 -07:00
										 |  |  |       beforeEach(() => { | 
					
						
							| 
									
										
										
										
											2018-09-14 02:10:51 +10:00
										 |  |  |         w = new BrowserWindow({ show: false }) | 
					
						
							| 
									
										
										
										
											2017-04-03 19:46:24 +09:00
										 |  |  |       }) | 
					
						
							| 
									
										
										
										
											2017-04-04 09:08:27 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-20 10:48:17 -07:00
										 |  |  |       afterEach(async () => { | 
					
						
							|  |  |  |         await closeWindow(w) | 
					
						
							|  |  |  |         w = null | 
					
						
							|  |  |  |       }) | 
					
						
							| 
									
										
										
										
											2017-04-12 11:55:41 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-20 10:48:17 -07:00
										 |  |  |       it('searches for module under app directory', async () => { | 
					
						
							|  |  |  |         w.loadURL('about:blank') | 
					
						
							|  |  |  |         const result = await w.webContents.executeJavaScript('typeof require("q").when') | 
					
						
							| 
									
										
										
										
											2018-09-14 02:10:51 +10:00
										 |  |  |         assert.strictEqual(result, 'function') | 
					
						
							| 
									
										
										
										
											2017-04-20 10:48:17 -07:00
										 |  |  |       }) | 
					
						
							| 
									
										
										
										
											2017-04-04 09:08:27 +09:00
										 |  |  |     }) | 
					
						
							| 
									
										
										
										
											2017-04-03 19:46:24 +09:00
										 |  |  |   }) | 
					
						
							|  |  |  | }) |