From 69e9acf4d8c2e1b8a6e12cc79b33108962f2fdf7 Mon Sep 17 00:00:00 2001 From: Eric White Date: Thu, 20 Jul 2017 14:44:00 -0400 Subject: [PATCH 01/31] WIP Electron --- testem.js | 6 +++- vendor/VisualAcceptance.js | 66 +++++++++++++++++++++++++++++++++++-- vendor/electron-launcher.js | 57 ++++++++++++++++++++++++++++++++ 3 files changed, 126 insertions(+), 3 deletions(-) create mode 100644 vendor/electron-launcher.js diff --git a/testem.js b/testem.js index 8bf5573..b028db9 100644 --- a/testem.js +++ b/testem.js @@ -10,7 +10,7 @@ module.exports = { 'Chromium' ], 'launch_in_dev': [ - 'NightmareJsVisualAcceptance' + 'Electron' ], 'launchers': { @@ -25,6 +25,10 @@ module.exports = { 'NightmareJsVisualAcceptance': { 'command': 'DEBUG=nightmare* node vendor/nightmarejs-launcher.js ', 'protocol': 'browser' + }, + 'Electron': { + 'command': 'electron vendor/electron-launcher.js ', + 'protocol': 'browser' } } } diff --git a/vendor/VisualAcceptance.js b/vendor/VisualAcceptance.js index 5dc9627..357a240 100644 --- a/vendor/VisualAcceptance.js +++ b/vendor/VisualAcceptance.js @@ -22,6 +22,33 @@ function nightmareSendCaptureRequestAndRecieveImage (targetElement) { }) }) } + +function electronSendCaptureRequestAndRecieveImage (targetElement) { + const {ipcRenderer} = window.nodeRequire('electron') + return new Promise(function (resolve) { + ipcRenderer.once('return-image-event', function (event, result) { + console.log('Electron recieved image') + resolve(result.image) + }) + + if (targetElement.id === '') { + var tempId = 'tempVisualAcceptanceId' + targetElement.id = tempId + } + var rect = document.getElementById(targetElement.id).getBoundingClientRect() + var clip = { + x: rect.left, + y: rect.top, + width: rect.width, + height: rect.height + } + console.log('Electron send image') + + ipcRenderer.send('capture-event', { + rect: clip + }) + }) +} /** * Does httpGet on url synchronously * @param {string} theUrl - url to do GET request on @@ -167,9 +194,10 @@ function _capture (imageName, options) { var browserDirectory if (browser.osversion === undefined) { - browserDirectory = browser.os + '/' + browser.browser + '/' + browserDirectory = browser.os + '/' + window.__nightmare === undefined ? browser.browser : 'NightmareJS' + '/' } else { - browserDirectory = browser.os + '/' + browser.osversion + '/' + browser.browser + '/' + browserDirectory = browser.os + '/' + browser.osversion + '/' + + window.__nightmare === undefined ? browser.browser : 'NightmareJS' + '/' } if (options.height && options.width) { @@ -187,6 +215,10 @@ function _capture (imageName, options) { if (window.__nightmare !== undefined) { return captureNightmare(imageName, options.width, options.height, options.misMatchPercentageMargin, options.targetElement, options.assert, browserDirectory) + } else if (window.ui.browser === 'Electron') { + console.log('Doing Electron capture') + return captureElectron(imageName, options.width, options.height, + options.misMatchPercentageMargin, options.targetElement, options.assert, browserDirectory) } else if (window.callPhantom !== undefined) { return capturePhantom(imageName, options.width, options.height, options.misMatchPercentageMargin, options.targetElement, options.assert, browserDirectory) @@ -234,6 +266,36 @@ function captureNightmare (imageName, width, height, misMatchPercentageMargin, t }) }) } +/** + * Use NightmareJS to perform capture + * @param {string} imageName - Name of the image you wish to save + * @param {number} [width=null] - Define the width of the canvas in pixels. If null, renders with full width of the container(640px). + * @param {number} [height=null] - Define the height of the canvas in pixels. If null, renders with full height of the window.(384px). + * @param {float} [misMatchPercentageMargin=0.00] - The maximum percentage ResembleJs is allowed to misMatch. + * @param {HTMLElement} targetElement - DOM element to capture + * @param {object} [assert=undefined] - Use only if using qunit + * @param {object} [browserDirectory=undefined] - visual acceptance image path based off window.ui (holds browser info) and size of ember-testing-container + * @returns {Promise} ResembleJs return value + */ +function captureElectron (imageName, width, height, misMatchPercentageMargin, targetElement, assert, + browserDirectory) { + // TODO: implement nightmare capture + return new Promise(function (resolve, reject) { + if (window.nodeRequire === undefined) { + resolve('Electron doesn\'t have nodeRequire') + } + // Get test dummy image + return electronSendCaptureRequestAndRecieveImage(targetElement).then(function (image) { + if (targetElement.id === 'tempVisualAcceptanceId') { + targetElement.id = '' + } + image = 'data:image/png;base64,' + image + return utilizeImage(imageName, width, height, misMatchPercentageMargin, targetElement, assert, + image, browserDirectory, + resolve, reject) + }) + }) + } /** * Use phantomJS/slimerjs callback to capture Image * @param {string} imageName - Name of the image you wish to save diff --git a/vendor/electron-launcher.js b/vendor/electron-launcher.js new file mode 100644 index 0000000..f6ba0b0 --- /dev/null +++ b/vendor/electron-launcher.js @@ -0,0 +1,57 @@ +const electron = require('electron') +const app = electron.app // Module to control application life. +const BrowserWindow = electron.BrowserWindow // Module to create native browser window. +const ipcMain = electron.ipcMain +// var url = process.argv[2] +// Report crashes to our server. +// electron.crashReporter.start(); +// Keep a global reference of the window object, if you don't, the window will +// be closed automatically when the JavaScript object is garbage collected. +var mainWindow = null + +// Quit when all windows are closed. +app.on('window-all-closed', function () { + // On OS X it is common for applications and their menu bar + // to stay active until the user quits explicitly with Cmd + Q + if (process.platform !== 'darwin') { + app.quit() + } +}) +function sendImage (win, image) { + win.webContents.send('return-image-event', { + image: image + }) +} +// This method will be called when Electron has finished +// initialization and is ready to create browser windows. +app.on('ready', function () { + // Create the browser window. + mainWindow = new BrowserWindow({width: 800, height: 600}) + console.log('Setting ipcMain') + ipcMain.on('capture-event', function (event, data) { + console.log('Recieved capture-event') + try { + mainWindow.capturePage(data.rect, function (result) { + var image = result.toString('base64') + sendImage(mainWindow, image).then(function (result) {}).catch(function (error) { + console.error('error-call-send-image', error) + }) + }) + } catch (error) { + console.error('error-capture', error) + } + }) + // and load the index.html of the app. + mainWindow.loadURL('http://localhost:7357/') + + // Open the DevTools. + mainWindow.webContents.openDevTools() + + // Emitted when the window is closed. + mainWindow.on('closed', function () { + // Dereference the window object, usually you would store windows + // in an array if your app supports multi windows, this is the time + // when you should delete the corresponding element. + mainWindow = null + }) +}) From 8045a28bf3efb223e248cfc58b779f126245c73b Mon Sep 17 00:00:00 2001 From: Eric White Date: Fri, 21 Jul 2017 14:11:01 -0400 Subject: [PATCH 02/31] Living that electron life --- vendor/VisualAcceptance.js | 6 ++-- vendor/electron-launcher.js | 64 +++++++++++++++++++++++++++---------- 2 files changed, 50 insertions(+), 20 deletions(-) diff --git a/vendor/VisualAcceptance.js b/vendor/VisualAcceptance.js index 357a240..2e48898 100644 --- a/vendor/VisualAcceptance.js +++ b/vendor/VisualAcceptance.js @@ -193,11 +193,11 @@ function _capture (imageName, options) { $(document.getElementById('ember-testing-container')).css('position', 'relative') var browserDirectory + let browserPath = window.__nightmare === undefined ? browser.browser : 'NightmareJS' if (browser.osversion === undefined) { - browserDirectory = browser.os + '/' + window.__nightmare === undefined ? browser.browser : 'NightmareJS' + '/' + browserDirectory = browser.os + '/' + browserPath + '/' } else { - browserDirectory = browser.os + '/' + browser.osversion + '/' + - window.__nightmare === undefined ? browser.browser : 'NightmareJS' + '/' + browserDirectory = browser.os + '/' + browser.osversion + '/' + browserPath + '/' } if (options.height && options.width) { diff --git a/vendor/electron-launcher.js b/vendor/electron-launcher.js index f6ba0b0..7ca66c4 100644 --- a/vendor/electron-launcher.js +++ b/vendor/electron-launcher.js @@ -2,6 +2,8 @@ const electron = require('electron') const app = electron.app // Module to control application life. const BrowserWindow = electron.BrowserWindow // Module to create native browser window. const ipcMain = electron.ipcMain +const timeoutFromResize = 100 + // var url = process.argv[2] // Report crashes to our server. // electron.crashReporter.start(); @@ -13,9 +15,9 @@ var mainWindow = null app.on('window-all-closed', function () { // On OS X it is common for applications and their menu bar // to stay active until the user quits explicitly with Cmd + Q - if (process.platform !== 'darwin') { - app.quit() - } + // if (process.platform !== 'darwin') { + app.quit() + // } }) function sendImage (win, image) { win.webContents.send('return-image-event', { @@ -26,26 +28,50 @@ function sendImage (win, image) { // initialization and is ready to create browser windows. app.on('ready', function () { // Create the browser window. - mainWindow = new BrowserWindow({width: 800, height: 600}) - console.log('Setting ipcMain') + mainWindow = new BrowserWindow({width: 800, height: 800, offscreen: true, show: false, 'enable-larger-than-screen': true}) + console.log('Setting ipcMain') + ipcMain.on('capture-event', function (event, data) { - console.log('Recieved capture-event') - try { - mainWindow.capturePage(data.rect, function (result) { - var image = result.toString('base64') - sendImage(mainWindow, image).then(function (result) {}).catch(function (error) { - console.error('error-call-send-image', error) - }) - }) - } catch (error) { - console.error('error-capture', error) - } + mainWindow.webContents.executeJavaScript( + '[document.documentElement.scrollWidth, document.documentElement.scrollHeight]', + false, result => { + mainWindow.setContentSize(result[0], result[1]) + setTimeout(() => { + mainWindow.capturePage(data.rect, function (result) { + var image = Buffer.from(result.toPNG()).toString('base64') + sendImage(mainWindow, image) + }) + }, timeoutFromResize) + } + ) + }) + + ipcMain.on('exit-event', function () { + app.exit() }) + // and load the index.html of the app. mainWindow.loadURL('http://localhost:7357/') // Open the DevTools. - mainWindow.webContents.openDevTools() + // mainWindow.webContents.openDevTools() + + // mainWindow.webContents.executeJavaScript(` + // Testem.afterTests( + // // Asynchronously + // function (config, data, callback) { + // callback(null) + // // Set time to wait for callback to finish its work. Then close launcher (Issue Testem: fails to close custom launcher on Linux) https://github.com/testem/testem/issues/915 + // setTimeout(function (params) { + // const {ipcRenderer} = window.nodeRequire('electron') + // ipcRenderer.send('exit-event', { + // exit: true + // }) + // }, 2000) + // // Set time to wait for callback to finish its work. Then close launcher (Issue Testem: fails to close custom launcher on Linux) https://github.com/testem/testem/issues/915 + // } + // ) + // `) // Emitted when the window is closed. mainWindow.on('closed', function () { @@ -55,3 +81,7 @@ app.on('ready', function () { mainWindow = null }) }) + +process.on('SIGTERM', function () { + mainWindow = null +}) From 757cbba66f037818b3c0ebb8e38d399625483d89 Mon Sep 17 00:00:00 2001 From: Eric White Date: Fri, 21 Jul 2017 14:24:11 -0400 Subject: [PATCH 03/31] electron working ish --- .../files/vendor/electron-launcher.js | 87 +++++++++++++++++++ package.json | 13 +-- testem.js | 18 ++-- tests/index.html | 6 +- 4 files changed, 111 insertions(+), 13 deletions(-) create mode 100644 blueprints/ember-cli-visual-acceptance/files/vendor/electron-launcher.js diff --git a/blueprints/ember-cli-visual-acceptance/files/vendor/electron-launcher.js b/blueprints/ember-cli-visual-acceptance/files/vendor/electron-launcher.js new file mode 100644 index 0000000..7ca66c4 --- /dev/null +++ b/blueprints/ember-cli-visual-acceptance/files/vendor/electron-launcher.js @@ -0,0 +1,87 @@ +const electron = require('electron') +const app = electron.app // Module to control application life. +const BrowserWindow = electron.BrowserWindow // Module to create native browser window. +const ipcMain = electron.ipcMain +const timeoutFromResize = 100 + +// var url = process.argv[2] +// Report crashes to our server. +// electron.crashReporter.start(); +// Keep a global reference of the window object, if you don't, the window will +// be closed automatically when the JavaScript object is garbage collected. +var mainWindow = null + +// Quit when all windows are closed. +app.on('window-all-closed', function () { + // On OS X it is common for applications and their menu bar + // to stay active until the user quits explicitly with Cmd + Q + // if (process.platform !== 'darwin') { + app.quit() + // } +}) +function sendImage (win, image) { + win.webContents.send('return-image-event', { + image: image + }) +} +// This method will be called when Electron has finished +// initialization and is ready to create browser windows. +app.on('ready', function () { + // Create the browser window. + mainWindow = new BrowserWindow({width: 800, height: 800, offscreen: true, show: false, 'enable-larger-than-screen': true}) + console.log('Setting ipcMain') + + ipcMain.on('capture-event', function (event, data) { + mainWindow.webContents.executeJavaScript( + '[document.documentElement.scrollWidth, document.documentElement.scrollHeight]', + false, result => { + mainWindow.setContentSize(result[0], result[1]) + setTimeout(() => { + mainWindow.capturePage(data.rect, function (result) { + var image = Buffer.from(result.toPNG()).toString('base64') + sendImage(mainWindow, image) + }) + }, timeoutFromResize) + } + ) + }) + + ipcMain.on('exit-event', function () { + app.exit() + }) + + // and load the index.html of the app. + mainWindow.loadURL('http://localhost:7357/') + + // Open the DevTools. + // mainWindow.webContents.openDevTools() + + // mainWindow.webContents.executeJavaScript(` + // Testem.afterTests( + // // Asynchronously + // function (config, data, callback) { + // callback(null) + // // Set time to wait for callback to finish its work. Then close launcher (Issue Testem: fails to close custom launcher on Linux) https://github.com/testem/testem/issues/915 + // setTimeout(function (params) { + // const {ipcRenderer} = window.nodeRequire('electron') + // ipcRenderer.send('exit-event', { + // exit: true + // }) + // }, 2000) + // // Set time to wait for callback to finish its work. Then close launcher (Issue Testem: fails to close custom launcher on Linux) https://github.com/testem/testem/issues/915 + // } + // ) + // `) + + // Emitted when the window is closed. + mainWindow.on('closed', function () { + // Dereference the window object, usually you would store windows + // in an array if your app supports multi windows, this is the time + // when you should delete the corresponding element. + mainWindow = null + }) +}) + +process.on('SIGTERM', function () { + mainWindow = null +}) diff --git a/package.json b/package.json index e4f38a1..25828a4 100644 --- a/package.json +++ b/package.json @@ -45,17 +45,18 @@ "ember-addon" ], "dependencies": { + "body-parser": "^1.15.1", + "chalk": "^1.1.3", + "electron-capture": "^1.1.3", + "ember-cli-babel": "^5.1.6", + "ember-cli-node-assets": "^0.1.4", "es6-promise": "^3.2.2", "nightmare": "^2.10.0", "nightmare-custom-event": "^0.2.0", "resemblejs": "2.2.0", - "sync-request": "^3.0.1", - "body-parser": "^1.15.1", - "chalk": "^1.1.3", - "ember-cli-babel": "^5.1.6", - "ember-cli-node-assets": "^0.1.4" + "sync-request": "^3.0.1" }, "ember-addon": { "configPath": "tests/dummy/config" } -} \ No newline at end of file +} diff --git a/testem.js b/testem.js index b028db9..b8b8043 100644 --- a/testem.js +++ b/testem.js @@ -3,11 +3,12 @@ module.exports = { 'test_page': 'tests/index.html?hidepassed', 'disable_watching': true, 'launch_in_ci': [ - 'Firefox', - 'NightmareJsVisualAcceptance', - 'PhantomJsVisualAcceptance', - 'SlimerJsVisualAcceptance', - 'Chromium' + 'Electron' + // 'Firefox', + // 'NightmareJsVisualAcceptance', + // 'PhantomJsVisualAcceptance', + // 'SlimerJsVisualAcceptance', + // 'Chromium' ], 'launch_in_dev': [ 'Electron' @@ -27,8 +28,13 @@ module.exports = { 'protocol': 'browser' }, 'Electron': { - 'command': 'electron vendor/electron-launcher.js ', + 'command': 'electron -i vendor/electron-launcher.js ', 'protocol': 'browser' + }, + "cli": { + "exe": "node", + "args": [ "--inspect", "--debug-brk", "./runtests.js", "", "", "" ], + "protocol": "browser" } } } diff --git a/tests/index.html b/tests/index.html index 59a0b66..5ba4133 100644 --- a/tests/index.html +++ b/tests/index.html @@ -6,7 +6,11 @@ Dummy Tests - + {{content-for "head"}} {{content-for "test-head"}} From 1521c871a034dd91422b560f66303575917b7906 Mon Sep 17 00:00:00 2001 From: Eric White Date: Fri, 21 Jul 2017 16:30:42 -0400 Subject: [PATCH 04/31] Electron - still minimal; difference in from capture - capture --- vendor/VisualAcceptance.js | 3 ++- vendor/electron-launcher.js | 32 +++++++++++++++++++++++--------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/vendor/VisualAcceptance.js b/vendor/VisualAcceptance.js index 2e48898..9aa92fb 100644 --- a/vendor/VisualAcceptance.js +++ b/vendor/VisualAcceptance.js @@ -45,7 +45,8 @@ function electronSendCaptureRequestAndRecieveImage (targetElement) { console.log('Electron send image') ipcRenderer.send('capture-event', { - rect: clip + rect: clip, + targetId: targetElement.id }) }) } diff --git a/vendor/electron-launcher.js b/vendor/electron-launcher.js index 7ca66c4..b6170bc 100644 --- a/vendor/electron-launcher.js +++ b/vendor/electron-launcher.js @@ -2,8 +2,8 @@ const electron = require('electron') const app = electron.app // Module to control application life. const BrowserWindow = electron.BrowserWindow // Module to create native browser window. const ipcMain = electron.ipcMain -const timeoutFromResize = 100 - +const timeoutFromResize = 400 +const fs = require('fs') // var url = process.argv[2] // Report crashes to our server. // electron.crashReporter.start(); @@ -28,18 +28,32 @@ function sendImage (win, image) { // initialization and is ready to create browser windows. app.on('ready', function () { // Create the browser window. - mainWindow = new BrowserWindow({width: 800, height: 800, offscreen: true, show: false, 'enable-larger-than-screen': true}) + mainWindow = new BrowserWindow({width: 800, height: 800, offscreen: true, show: false, 'enable-larger-than-screen': true, useContentSize: true}) console.log('Setting ipcMain') ipcMain.on('capture-event', function (event, data) { mainWindow.webContents.executeJavaScript( - '[document.documentElement.scrollWidth, document.documentElement.scrollHeight]', + "[document.getElementById('ember-testing-container').scrollIntoView(true), document.getElementById('ember-testing-container').scrollWidth, document.getElementById('ember-testing-container').scrollHeight]", false, result => { - mainWindow.setContentSize(result[0], result[1]) + mainWindow.setContentSize(result[1] + 200, result[2] + 200) + fs.appendFileSync('/Users/ewhite/workspace/ember-cli-visual-acceptance/error.log', `sized to ${document.getElementById('ember-testing-container').scrollWidth} ${document.getElementById('ember-testing-container').scrollHeight} \n`) + setTimeout(() => { - mainWindow.capturePage(data.rect, function (result) { - var image = Buffer.from(result.toPNG()).toString('base64') - sendImage(mainWindow, image) + mainWindow.webContents.executeJavaScript(`[JSON.stringify(document.getElementById('${data.targetId}').getBoundingClientRect(), ["top", "left", "width", + "height"])]`, false, res => { + let rect = JSON.parse(res[0]) + var clip = { + x: rect.left, + y: rect.top, + width: rect.width, + height: rect.height + } + fs.appendFileSync('/Users/ewhite/workspace/ember-cli-visual-acceptance/error.log', `captureing ${data.targetId} with: \n ${JSON.stringify(clip, null, 4)} \n`) + mainWindow.capturePage(clip, function (imageResult) { + fs.writeFileSync(data.targetId + '-image.png', imageResult.toPNG()) + var image = Buffer.from(imageResult.toPNG()).toString('base64') + sendImage(mainWindow, image) + }) }) }, timeoutFromResize) } @@ -54,7 +68,7 @@ app.on('ready', function () { mainWindow.loadURL('http://localhost:7357/') // Open the DevTools. - // mainWindow.webContents.openDevTools() + // mainWindow.webContents.openDevTools({mode: 'detach'}) // mainWindow.webContents.executeJavaScript(` // Testem.afterTests( From 4b1343542f0a301177e4298dffc41502353f43ea Mon Sep 17 00:00:00 2001 From: Eric White Date: Mon, 24 Jul 2017 10:25:26 -0400 Subject: [PATCH 05/31] Electron working --- .../files/testem.json | 5 ++++ vendor/VisualAcceptance.js | 5 +++- vendor/electron-launcher.js | 23 +++++++++++-------- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/blueprints/ember-cli-visual-acceptance/files/testem.json b/blueprints/ember-cli-visual-acceptance/files/testem.json index 3993a30..ec9da94 100644 --- a/blueprints/ember-cli-visual-acceptance/files/testem.json +++ b/blueprints/ember-cli-visual-acceptance/files/testem.json @@ -20,6 +20,11 @@ "NightmareJsVisualAcceptance": { "command": "node vendor/nightmarejs-launcher.js ", "protocol": "browser" + }, + "Electron": { + "exe": "node", + "args": [ "vendor/electron-launcher.js", "", "", ""], + "protocol": "browser" } } } diff --git a/vendor/VisualAcceptance.js b/vendor/VisualAcceptance.js index 9aa92fb..2d763ae 100644 --- a/vendor/VisualAcceptance.js +++ b/vendor/VisualAcceptance.js @@ -191,7 +191,9 @@ function _capture (imageName, options) { $(document.getElementById('ember-testing')).css('width', '100%') $(document.getElementById('ember-testing')).css('height', '100%') $(document.getElementById('ember-testing-container')).css('overflow', 'visible') - $(document.getElementById('ember-testing-container')).css('position', 'relative') + $(document.getElementById('ember-testing-container')).css('position', 'absolute') + $(document.getElementById('ember-testing-container')).css('top', '0px') + $(document.getElementById('ember-testing-container')).css('left', '0px') var browserDirectory let browserPath = window.__nightmare === undefined ? browser.browser : 'NightmareJS' @@ -421,6 +423,7 @@ function utilizeImage (imageName, width, height, misMatchPercentageMargin, targe return new Promise(function (resolve, reject) { resemble(res.image).compareTo(image).scaleToSameSize().onComplete(function (data) { var result = false + // debugger if (parseFloat(data.misMatchPercentage) <= misMatchPercentageMargin) { // Passed $.ajax({ diff --git a/vendor/electron-launcher.js b/vendor/electron-launcher.js index b6170bc..4ef8552 100644 --- a/vendor/electron-launcher.js +++ b/vendor/electron-launcher.js @@ -2,8 +2,9 @@ const electron = require('electron') const app = electron.app // Module to control application life. const BrowserWindow = electron.BrowserWindow // Module to create native browser window. const ipcMain = electron.ipcMain -const timeoutFromResize = 400 +const timeoutFromResize = 1500 const fs = require('fs') +const uuidv4 = require('uuid/v4') // var url = process.argv[2] // Report crashes to our server. // electron.crashReporter.start(); @@ -28,20 +29,20 @@ function sendImage (win, image) { // initialization and is ready to create browser windows. app.on('ready', function () { // Create the browser window. - mainWindow = new BrowserWindow({width: 800, height: 800, offscreen: true, show: false, 'enable-larger-than-screen': true, useContentSize: true}) + mainWindow = new BrowserWindow({width: 800, height: 800, offscreen: true, show: true, 'enable-larger-than-screen': true, useContentSize: true}) console.log('Setting ipcMain') ipcMain.on('capture-event', function (event, data) { mainWindow.webContents.executeJavaScript( - "[document.getElementById('ember-testing-container').scrollIntoView(true), document.getElementById('ember-testing-container').scrollWidth, document.getElementById('ember-testing-container').scrollHeight]", + "[document.getElementById('ember-testing-container').scrollWidth, document.getElementById('ember-testing-container').scrollHeight]", false, result => { - mainWindow.setContentSize(result[1] + 200, result[2] + 200) - fs.appendFileSync('/Users/ewhite/workspace/ember-cli-visual-acceptance/error.log', `sized to ${document.getElementById('ember-testing-container').scrollWidth} ${document.getElementById('ember-testing-container').scrollHeight} \n`) + mainWindow.setContentSize(result[0] + 200, result[1] + 200) + fs.appendFileSync('/Users/ewhite/workspace/ember-cli-visual-acceptance/error.log', `sized to ${result[1]} ${result[2]} \n`) setTimeout(() => { - mainWindow.webContents.executeJavaScript(`[JSON.stringify(document.getElementById('${data.targetId}').getBoundingClientRect(), ["top", "left", "width", + mainWindow.webContents.executeJavaScript(`[window.scrollTo(0,0), JSON.stringify(document.getElementById('${data.targetId}').getBoundingClientRect(), ["top", "left", "width", "height"])]`, false, res => { - let rect = JSON.parse(res[0]) + let rect = JSON.parse(res[1]) var clip = { x: rect.left, y: rect.top, @@ -49,8 +50,12 @@ app.on('ready', function () { height: rect.height } fs.appendFileSync('/Users/ewhite/workspace/ember-cli-visual-acceptance/error.log', `captureing ${data.targetId} with: \n ${JSON.stringify(clip, null, 4)} \n`) + var didFinishLoad = new Promise(function (resolve) { + mainWindow.webContents.once('did-finish-load', resolve) + }) + mainWindow.capturePage(clip, function (imageResult) { - fs.writeFileSync(data.targetId + '-image.png', imageResult.toPNG()) + fs.writeFileSync('/Users/ewhite/workspace/ember-cli-visual-acceptance/electron-images/' + uuidv4() + '-image.png', imageResult.toPNG()) var image = Buffer.from(imageResult.toPNG()).toString('base64') sendImage(mainWindow, image) }) @@ -68,7 +73,7 @@ app.on('ready', function () { mainWindow.loadURL('http://localhost:7357/') // Open the DevTools. - // mainWindow.webContents.openDevTools({mode: 'detach'}) + mainWindow.webContents.openDevTools({mode: 'detach'}) // mainWindow.webContents.executeJavaScript(` // Testem.afterTests( From f372355d717edc742bb5f4d47c0ebebf9a52f6a8 Mon Sep 17 00:00:00 2001 From: Eric White Date: Mon, 24 Jul 2017 10:46:22 -0400 Subject: [PATCH 06/31] Set show to false (so big images don't get distorted) --- vendor/electron-launcher.js | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/vendor/electron-launcher.js b/vendor/electron-launcher.js index 4ef8552..1a6fcd5 100644 --- a/vendor/electron-launcher.js +++ b/vendor/electron-launcher.js @@ -29,7 +29,7 @@ function sendImage (win, image) { // initialization and is ready to create browser windows. app.on('ready', function () { // Create the browser window. - mainWindow = new BrowserWindow({width: 800, height: 800, offscreen: true, show: true, 'enable-larger-than-screen': true, useContentSize: true}) + mainWindow = new BrowserWindow({width: 800, height: 800, offscreen: true, show: false, 'enable-larger-than-screen': true, useContentSize: true}) console.log('Setting ipcMain') ipcMain.on('capture-event', function (event, data) { @@ -50,10 +50,7 @@ app.on('ready', function () { height: rect.height } fs.appendFileSync('/Users/ewhite/workspace/ember-cli-visual-acceptance/error.log', `captureing ${data.targetId} with: \n ${JSON.stringify(clip, null, 4)} \n`) - var didFinishLoad = new Promise(function (resolve) { - mainWindow.webContents.once('did-finish-load', resolve) - }) - + mainWindow.capturePage(clip, function (imageResult) { fs.writeFileSync('/Users/ewhite/workspace/ember-cli-visual-acceptance/electron-images/' + uuidv4() + '-image.png', imageResult.toPNG()) var image = Buffer.from(imageResult.toPNG()).toString('base64') @@ -73,24 +70,7 @@ app.on('ready', function () { mainWindow.loadURL('http://localhost:7357/') // Open the DevTools. - mainWindow.webContents.openDevTools({mode: 'detach'}) - - // mainWindow.webContents.executeJavaScript(` - // Testem.afterTests( - // // Asynchronously - // function (config, data, callback) { - // callback(null) - // // Set time to wait for callback to finish its work. Then close launcher (Issue Testem: fails to close custom launcher on Linux) https://github.com/testem/testem/issues/915 - // setTimeout(function (params) { - // const {ipcRenderer} = window.nodeRequire('electron') - // ipcRenderer.send('exit-event', { - // exit: true - // }) - // }, 2000) - // // Set time to wait for callback to finish its work. Then close launcher (Issue Testem: fails to close custom launcher on Linux) https://github.com/testem/testem/issues/915 - // } - // ) - // `) + // mainWindow.webContents.openDevTools({mode: 'detach'}) // Emitted when the window is closed. mainWindow.on('closed', function () { From 6afbd72ffd3c7c17d749d2d16a829f9b0111de71 Mon Sep 17 00:00:00 2001 From: Eric White Date: Mon, 24 Jul 2017 11:11:19 -0400 Subject: [PATCH 07/31] cleanup electron logs --- .../files/vendor/electron-launcher.js | 51 +++++++++---------- vendor/VisualAcceptance.js | 3 -- vendor/electron-launcher.js | 2 +- 3 files changed, 26 insertions(+), 30 deletions(-) diff --git a/blueprints/ember-cli-visual-acceptance/files/vendor/electron-launcher.js b/blueprints/ember-cli-visual-acceptance/files/vendor/electron-launcher.js index 7ca66c4..94c9f83 100644 --- a/blueprints/ember-cli-visual-acceptance/files/vendor/electron-launcher.js +++ b/blueprints/ember-cli-visual-acceptance/files/vendor/electron-launcher.js @@ -2,8 +2,9 @@ const electron = require('electron') const app = electron.app // Module to control application life. const BrowserWindow = electron.BrowserWindow // Module to create native browser window. const ipcMain = electron.ipcMain -const timeoutFromResize = 100 - +const timeoutFromResize = 1500 +const fs = require('fs') +const uuidv4 = require('uuid/v4') // var url = process.argv[2] // Report crashes to our server. // electron.crashReporter.start(); @@ -28,18 +29,33 @@ function sendImage (win, image) { // initialization and is ready to create browser windows. app.on('ready', function () { // Create the browser window. - mainWindow = new BrowserWindow({width: 800, height: 800, offscreen: true, show: false, 'enable-larger-than-screen': true}) + mainWindow = new BrowserWindow({width: 800, height: 800, offscreen: true, show: false, 'enable-larger-than-screen': true, useContentSize: true}) console.log('Setting ipcMain') ipcMain.on('capture-event', function (event, data) { mainWindow.webContents.executeJavaScript( - '[document.documentElement.scrollWidth, document.documentElement.scrollHeight]', + "[document.getElementById('ember-testing-container').scrollWidth, document.getElementById('ember-testing-container').scrollHeight]", false, result => { - mainWindow.setContentSize(result[0], result[1]) + mainWindow.setContentSize(result[0] + 200, result[1] + 200) + fs.appendFileSync('/Users/ewhite/workspace/ember-cli-visual-acceptance/error.log', `sized to ${result[1]} ${result[2]} \n`) + setTimeout(() => { - mainWindow.capturePage(data.rect, function (result) { - var image = Buffer.from(result.toPNG()).toString('base64') - sendImage(mainWindow, image) + mainWindow.webContents.executeJavaScript(`[window.scrollTo(0,0), JSON.stringify(document.getElementById('${data.targetId}').getBoundingClientRect(), ["top", "left", "width", + "height"])]`, false, res => { + let rect = JSON.parse(res[1]) + var clip = { + x: rect.left, + y: rect.top, + width: rect.width, + height: rect.height + } + fs.appendFileSync('/Users/ewhite/workspace/ember-cli-visual-acceptance/error.log', `captureing ${data.targetId} with: \n ${JSON.stringify(clip, null, 4)} \n`) + + mainWindow.capturePage(clip, function (imageResult) { + // fs.writeFileSync('/Users/ewhite/workspace/ember-cli-visual-acceptance/electron-images/' + uuidv4() + '-image.png', imageResult.toPNG()) + var image = Buffer.from(imageResult.toPNG()).toString('base64') + sendImage(mainWindow, image) + }) }) }, timeoutFromResize) } @@ -54,24 +70,7 @@ app.on('ready', function () { mainWindow.loadURL('http://localhost:7357/') // Open the DevTools. - // mainWindow.webContents.openDevTools() - - // mainWindow.webContents.executeJavaScript(` - // Testem.afterTests( - // // Asynchronously - // function (config, data, callback) { - // callback(null) - // // Set time to wait for callback to finish its work. Then close launcher (Issue Testem: fails to close custom launcher on Linux) https://github.com/testem/testem/issues/915 - // setTimeout(function (params) { - // const {ipcRenderer} = window.nodeRequire('electron') - // ipcRenderer.send('exit-event', { - // exit: true - // }) - // }, 2000) - // // Set time to wait for callback to finish its work. Then close launcher (Issue Testem: fails to close custom launcher on Linux) https://github.com/testem/testem/issues/915 - // } - // ) - // `) + // mainWindow.webContents.openDevTools({mode: 'detach'}) // Emitted when the window is closed. mainWindow.on('closed', function () { diff --git a/vendor/VisualAcceptance.js b/vendor/VisualAcceptance.js index 2d763ae..c7143aa 100644 --- a/vendor/VisualAcceptance.js +++ b/vendor/VisualAcceptance.js @@ -27,7 +27,6 @@ function electronSendCaptureRequestAndRecieveImage (targetElement) { const {ipcRenderer} = window.nodeRequire('electron') return new Promise(function (resolve) { ipcRenderer.once('return-image-event', function (event, result) { - console.log('Electron recieved image') resolve(result.image) }) @@ -42,7 +41,6 @@ function electronSendCaptureRequestAndRecieveImage (targetElement) { width: rect.width, height: rect.height } - console.log('Electron send image') ipcRenderer.send('capture-event', { rect: clip, @@ -219,7 +217,6 @@ function _capture (imageName, options) { return captureNightmare(imageName, options.width, options.height, options.misMatchPercentageMargin, options.targetElement, options.assert, browserDirectory) } else if (window.ui.browser === 'Electron') { - console.log('Doing Electron capture') return captureElectron(imageName, options.width, options.height, options.misMatchPercentageMargin, options.targetElement, options.assert, browserDirectory) } else if (window.callPhantom !== undefined) { diff --git a/vendor/electron-launcher.js b/vendor/electron-launcher.js index 1a6fcd5..94c9f83 100644 --- a/vendor/electron-launcher.js +++ b/vendor/electron-launcher.js @@ -52,7 +52,7 @@ app.on('ready', function () { fs.appendFileSync('/Users/ewhite/workspace/ember-cli-visual-acceptance/error.log', `captureing ${data.targetId} with: \n ${JSON.stringify(clip, null, 4)} \n`) mainWindow.capturePage(clip, function (imageResult) { - fs.writeFileSync('/Users/ewhite/workspace/ember-cli-visual-acceptance/electron-images/' + uuidv4() + '-image.png', imageResult.toPNG()) + // fs.writeFileSync('/Users/ewhite/workspace/ember-cli-visual-acceptance/electron-images/' + uuidv4() + '-image.png', imageResult.toPNG()) var image = Buffer.from(imageResult.toPNG()).toString('base64') sendImage(mainWindow, image) }) From 53d9641dca51bb5d25515c2a478a1beff1a1c3f8 Mon Sep 17 00:00:00 2001 From: Eric White Date: Wed, 26 Jul 2017 10:43:31 -0400 Subject: [PATCH 08/31] fix testem --- vendor/electron-launcher.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vendor/electron-launcher.js b/vendor/electron-launcher.js index 94c9f83..d7a08fd 100644 --- a/vendor/electron-launcher.js +++ b/vendor/electron-launcher.js @@ -5,6 +5,8 @@ const ipcMain = electron.ipcMain const timeoutFromResize = 1500 const fs = require('fs') const uuidv4 = require('uuid/v4') +var url = process.argv[3] + // var url = process.argv[2] // Report crashes to our server. // electron.crashReporter.start(); @@ -67,7 +69,7 @@ app.on('ready', function () { }) // and load the index.html of the app. - mainWindow.loadURL('http://localhost:7357/') + mainWindow.loadURL(url) // Open the DevTools. // mainWindow.webContents.openDevTools({mode: 'detach'}) From c1ccba00a6ff47d01c02569a90c50ebb91d2db65 Mon Sep 17 00:00:00 2001 From: Eric White Date: Wed, 26 Jul 2017 12:23:04 -0400 Subject: [PATCH 09/31] testem after tests exit --- vendor/electron-launcher.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/vendor/electron-launcher.js b/vendor/electron-launcher.js index d7a08fd..390a3b7 100644 --- a/vendor/electron-launcher.js +++ b/vendor/electron-launcher.js @@ -33,7 +33,22 @@ app.on('ready', function () { // Create the browser window. mainWindow = new BrowserWindow({width: 800, height: 800, offscreen: true, show: false, 'enable-larger-than-screen': true, useContentSize: true}) console.log('Setting ipcMain') - + mainWindow.webContents.executeJavaScript(` + const {ipcRenderer} = window.nodeRequire('electron') + Testem.afterTests( + // Asynchronously + function (config, data, callback) { + callback(null) + // Set time to wait for callback to finish its work. Then close launcher (Issue Testem: fails to close custom launcher on Linux) https://github.com/testem/testem/issues/915 + setTimeout(function (params) { + ipcRenderer.send('exit-event', { + exit: true + }) + }, 2000) + // Set time to wait for callback to finish its work. Then close launcher (Issue Testem: fails to close custom launcher on Linux) https://github.com/testem/testem/issues/915 + } + ) + `) ipcMain.on('capture-event', function (event, data) { mainWindow.webContents.executeJavaScript( "[document.getElementById('ember-testing-container').scrollWidth, document.getElementById('ember-testing-container').scrollHeight]", From d6e3def296579ea67e740ce6a5c17c71e2cd5c6e Mon Sep 17 00:00:00 2001 From: Eric White Date: Wed, 26 Jul 2017 12:26:50 -0400 Subject: [PATCH 10/31] add electron --- package.json | 2 +- testem.js | 17 ++++++----------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 25828a4..a254ddd 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "dependencies": { "body-parser": "^1.15.1", "chalk": "^1.1.3", - "electron-capture": "^1.1.3", + "electron": "^1.6.11", "ember-cli-babel": "^5.1.6", "ember-cli-node-assets": "^0.1.4", "es6-promise": "^3.2.2", diff --git a/testem.js b/testem.js index b8b8043..e00a4d2 100644 --- a/testem.js +++ b/testem.js @@ -3,12 +3,12 @@ module.exports = { 'test_page': 'tests/index.html?hidepassed', 'disable_watching': true, 'launch_in_ci': [ - 'Electron' - // 'Firefox', - // 'NightmareJsVisualAcceptance', - // 'PhantomJsVisualAcceptance', - // 'SlimerJsVisualAcceptance', - // 'Chromium' + 'Electron', + 'Firefox', + 'NightmareJsVisualAcceptance', + 'PhantomJsVisualAcceptance', + 'SlimerJsVisualAcceptance', + 'Chromium' ], 'launch_in_dev': [ 'Electron' @@ -30,11 +30,6 @@ module.exports = { 'Electron': { 'command': 'electron -i vendor/electron-launcher.js ', 'protocol': 'browser' - }, - "cli": { - "exe": "node", - "args": [ "--inspect", "--debug-brk", "./runtests.js", "", "", "" ], - "protocol": "browser" } } } From c6fd2f5b4bcaec0baf60c9697ce62c5f8711a25f Mon Sep 17 00:00:00 2001 From: Eric White Date: Wed, 26 Jul 2017 12:38:50 -0400 Subject: [PATCH 11/31] code downgrade for phantom --- vendor/VisualAcceptance.js | 4 ++-- vendor/electron-launcher.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/vendor/VisualAcceptance.js b/vendor/VisualAcceptance.js index c7143aa..ef46c90 100644 --- a/vendor/VisualAcceptance.js +++ b/vendor/VisualAcceptance.js @@ -24,7 +24,7 @@ function nightmareSendCaptureRequestAndRecieveImage (targetElement) { } function electronSendCaptureRequestAndRecieveImage (targetElement) { - const {ipcRenderer} = window.nodeRequire('electron') + const ipcRenderer = window.nodeRequire('electron').ipcRenderer return new Promise(function (resolve) { ipcRenderer.once('return-image-event', function (event, result) { resolve(result.image) @@ -194,7 +194,7 @@ function _capture (imageName, options) { $(document.getElementById('ember-testing-container')).css('left', '0px') var browserDirectory - let browserPath = window.__nightmare === undefined ? browser.browser : 'NightmareJS' + var browserPath = window.__nightmare === undefined ? browser.browser : 'NightmareJS' if (browser.osversion === undefined) { browserDirectory = browser.os + '/' + browserPath + '/' } else { diff --git a/vendor/electron-launcher.js b/vendor/electron-launcher.js index 390a3b7..bdf3764 100644 --- a/vendor/electron-launcher.js +++ b/vendor/electron-launcher.js @@ -34,7 +34,7 @@ app.on('ready', function () { mainWindow = new BrowserWindow({width: 800, height: 800, offscreen: true, show: false, 'enable-larger-than-screen': true, useContentSize: true}) console.log('Setting ipcMain') mainWindow.webContents.executeJavaScript(` - const {ipcRenderer} = window.nodeRequire('electron') + const ipcRenderer = window.nodeRequire('electron').ipcRenderer Testem.afterTests( // Asynchronously function (config, data, callback) { From cd25b2b60570b84ed07d83b355d25d91234f9769 Mon Sep 17 00:00:00 2001 From: Eric White Date: Wed, 26 Jul 2017 12:39:46 -0400 Subject: [PATCH 12/31] Remove Electron folder. Renamed to NightmareJS --- .../Electron/1920x1080/fixed-more-passed.png | Bin 14203 -> 0 bytes .../Linux/Electron/default/Error-passed.png | Bin 3424 -> 0 bytes .../Linux/Electron/default/Simple-passed.png | Bin 2738 -> 0 bytes .../Electron/default/capture right-passed.png | Bin 1549 -> 0 bytes .../Linux/Electron/default/fixed-passed.png | Bin 6643 -> 0 bytes .../default/svg-experimental-passed.png | Bin 7710 -> 0 bytes .../Linux/Electron/default/svg-passed.png | Bin 7671 -> 0 bytes 7 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 visual-acceptance/Linux/Electron/1920x1080/fixed-more-passed.png delete mode 100644 visual-acceptance/Linux/Electron/default/Error-passed.png delete mode 100644 visual-acceptance/Linux/Electron/default/Simple-passed.png delete mode 100644 visual-acceptance/Linux/Electron/default/capture right-passed.png delete mode 100644 visual-acceptance/Linux/Electron/default/fixed-passed.png delete mode 100644 visual-acceptance/Linux/Electron/default/svg-experimental-passed.png delete mode 100644 visual-acceptance/Linux/Electron/default/svg-passed.png diff --git a/visual-acceptance/Linux/Electron/1920x1080/fixed-more-passed.png b/visual-acceptance/Linux/Electron/1920x1080/fixed-more-passed.png deleted file mode 100644 index 3d5e7978098a7967e6ee28c7aecda2c1131a999b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14203 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 arfuLKZ#E@PT&TxxQAmhSij&5ESo0rQ-1or% diff --git a/visual-acceptance/Linux/Electron/default/capture right-passed.png b/visual-acceptance/Linux/Electron/default/capture right-passed.png deleted file mode 100644 index 892a3177265e05414daf12bff6440054b9b77131..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1549 zcmeHH{Xf$Q0RC>XEn6&i-rweR<(yU|>*FF$EFV@1$q*y*Qq!lnozXT|jZ4c&WV>>e zm#dZ$8Z(VuC`R)#=5@uTUgornYG`=<&SrH!(w+*s&4=VGrEVy#T#&Oq& zXv3o0UTG)X1`jhiyZWvZ^2@Ep@iC!sri$F=4~L-fdTd6dPmmo6_mG<8Q&5y%J&+dtD)JRXZe!AY@Sn4_q=96I zDxOYf7v%nZy6gcXkVF48bdFVdR5a6)X@d6$+t| z@CD8Eq%D#YK}pGsjSa@>QFN56a@5T+e15*cS>y4D=Uy(q{LNh~qKb& z4PXd$b^oZdXcAOj4`H+^BJ1X>UU+F~%HBo??DMPoW@cOgJxVJ$7(iJ9gM)|SD|oXf zt22-GjcxbwqlU6LPf?AIGTB5{OpI8y$hbD{IY!Dl*x4PhUSCu^dO6ni^W3S_e$<=m znlg|W_tB{Fc2>RB*yAcUQmhki*}T8cdHAhvUh+^1=Z->U{L}B%PaF0{M4iW)Dip0Z zqzQVg9Drq6|NNJ`&_|9YCMz|eC;CM%9wjLmI&$p0SKlf-^{ninC7zS2;TvW=b;wB~ zCanJTU9UZV2Zi6@nj_V3tQ~zt22)TZ{pTgR6Ok?tjh+n_=B{P9Pq?^3y^k00+Dc6y z`^jYD=~peiiD&sICt13^%&;@|JJ6_zrfDGz5HEiea}TVHj11^+EJMU9W{GfI5Ys`p z*RYul#@YH_Lidj#5;il|Kji+JUC2RJHjnjCH%GRZVFBB@BI?2Qz`#^PY{MrY^~;wH zT23SJY?V|~bY;~x0#&Fw@FTPBKzg_E#lt_}=iFrW%k(x-do_!0U31SE+O3>BMSX$p ztX7i6WCY@tOTrV1JqGMa3kP8xK)U8{B&wHX+QuH{xC>y)QoB~b9TGHirl+;3ZL6@X z!s;#B9`5|jAzyGO9x&0ivIWK2(et$O*}(tie-Gpe07OjhQj^r6sRA|qLU;e1=H`JT MhY3DUy`!`L1<6pI!T#Db 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 diff --git a/visual-acceptance/Linux/Electron/default/svg-experimental-passed.png b/visual-acceptance/Linux/Electron/default/svg-experimental-passed.png deleted file mode 100644 index f9177470585914871aafe8fa76ec560f0fd45222..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7710 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 diff --git a/visual-acceptance/Linux/Electron/default/svg-passed.png b/visual-acceptance/Linux/Electron/default/svg-passed.png deleted file mode 100644 index 4666bbf56c6dd9b46b8a787c03fb15c410eca891..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7671 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 p{ZK(ZNS`$5#_Z{z^S*G(BG}&6O?06ge|kT(r)l Date: Wed, 26 Jul 2017 12:43:03 -0400 Subject: [PATCH 13/31] lint --- testem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testem.js b/testem.js index e00a4d2..ea76a4d 100644 --- a/testem.js +++ b/testem.js @@ -28,7 +28,7 @@ module.exports = { 'protocol': 'browser' }, 'Electron': { - 'command': 'electron -i vendor/electron-launcher.js ', + 'command': 'electron -i vendor/electron-launcher.js ', 'protocol': 'browser' } } From 20422ea626dbcd56a72eab21e4fc28c872be0ea3 Mon Sep 17 00:00:00 2001 From: Eric White Date: Wed, 26 Jul 2017 12:54:18 -0400 Subject: [PATCH 14/31] linting --- package.json | 5 +++-- vendor/VisualAcceptance.js | 22 +++++++++++----------- vendor/electron-launcher.js | 16 ++++++++++++---- 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index a254ddd..3b8b814 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "build": "ember build", "start": "ember server", "test": "npm run lint && ember test", - "lint": "eslint *.js addon app blueprints config tests" + "lint": "eslint *.js addon app blueprints config tests vendor/VisualAcceptance.js vendor/*-launcher.js" }, "repository": "https://github.com/ciena-blueplanet/ember-cli-visual-acceptance.git", "engines": { @@ -19,6 +19,7 @@ "author": "", "license": "MIT", "devDependencies": { + "babel-eslint": "^7.2.3", "broccoli-asset-rev": "^2.4.2", "ember-ajax": "0.7.1", "ember-cli": "2.4.3", @@ -47,7 +48,7 @@ "dependencies": { "body-parser": "^1.15.1", "chalk": "^1.1.3", - "electron": "^1.6.11", + "electron": "^1.6.11", "ember-cli-babel": "^5.1.6", "ember-cli-node-assets": "^0.1.4", "es6-promise": "^3.2.2", diff --git a/vendor/VisualAcceptance.js b/vendor/VisualAcceptance.js index ef46c90..686c5b6 100644 --- a/vendor/VisualAcceptance.js +++ b/vendor/VisualAcceptance.js @@ -41,7 +41,7 @@ function electronSendCaptureRequestAndRecieveImage (targetElement) { width: rect.width, height: rect.height } - + ipcRenderer.send('capture-event', { rect: clip, targetId: targetElement.id @@ -280,22 +280,22 @@ function captureNightmare (imageName, width, height, misMatchPercentageMargin, t function captureElectron (imageName, width, height, misMatchPercentageMargin, targetElement, assert, browserDirectory) { // TODO: implement nightmare capture - return new Promise(function (resolve, reject) { + return new Promise(function (resolve, reject) { if (window.nodeRequire === undefined) { resolve('Electron doesn\'t have nodeRequire') } // Get test dummy image - return electronSendCaptureRequestAndRecieveImage(targetElement).then(function (image) { - if (targetElement.id === 'tempVisualAcceptanceId') { - targetElement.id = '' - } - image = 'data:image/png;base64,' + image - return utilizeImage(imageName, width, height, misMatchPercentageMargin, targetElement, assert, + return electronSendCaptureRequestAndRecieveImage(targetElement).then(function (image) { + if (targetElement.id === 'tempVisualAcceptanceId') { + targetElement.id = '' + } + image = 'data:image/png;base64,' + image + return utilizeImage(imageName, width, height, misMatchPercentageMargin, targetElement, assert, image, browserDirectory, resolve, reject) - }) - }) - } + }) + }) +} /** * Use phantomJS/slimerjs callback to capture Image * @param {string} imageName - Name of the image you wish to save diff --git a/vendor/electron-launcher.js b/vendor/electron-launcher.js index bdf3764..7e19aee 100644 --- a/vendor/electron-launcher.js +++ b/vendor/electron-launcher.js @@ -1,10 +1,10 @@ +/* eslint-disable max-len */ const electron = require('electron') -const app = electron.app // Module to control application life. -const BrowserWindow = electron.BrowserWindow // Module to create native browser window. +const app = electron.app // Module to control application life. +const BrowserWindow = electron.BrowserWindow // Module to create native browser window. const ipcMain = electron.ipcMain const timeoutFromResize = 1500 const fs = require('fs') -const uuidv4 = require('uuid/v4') var url = process.argv[3] // var url = process.argv[2] @@ -22,6 +22,7 @@ app.on('window-all-closed', function () { app.quit() // } }) + function sendImage (win, image) { win.webContents.send('return-image-event', { image: image @@ -31,7 +32,14 @@ function sendImage (win, image) { // initialization and is ready to create browser windows. app.on('ready', function () { // Create the browser window. - mainWindow = new BrowserWindow({width: 800, height: 800, offscreen: true, show: false, 'enable-larger-than-screen': true, useContentSize: true}) + mainWindow = new BrowserWindow({ + width: 800, + height: 800, + offscreen: true, + show: false, + 'enable-larger-than-screen': true, + useContentSize: true + }) console.log('Setting ipcMain') mainWindow.webContents.executeJavaScript(` const ipcRenderer = window.nodeRequire('electron').ipcRenderer From 4c6667d57e32ff05238ed521b13e29ef5f1c72ce Mon Sep 17 00:00:00 2001 From: Eric White Date: Wed, 26 Jul 2017 13:03:15 -0400 Subject: [PATCH 15/31] increase timeouts --- .travis.yml | 2 +- tests/integration/simple-test.js | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index ab8181c..3029ab7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ branches: except: - /^v[0-9\.]+/ before_install: -- npm install -g coveralls pr-bumper@^1.0.0 slimerjs phantomjs +- npm install -g coveralls pr-bumper@^1.0.0 slimerjs phantomjs electron - pr-bumper check - slimerjs -v before_script: diff --git a/tests/integration/simple-test.js b/tests/integration/simple-test.js index bf361ac..0153b95 100644 --- a/tests/integration/simple-test.js +++ b/tests/integration/simple-test.js @@ -16,19 +16,19 @@ describeComponent( }, function () { it('renders', function (done) { - this.timeout(30000) + this.timeout(50000) this.render(hbs `
Test
`) expect(this.$()).to.have.length(1) capture('Simple', done) }) it('renders something else', function (done) { - this.timeout(30000) + this.timeout(50000) this.render(hbs `
Test Else
`) expect(this.$()).to.have.length(1) capture('Error', done) }) it('renders svg', function (done) { - this.timeout(30000) + this.timeout(50000) /* eslint-disable max-len */ this.render(hbs `
@@ -80,7 +80,7 @@ describeComponent( }) it('fixed div', function (done) { - this.timeout(30000) + this.timeout(50000) this.render(hbs `
Wherever you go, I will find you!
`) capture('fixed', done) }) From d7d7f209f424dc01bd2317bc1c70e8ed0131f6db Mon Sep 17 00:00:00 2001 From: Eric White Date: Wed, 26 Jul 2017 13:03:48 -0400 Subject: [PATCH 16/31] increase timeout --- tests/integration/simple-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/simple-test.js b/tests/integration/simple-test.js index 0153b95..e14541e 100644 --- a/tests/integration/simple-test.js +++ b/tests/integration/simple-test.js @@ -86,7 +86,7 @@ describeComponent( }) it('more fixed', function (done) { - this.timeout(10000) + this.timeout(50000) this.render(hbs `
Side menu