Skip to content
Permalink
Browse files

test: move module tests to main process (#20419)

  • Loading branch information...
nornagon committed Oct 9, 2019
1 parent df1d315 commit 8de925c4c2add87888d058e78279f61264ab2292
@@ -58,7 +58,7 @@ spec/.hash
.eslintcache

# Generated native addon files
/spec/fixtures/native-addon/echo/build/
/spec-main/fixtures/native-addon/echo/build/

# If someone runs tsc this is where stuff will end up
ts-gen
@@ -60,7 +60,8 @@ async function main () {
(lastSpecInstallHash !== currentSpecInstallHash)

if (somethingChanged) {
await installSpecModules()
await installSpecModules(path.resolve(__dirname, '..', 'spec'))
await installSpecModules(path.resolve(__dirname, '..', 'spec-main'))
await getSpecHash().then(saveSpecHash)
}

@@ -214,19 +215,19 @@ async function runMainProcessElectronTests () {
console.log(`${pass} Electron main process tests passed.`)
}

async function installSpecModules () {
async function installSpecModules (dir) {
const nodeDir = path.resolve(BASE, `out/${utils.getOutDir(true)}/gen/node_headers`)
const env = Object.assign({}, process.env, {
npm_config_nodedir: nodeDir,
npm_config_msvs_version: '2017'
})
const { status } = childProcess.spawnSync(NPX_CMD, [`yarn@${YARN_VERSION}`, 'install', '--frozen-lockfile'], {
env,
cwd: path.resolve(__dirname, '../spec'),
cwd: dir,
stdio: 'inherit'
})
if (status !== 0 && !process.env.IGNORE_YARN_INSTALL_ERROR) {
console.log(`${fail} Failed to yarn install in the spec folder`)
console.log(`${fail} Failed to yarn install in '${dir}'`)
process.exit(1)
}
}
@@ -236,7 +237,9 @@ function getSpecHash () {
(async () => {
const hasher = crypto.createHash('SHA256')
hasher.update(fs.readFileSync(path.resolve(__dirname, '../spec/package.json')))
hasher.update(fs.readFileSync(path.resolve(__dirname, '../spec-main/package.json')))
hasher.update(fs.readFileSync(path.resolve(__dirname, '../spec/yarn.lock')))
hasher.update(fs.readFileSync(path.resolve(__dirname, '../spec-main/yarn.lock')))
return hasher.digest('hex')
})(),
(async () => {
@@ -2210,7 +2210,7 @@ describe('BrowserWindow module', () => {
w.loadFile(path.join(fixtures, 'api', 'native-window-open-iframe.html'))
});
ifit(!process.env.ELECTRON_SKIP_NATIVE_MODULE_TESTS)('loads native addons correctly after reload', async () => {
w.loadFile(path.join(fixtures, 'api', 'native-window-open-native-addon.html'))
w.loadFile(path.join(__dirname, 'fixtures', 'api', 'native-window-open-native-addon.html'))
{
const [, content] = await emittedOnce(ipcMain, 'answer')
expect(content).to.equal('function')
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -1,64 +1,55 @@
const chai = require('chai')
const dirtyChai = require('dirty-chai')
import { expect } from 'chai'
import * as path from 'path'
import * as fs from 'fs'
import { BrowserWindow } from 'electron'
import { ifdescribe, ifit } from './spec-helpers'
import { closeAllWindows } from './window-helpers'
import * as childProcess from 'child_process'

const Module = require('module')
const path = require('path')
const fs = require('fs')
const { remote } = require('electron')
const { BrowserWindow } = remote
const { closeWindow } = require('./window-helpers')
const features = process.electronBinding('features')

const { expect } = chai
chai.use(dirtyChai)

const nativeModulesEnabled = remote.getGlobal('nativeModulesEnabled')
const features = process.electronBinding('features')
const nativeModulesEnabled = !process.env.ELECTRON_SKIP_NATIVE_MODULE_TESTS

describe('modules support', () => {
const fixtures = path.join(__dirname, 'fixtures')

describe('third-party module', () => {
(nativeModulesEnabled ? describe : describe.skip)('echo', () => {
it('can be required in renderer', () => {
require('echo')
ifdescribe(nativeModulesEnabled)('echo', () => {
afterEach(closeAllWindows)
it('can be required in renderer', async () => {
const w = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true } })
w.loadURL('about:blank')
await expect(w.webContents.executeJavaScript(`{ require('echo') }`)).to.be.fulfilled()
})

it('can be required in node binary', function (done) {
if (!features.isRunAsNodeEnabled()) {
this.skip()
done()
}

const echo = path.join(fixtures, 'module', 'echo.js')
const child = require('child_process').fork(echo)
ifit(features.isRunAsNodeEnabled())('can be required in node binary', function (done) {
const child = childProcess.fork(path.join(fixtures, 'module', 'echo.js'))
child.on('message', (msg) => {
expect(msg).to.equal('ok')
done()
})
})

if (process.platform === 'win32') {
it('can be required if electron.exe is renamed', () => {
const { execPath } = remote.process
const testExecPath = path.join(path.dirname(execPath), 'test.exe')
fs.copyFileSync(execPath, testExecPath)
try {
const fixture = path.join(fixtures, 'module', 'echo-renamed.js')
expect(fs.existsSync(fixture)).to.be.true()
const child = require('child_process').spawnSync(testExecPath, [fixture])
expect(child.status).to.equal(0)
} finally {
fs.unlinkSync(testExecPath)
}
})
}
ifit(process.platform === 'win32')('can be required if electron.exe is renamed', () => {
const testExecPath = path.join(path.dirname(process.execPath), 'test.exe')
fs.copyFileSync(process.execPath, testExecPath)
try {
const fixture = path.join(fixtures, 'module', 'echo-renamed.js')
expect(fs.existsSync(fixture)).to.be.true()
const child = childProcess.spawnSync(testExecPath, [fixture])
expect(child.status).to.equal(0)
} finally {
fs.unlinkSync(testExecPath)
}
})
})

describe('q', () => {
const Q = require('q')
describe('Q.when', () => {
it('emits the fullfil callback', (done) => {
Q(true).then((val) => {
Q(true).then((val: boolean) => {
expect(val).to.be.true()
done()
})
@@ -150,23 +141,9 @@ describe('modules support', () => {

describe('require', () => {
describe('when loaded URL is not file: protocol', () => {
let w

beforeEach(() => {
w = new BrowserWindow({
show: false,
webPreferences: {
nodeIntegration: true
}
})
})

afterEach(async () => {
await closeWindow(w)
w = null
})

afterEach(closeAllWindows)
it('searches for module under app directory', async () => {
const w = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true } })
w.loadURL('about:blank')
const result = await w.webContents.executeJavaScript('typeof require("q").when')
expect(result).to.equal('function')
@@ -2,5 +2,9 @@
"name": "electron-test-main",
"productName": "Electron Test Main",
"main": "index.js",
"version": "0.1.0"
"version": "0.1.0",
"devDependencies": {
"echo": "file:fixtures/native-addon/echo",
"q": "^1.5.1"
}
}
@@ -0,0 +1,11 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1


"echo@file:fixtures/native-addon/echo":
version "0.0.1"

q@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
@@ -7,9 +7,6 @@ const os = require('os')
const http = require('http')
const { shell } = require('electron')

const { closeWindow } = require('./window-helpers')
const { emittedOnce } = require('./events-helpers')

const { expect } = chai
chai.use(dirtyChai)

@@ -2,7 +2,7 @@
<body>
<script type="text/javascript" charset="utf-8">
var path = require('path');
console.log(typeof require(path.join(__dirname, '..', '..', 'node_modules', 'echo')));
console.log(typeof require(path.join(__dirname, '..', '..', '..', 'spec-main', 'node_modules', 'echo')));
</script>
</body>
</html>
@@ -13,15 +13,13 @@
"coffeescript": "^2.4.1",
"dbus-native": "github:nornagon/dbus-native#master",
"dirty-chai": "^2.0.1",
"echo": "file:fixtures/native-addon/echo",
"graceful-fs": "^4.1.15",
"is-valid-window": "0.0.5",
"mkdirp": "^0.5.1",
"mocha": "^5.2.0",
"mocha-junit-reporter": "^1.18.0",
"mocha-multi-reporters": "^1.1.7",
"multiparty": "^4.2.1",
"q": "^1.5.1",
"send": "^0.16.2",
"split": "^1.0.1",
"temp": "^0.9.0",
@@ -377,9 +377,6 @@ ecc-jsbn@~0.1.1:
jsbn "~0.1.0"
safer-buffer "^2.1.0"

"echo@file:fixtures/native-addon/echo":
version "0.0.1"

ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@@ -1163,11 +1160,6 @@ punycode@^2.1.0:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==

q@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=

qs@~6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"

0 comments on commit 8de925c

Please sign in to comment.
You can’t perform that action at this time.