initialize-test-window.coffee
1 ipcHelpers = require './ipc-helpers' 2 3 cloneObject = (object) -> 4 clone = {} 5 clone[key] = value for key, value of object 6 clone 7 8 module.exports = ({blobStore}) -> 9 {remote} = require 'electron' 10 11 exitWithStatusCode = (status) -> 12 remote.app.emit('will-quit') 13 remote.process.exit(status) 14 15 try 16 path = require 'path' 17 {ipcRenderer} = require 'electron' 18 getWindowLoadSettings = require './get-window-load-settings' 19 CompileCache = require './compile-cache' 20 AtomEnvironment = require '../src/atom-environment' 21 ApplicationDelegate = require '../src/application-delegate' 22 Clipboard = require '../src/clipboard' 23 TextEditor = require '../src/text-editor' 24 {updateProcessEnv} = require('./update-process-env') 25 require './electron-shims' 26 27 ipcRenderer.on 'environment', (event, env) -> 28 updateProcessEnv(env) 29 30 {testRunnerPath, legacyTestRunnerPath, headless, logFile, testPaths, env} = getWindowLoadSettings() 31 32 if headless 33 # Install console functions that output to stdout and stderr. 34 util = require 'util' 35 36 Object.defineProperties process, 37 stdout: {value: remote.process.stdout} 38 stderr: {value: remote.process.stderr} 39 40 console.log = (args...) -> process.stdout.write "#{util.format(args...)}\n" 41 console.error = (args...) -> process.stderr.write "#{util.format(args...)}\n" 42 else 43 # Show window synchronously so a focusout doesn't fire on input elements 44 # that are focused in the very first spec run. 45 remote.getCurrentWindow().show() 46 47 handleKeydown = (event) -> 48 # Reload: cmd-r / ctrl-r 49 if (event.metaKey or event.ctrlKey) and event.keyCode is 82 50 ipcHelpers.call('window-method', 'reload') 51 52 # Toggle Dev Tools: cmd-alt-i (Mac) / ctrl-shift-i (Linux/Windows) 53 if event.keyCode is 73 and ( 54 (process.platform is 'darwin' and event.metaKey and event.altKey) or 55 (process.platform isnt 'darwin' and event.ctrlKey and event.shiftKey)) 56 ipcHelpers.call('window-method', 'toggleDevTools') 57 58 # Close: cmd-w / ctrl-w 59 if (event.metaKey or event.ctrlKey) and event.keyCode is 87 60 ipcHelpers.call('window-method', 'close') 61 62 # Copy: cmd-c / ctrl-c 63 if (event.metaKey or event.ctrlKey) and event.keyCode is 67 64 atom.clipboard.write(window.getSelection().toString()) 65 66 window.addEventListener('keydown', handleKeydown, true) 67 68 # Add 'exports' to module search path. 69 exportsPath = path.join(getWindowLoadSettings().resourcePath, 'exports') 70 require('module').globalPaths.push(exportsPath) 71 process.env.NODE_PATH = exportsPath # Set NODE_PATH env variable since tasks may need it. 72 73 updateProcessEnv(env) 74 75 # Set up optional transpilation for packages under test if any 76 FindParentDir = require 'find-parent-dir' 77 if packageRoot = FindParentDir.sync(testPaths[0], 'package.json') 78 packageMetadata = require(path.join(packageRoot, 'package.json')) 79 if packageMetadata.atomTranspilers 80 CompileCache.addTranspilerConfigForPath(packageRoot, packageMetadata.name, packageMetadata, packageMetadata.atomTranspilers) 81 82 document.title = "Spec Suite" 83 84 clipboard = new Clipboard 85 TextEditor.setClipboard(clipboard) 86 TextEditor.viewForItem = (item) -> atom.views.getView(item) 87 88 testRunner = require(testRunnerPath) 89 legacyTestRunner = require(legacyTestRunnerPath) 90 buildDefaultApplicationDelegate = -> new ApplicationDelegate() 91 buildAtomEnvironment = (params) -> 92 params = cloneObject(params) 93 params.clipboard = clipboard unless params.hasOwnProperty("clipboard") 94 params.blobStore = blobStore unless params.hasOwnProperty("blobStore") 95 params.onlyLoadBaseStyleSheets = true unless params.hasOwnProperty("onlyLoadBaseStyleSheets") 96 atomEnvironment = new AtomEnvironment(params) 97 atomEnvironment.initialize(params) 98 TextEditor.setScheduler(atomEnvironment.views) 99 atomEnvironment 100 101 promise = testRunner({ 102 logFile, headless, testPaths, buildAtomEnvironment, buildDefaultApplicationDelegate, legacyTestRunner 103 }) 104 105 promise.then (statusCode) -> 106 exitWithStatusCode(statusCode) if getWindowLoadSettings().headless 107 catch error 108 if getWindowLoadSettings().headless 109 console.error(error.stack ? error) 110 exitWithStatusCode(1) 111 else 112 throw error