DRY up logic to check if native modules should be loaded

This commit is contained in:
Kevin Sawicki 2017-05-25 16:40:15 -07:00
parent 90964290a6
commit 5cf4995f2e
4 changed files with 55 additions and 48 deletions

View file

@ -12,6 +12,7 @@ const {ipcRenderer, remote, screen} = require('electron')
const {app, ipcMain, BrowserWindow, protocol, webContents} = remote const {app, ipcMain, BrowserWindow, protocol, webContents} = remote
const isCI = remote.getGlobal('isCi') const isCI = remote.getGlobal('isCi')
const nativeModulesEnabled = remote.getGlobal('nativeModulesEnabled')
describe('BrowserWindow module', function () { describe('BrowserWindow module', function () {
var fixtures = path.resolve(__dirname, 'fixtures') var fixtures = path.resolve(__dirname, 'fixtures')
@ -1301,19 +1302,19 @@ describe('BrowserWindow module', function () {
w.loadURL('file://' + path.join(fixtures, 'api', 'native-window-open-iframe.html')) w.loadURL('file://' + path.join(fixtures, 'api', 'native-window-open-iframe.html'))
}) })
if (process.platform !== 'win32' || process.execPath.toLowerCase().indexOf('\\out\\d\\') === -1) { it('loads native addons correctly after reload', (done) => {
it('loads native addons correctly after reload', (done) => { if (!nativeModulesEnabled) return done()
ipcMain.once('answer', (event, content) => {
assert.equal(content, 'function')
ipcMain.once('answer', (event, content) => { ipcMain.once('answer', (event, content) => {
assert.equal(content, 'function') assert.equal(content, 'function')
ipcMain.once('answer', (event, content) => { done()
assert.equal(content, 'function')
done()
})
w.reload()
}) })
w.loadURL('file://' + path.join(fixtures, 'api', 'native-window-open-native-addon.html')) w.reload()
}) })
} w.loadURL('file://' + path.join(fixtures, 'api', 'native-window-open-native-addon.html'))
})
}) })
}) })

View file

@ -5,38 +5,41 @@ const {remote} = require('electron')
const {BrowserWindow} = remote const {BrowserWindow} = remote
const {closeWindow} = require('./window-helpers') const {closeWindow} = require('./window-helpers')
const nativeModulesEnabled = remote.getGlobal('nativeModulesEnabled')
describe('modules support', function () { describe('modules support', function () {
var fixtures = path.join(__dirname, 'fixtures') var fixtures = path.join(__dirname, 'fixtures')
describe('third-party module', function () { describe('third-party module', function () {
if (process.platform !== 'win32' || process.execPath.toLowerCase().indexOf('\\out\\d\\') === -1) { describe('runas', function () {
describe('runas', function () { if (!nativeModulesEnabled) return
it('can be required in renderer', function () {
require('runas')
})
it('can be required in node binary', function (done) { it('can be required in renderer', function () {
var runas = path.join(fixtures, 'module', 'runas.js') require('runas')
var child = require('child_process').fork(runas)
child.on('message', function (msg) {
assert.equal(msg, 'ok')
done()
})
})
}) })
describe('ffi', function () { it('can be required in node binary', function (done) {
if (process.platform === 'win32') return var runas = path.join(fixtures, 'module', 'runas.js')
var child = require('child_process').fork(runas)
it('does not crash', function () { child.on('message', function (msg) {
var ffi = require('ffi') assert.equal(msg, 'ok')
var libm = ffi.Library('libm', { done()
ceil: ['double', ['double']]
})
assert.equal(libm.ceil(1.5), 2)
}) })
}) })
} })
describe('ffi', function () {
if (!nativeModulesEnabled) return
if (process.platform === 'win32') return
it('does not crash', function () {
var ffi = require('ffi')
var libm = ffi.Library('libm', {
ceil: ['double', ['double']]
})
assert.equal(libm.ceil(1.5), 2)
})
})
describe('q', function () { describe('q', function () {
var Q = require('q') var Q = require('q')

View file

@ -89,6 +89,8 @@ if (global.isCi) {
}) })
} }
global.nativeModulesEnabled = process.platform !== 'win32' || process.execPath.toLowerCase().indexOf('\\out\\d\\') === -1
// Register app as standard scheme. // Register app as standard scheme.
global.standardScheme = 'app' global.standardScheme = 'app'
global.zoomScheme = 'zoom' global.zoomScheme = 'zoom'

View file

@ -7,6 +7,7 @@ const {app, session, getGuestWebContents, ipcMain, BrowserWindow, webContents} =
const {closeWindow} = require('./window-helpers') const {closeWindow} = require('./window-helpers')
const isCI = remote.getGlobal('isCi') const isCI = remote.getGlobal('isCi')
const nativeModulesEnabled = remote.getGlobal('nativeModulesEnabled')
describe('<webview> tag', function () { describe('<webview> tag', function () {
this.timeout(3 * 60 * 1000) this.timeout(3 * 60 * 1000)
@ -171,23 +172,23 @@ describe('<webview> tag', function () {
document.body.appendChild(webview) document.body.appendChild(webview)
}) })
if (process.platform !== 'win32' || process.execPath.toLowerCase().indexOf('\\out\\d\\') === -1) { it('loads native modules when navigation happens', function (done) {
it('loads native modules when navigation happens', function (done) { if (!nativeModulesEnabled) return done()
var listener = function () {
webview.removeEventListener('did-finish-load', listener) var listener = function () {
var listener2 = function (e) { webview.removeEventListener('did-finish-load', listener)
assert.equal(e.message, 'function') var listener2 = function (e) {
done() assert.equal(e.message, 'function')
} done()
webview.addEventListener('console-message', listener2)
webview.reload()
} }
webview.addEventListener('did-finish-load', listener) webview.addEventListener('console-message', listener2)
webview.setAttribute('nodeintegration', 'on') webview.reload()
webview.src = 'file://' + fixtures + '/pages/native-module.html' }
document.body.appendChild(webview) webview.addEventListener('did-finish-load', listener)
}) webview.setAttribute('nodeintegration', 'on')
} webview.src = 'file://' + fixtures + '/pages/native-module.html'
document.body.appendChild(webview)
})
}) })
describe('preload attribute', function () { describe('preload attribute', function () {