UNPKG

appium-ios-simulator

Version:
474 lines (473 loc) 16.8 kB
<!doctype html> <html lang="en"> <head> <title>Code coverage report for lib/simulator-xcode-9.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../prettify.css" /> <link rel="stylesheet" href="../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../index.html">All files</a> / <a href="index.html">lib</a> simulator-xcode-9.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">7.41% </span> <span class="quiet">Statements</span> <span class='fraction'>2/27</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/8</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/9</span> </div> <div class='fl pad1y space-right2'> <span class="strong">7.41% </span> <span class="quiet">Lines</span> <span class='fraction'>2/27</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import SimulatorXcode8 from './simulator-xcode-8'; import AsyncLock from 'async-lock'; import log from './logger'; import { shutdown as simctlShutdown, bootDevice, eraseDevice } from 'node-simctl'; import { waitForCondition } from 'asyncbox'; import { restoreTouchEnrollShortcuts, backupTouchEnrollShortcuts, setTouchEnrollKey } from './touch-enroll.js'; &nbsp; &nbsp; const SIMULATOR_SHUTDOWN_TIMEOUT = 15 * 1000; const startupLock = new AsyncLock(); &nbsp; class <span class="fstat-no" title="function not covered" >SimulatorXcode9 </span>extends SimulatorXcode8 { constructor (udid, xcodeVersion) { <span class="cstat-no" title="statement not covered" > super(udid, xcodeVersion);</span> } &nbsp; /** * Executes given Simulator with options. The Simulator will not be restarted if * it is already running and the current UI state matches to `isHeadless` option. * @override * * @param {object} opts - One or more of available Simulator options: * - {string} scaleFactor: can be one of ['1.0', '0.75', '0.5', '0.33', '0.25']. * Defines the window scale value for the UI client window for the current Simulator. * Equals to null by default, which keeps the current scale unchanged. * - {boolean} connectHardwareKeyboard: whether to connect the hardware keyboard to the * Simulator UI client. Equals to false by default. * - {boolean} allowTouchEnroll: whether to enroll Touch ID in the Simulator UI client. * Equals to false by default. * - {number} startupTimeout: number of milliseconds to wait until Simulator booting * process is completed. The default timeout will be used if not set explicitly. * - {boolean} isHeadless: whether to start the Simulator in headless mode (with UI * client invisible). `false` by default. */ async run <span class="fstat-no" title="function not covered" >(opts<span class="cstat-no" title="statement not covered" > = {})</span> {</span> <span class="cstat-no" title="statement not covered" > opts = Object.assign({</span> isHeadless: false, allowTouchEnroll: false, startupTimeout: this.startupTimeout, }, opts); const <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >bootSimulator </span>= async () =&gt; {</span> try { await bootDevice(this.udid); } catch (err) { <span class="cstat-no" title="statement not covered" > log.warn(`'xcrun simctl boot ${this.udid}' command has returned non-zero code. The problem was: ${err.stderr}`);</span> } }; const <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >waitForShutdown </span>= async () =&gt; {</span> await waitForCondition(<span class="fstat-no" title="function not covered" >async () =&gt; {</span> const {<span class="cstat-no" title="statement not covered" >state}</span> = await this.stat(); return state === 'Shutdown'; }, {waitMs: SIMULATOR_SHUTDOWN_TIMEOUT, intervalMs: 500}); }; let <span class="cstat-no" title="statement not covered" >shouldWaitForBoot = true;</span> const <span class="cstat-no" title="statement not covered" >startTime = process.hrtime();</span> await startupLock.acquire(this.uiClientBundleId, <span class="fstat-no" title="function not covered" >async () =&gt; {</span> const <span class="cstat-no" title="statement not covered" >stat </span>= await this.stat(); const <span class="cstat-no" title="statement not covered" >serverState = stat.state;</span> const <span class="cstat-no" title="statement not covered" >isServerRunning = serverState === 'Booted';</span> const <span class="cstat-no" title="statement not covered" >isUIClientRunning </span>= await this.isUIClientRunning(); if (opts.isHeadless) { if (isServerRunning &amp;&amp; !isUIClientRunning) { <span class="cstat-no" title="statement not covered" > log.info(`Simulator with UDID ${this.udid} already booted in headless mode.`);</span> <span class="cstat-no" title="statement not covered" > shouldWaitForBoot = false;</span> return; } if (await this.killUIClient()) { // Stopping the UI client also kills all running servers. Sad but true <span class="cstat-no" title="statement not covered" > log.info(`Detected the UI client was running and killed it. Verifying the Simulator is in Shutdown state...`);</span> await waitForShutdown(); } <span class="cstat-no" title="statement not covered" > log.info(`Booting Simulator with UDID ${this.udid} in headless mode. All UI-related capabilities are going to be ignored.`);</span> await bootSimulator(); } else { if (isServerRunning &amp;&amp; isUIClientRunning) { <span class="cstat-no" title="statement not covered" > log.info(`Both Simulator with UDID ${this.udid} and the UI client are currently running`);</span> <span class="cstat-no" title="statement not covered" > shouldWaitForBoot = false;</span> return; } if (['Shutdown', 'Booted'].indexOf(serverState) === -1) { <span class="cstat-no" title="statement not covered" > log.info(`Simulator ${this.udid} is in '${serverState}' state. Trying to shutdown...`);</span> try { await this.shutdown(); } catch (err) { <span class="cstat-no" title="statement not covered" > log.warn(`Error on Simulator shutdown: ${err.message}`);</span> } await waitForShutdown(); } // Set the 'Touch ID Enroll' key bindings before the Simulator starts if (opts.allowTouchEnroll) { await setTouchEnrollKey(); } <span class="cstat-no" title="statement not covered" > log.info(`Booting Simulator with UDID ${this.udid}...`);</span> await bootSimulator(); if (!isUIClientRunning) { await this.startUIClient(opts); } } }); &nbsp; if (shouldWaitForBoot) { await this.waitForBoot(opts.startupTimeout); <span class="cstat-no" title="statement not covered" > log.info(`Simulator with UDID ${this.udid} booted in ${process.hrtime(startTime)[0]} seconds`);</span> } } &nbsp; /** * Shut down the current Simulator. * @override */ async shutdown <span class="fstat-no" title="function not covered" >() {</span> await restoreTouchEnrollShortcuts(); const {<span class="cstat-no" title="statement not covered" >state}</span> = await this.stat(); if (state === 'Shutdown') { return; } await simctlShutdown(this.udid); } &nbsp; async enrollTouchID <span class="fstat-no" title="function not covered" >() {</span> await backupTouchEnrollShortcuts(); await super.enrollTouchID(); } &nbsp; /** * Reset the current Simulator to the clean state. * @override */ async clean <span class="fstat-no" title="function not covered" >() {</span> <span class="cstat-no" title="statement not covered" > log.info(`Cleaning simulator ${this.udid}`);</span> await eraseDevice(this.udid, 10000); } } &nbsp; export default SimulatorXcode9; &nbsp;</pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Fri Aug 11 2017 08:34:01 GMT-0400 (EDT) </div> </div> <script src="../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../sorter.js"></script> </body> </html>