UNPKG

appium-ios-simulator

Version:
290 lines (222 loc) 17 kB
require('source-map-support').install(); 'use strict'; var _Promise = require('babel-runtime/core-js/promise')['default']; var _regeneratorRuntime = require('babel-runtime/regenerator')['default']; var _getIterator = require('babel-runtime/core-js/get-iterator')['default']; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; var _interopRequireWildcard = require('babel-runtime/helpers/interop-require-wildcard')['default']; var _this = this; var _chai = require('chai'); var _chai2 = _interopRequireDefault(_chai); var _chaiAsPromised = require('chai-as-promised'); var _chaiAsPromised2 = _interopRequireDefault(_chaiAsPromised); var _sinon = require('sinon'); var _sinon2 = _interopRequireDefault(_sinon); var _bluebird = require('bluebird'); var _bluebird2 = _interopRequireDefault(_bluebird); var _teen_process = require('teen_process'); var TeenProcess = _interopRequireWildcard(_teen_process); var _appiumXcode = require('appium-xcode'); var _appiumXcode2 = _interopRequireDefault(_appiumXcode); var _nodeSimctl = require('node-simctl'); var nodeSimctl = _interopRequireWildcard(_nodeSimctl); var _ = require('../..'); var _assetsDeviceList = require('../assets/deviceList'); _chai2['default'].should(); _chai2['default'].use(_chaiAsPromised2['default']); var XCODE_VERSION_7 = { versionString: '7.1.1', versionFloat: 7.1, major: 7, minor: 1, patch: 1 }; var XCODE_VERSION_6 = { versionString: '6.1.1', versionFloat: 6.1, major: 6, minor: 1, patch: 1 }; describe('util', function () { var execStub = undefined; var xcodeMock = undefined; var getDevicesStub = undefined; beforeEach(function () { execStub = _sinon2['default'].stub(TeenProcess, 'exec'); xcodeMock = _sinon2['default'].mock(_appiumXcode2['default']); getDevicesStub = _sinon2['default'].stub(nodeSimctl, 'getDevices'); getDevicesStub.returns(_Promise.resolve(_assetsDeviceList.devices)); }); afterEach(function () { execStub.restore(); xcodeMock.restore(); nodeSimctl.getDevices.restore(); }); describe('killAllSimulators', function () { it('should call exec with Simulator for Xcode 7', function callee$2$0() { return _regeneratorRuntime.async(function callee$2$0$(context$3$0) { while (1) switch (context$3$0.prev = context$3$0.next) { case 0: xcodeMock.expects('getVersion').withArgs(true).returns(_Promise.resolve(XCODE_VERSION_7)); context$3$0.next = 3; return _regeneratorRuntime.awrap((0, _.killAllSimulators)()); case 3: execStub.calledOnce.should.be['true']; case 4: case 'end': return context$3$0.stop(); } }, null, _this); }); it('should call exec with iOS Simulator for Xcode 6', function callee$2$0() { return _regeneratorRuntime.async(function callee$2$0$(context$3$0) { while (1) switch (context$3$0.prev = context$3$0.next) { case 0: xcodeMock.expects('getVersion').withArgs(true).returns(_Promise.resolve(XCODE_VERSION_6)); context$3$0.next = 3; return _regeneratorRuntime.awrap((0, _.killAllSimulators)()); case 3: execStub.calledOnce.should.be['true']; case 4: case 'end': return context$3$0.stop(); } }, null, _this); }); }); describe('endAllSimulatorDaemons', function () { it('should call exec five times to stop and remove each service', function callee$2$0() { return _regeneratorRuntime.async(function callee$2$0$(context$3$0) { while (1) switch (context$3$0.prev = context$3$0.next) { case 0: context$3$0.next = 2; return _regeneratorRuntime.awrap((0, _.endAllSimulatorDaemons)()); case 2: execStub.callCount.should.equal(5); case 3: case 'end': return context$3$0.stop(); } }, null, _this); }); it('should ignore all errors', function callee$2$0() { return _regeneratorRuntime.async(function callee$2$0$(context$3$0) { while (1) switch (context$3$0.prev = context$3$0.next) { case 0: execStub.throws(); context$3$0.next = 3; return _regeneratorRuntime.awrap((0, _.endAllSimulatorDaemons)().should.not.be.rejected); case 3: execStub.callCount.should.equal(5); execStub.threw().should.be['true']; case 5: case 'end': return context$3$0.stop(); } }, null, _this); }); }); describe('simExists', function () { it('returns true if device is found', function callee$2$0() { var existence, results, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, result; return _regeneratorRuntime.async(function callee$2$0$(context$3$0) { while (1) switch (context$3$0.prev = context$3$0.next) { case 0: existence = [(0, _.simExists)('C09B34E5-7DCB-442E-B79C-AB6BC0357417'), (0, _.simExists)('FA5C971D-4E05-4AA3-B48B-C9619C7453BE'), (0, _.simExists)('E46EFA59-E2B4-4FF9-B290-B61F3CFECC65'), (0, _.simExists)('F33783B2-9EE9-4A99-866E-E126ADBAD410')]; context$3$0.next = 3; return _regeneratorRuntime.awrap(_bluebird2['default'].all(existence)); case 3: results = context$3$0.sent; _iteratorNormalCompletion = true; _didIteratorError = false; _iteratorError = undefined; context$3$0.prev = 7; for (_iterator = _getIterator(results); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { result = _step.value; result.should.be['true']; } context$3$0.next = 15; break; case 11: context$3$0.prev = 11; context$3$0.t0 = context$3$0['catch'](7); _didIteratorError = true; _iteratorError = context$3$0.t0; case 15: context$3$0.prev = 15; context$3$0.prev = 16; if (!_iteratorNormalCompletion && _iterator['return']) { _iterator['return'](); } case 18: context$3$0.prev = 18; if (!_didIteratorError) { context$3$0.next = 21; break; } throw _iteratorError; case 21: return context$3$0.finish(18); case 22: return context$3$0.finish(15); case 23: case 'end': return context$3$0.stop(); } }, null, _this, [[7, 11, 15, 23], [16,, 18, 22]]); }); it('returns false if device is not found', function callee$2$0() { var existence, results, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, result; return _regeneratorRuntime.async(function callee$2$0$(context$3$0) { while (1) switch (context$3$0.prev = context$3$0.next) { case 0: existence = []; existence.push((0, _.simExists)('A94E4CD7-D412-4198-BCD4-26799672975E')); existence.push((0, _.simExists)('asdf')); existence.push((0, _.simExists)(4)); context$3$0.next = 6; return _regeneratorRuntime.awrap(_bluebird2['default'].all(existence)); case 6: results = context$3$0.sent; _iteratorNormalCompletion2 = true; _didIteratorError2 = false; _iteratorError2 = undefined; context$3$0.prev = 10; for (_iterator2 = _getIterator(results); !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { result = _step2.value; result.should.be['false']; } context$3$0.next = 18; break; case 14: context$3$0.prev = 14; context$3$0.t0 = context$3$0['catch'](10); _didIteratorError2 = true; _iteratorError2 = context$3$0.t0; case 18: context$3$0.prev = 18; context$3$0.prev = 19; if (!_iteratorNormalCompletion2 && _iterator2['return']) { _iterator2['return'](); } case 21: context$3$0.prev = 21; if (!_didIteratorError2) { context$3$0.next = 24; break; } throw _iteratorError2; case 24: return context$3$0.finish(21); case 25: return context$3$0.finish(18); case 26: case 'end': return context$3$0.stop(); } }, null, _this, [[10, 14, 18, 26], [19,, 21, 25]]); }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvdW5pdC91dGlscy1zcGVjcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O29CQUVpQixNQUFNOzs7OzhCQUNJLGtCQUFrQjs7OztxQkFDM0IsT0FBTzs7Ozt3QkFDWCxVQUFVOzs7OzRCQUNLLGNBQWM7O0lBQS9CLFdBQVc7OzJCQUNMLGNBQWM7Ozs7MEJBQ0osYUFBYTs7SUFBN0IsVUFBVTs7Z0JBQytDLE9BQU87O2dDQUNwRCxzQkFBc0I7O0FBRzlDLGtCQUFLLE1BQU0sRUFBRSxDQUFDO0FBQ2Qsa0JBQUssR0FBRyw2QkFBZ0IsQ0FBQzs7QUFFekIsSUFBTSxlQUFlLEdBQUc7QUFDdEIsZUFBYSxFQUFFLE9BQU87QUFDdEIsY0FBWSxFQUFFLEdBQUc7QUFDakIsT0FBSyxFQUFFLENBQUM7QUFDUixPQUFLLEVBQUUsQ0FBQztBQUNSLE9BQUssRUFBRSxDQUFDO0NBQ1QsQ0FBQztBQUNGLElBQU0sZUFBZSxHQUFHO0FBQ3RCLGVBQWEsRUFBRSxPQUFPO0FBQ3RCLGNBQVksRUFBRSxHQUFHO0FBQ2pCLE9BQUssRUFBRSxDQUFDO0FBQ1IsT0FBSyxFQUFFLENBQUM7QUFDUixPQUFLLEVBQUUsQ0FBQztDQUNULENBQUM7O0FBRUYsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFNO0FBQ3JCLE1BQUksUUFBUSxZQUFBLENBQUM7QUFDYixNQUFJLFNBQVMsWUFBQSxDQUFDO0FBQ2QsTUFBSSxjQUFjLFlBQUEsQ0FBQzs7QUFFbkIsWUFBVSxDQUFDLFlBQU07QUFDZixZQUFRLEdBQUcsbUJBQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzQyxhQUFTLEdBQUcsbUJBQU0sSUFBSSwwQkFBTyxDQUFDO0FBQzlCLGtCQUFjLEdBQUcsbUJBQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN0RCxrQkFBYyxDQUFDLE9BQU8sQ0FBQyxTQUFRLE9BQU8sMkJBQVMsQ0FBQyxDQUFDO0dB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QU87Ozs7OztBQUVYLDJDQUFtQixPQUFPLHlHQUFFO0FBQW5CLG9CQUFNOztBQUNiLG9CQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBTSxDQUFDO2FBQ3hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FDSCxDQUFDLENBQUM7R0FDSixDQUFDLENBQUM7Q0FDSixDQUFDLENBQUMiLCJmaWxlIjoidGVzdC91bml0L3V0aWxzLXNwZWNzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1vY2hhXG5cbmltcG9ydCBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IGNoYWlBc1Byb21pc2VkIGZyb20gJ2NoYWktYXMtcHJvbWlzZWQnO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCAqIGFzIFRlZW5Qcm9jZXNzIGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeGNvZGUgZnJvbSAnYXBwaXVtLXhjb2RlJztcbmltcG9ydCAqIGFzIG5vZGVTaW1jdGwgZnJvbSAnbm9kZS1zaW1jdGwnO1xuaW1wb3J0IHsga2lsbEFsbFNpbXVsYXRvcnMsIGVuZEFsbFNpbXVsYXRvckRhZW1vbnMsIHNpbUV4aXN0cyB9IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IGRldmljZXMgfSBmcm9tICcuLi9hc3NldHMvZGV2aWNlTGlzdCc7XG5cblxuY2hhaS5zaG91bGQoKTtcbmNoYWkudXNlKGNoYWlBc1Byb21pc2VkKTtcblxuY29uc3QgWENPREVfVkVSU0lPTl83ID0ge1xuICB2ZXJzaW9uU3RyaW5nOiAnNy4xLjEnLFxuICB2ZXJzaW9uRmxvYXQ6IDcuMSxcbiAgbWFqb3I6IDcsXG4gIG1pbm9yOiAxLFxuICBwYXRjaDogMVxufTtcbmNvbnN0IFhDT0RFX1ZFUlNJT05fNiA9IHtcbiAgdmVyc2lvblN0cmluZzogJzYuMS4xJyxcbiAgdmVyc2lvbkZsb2F0OiA2LjEsXG4gIG1ham9yOiA2LFxuICBtaW5vcjogMSxcbiAgcGF0Y2g6IDFcbn07XG5cbmRlc2NyaWJlKCd1dGlsJywgKCkgPT4ge1xuICBsZXQgZXhlY1N0dWI7XG4gIGxldCB4Y29kZU1vY2s7XG4gIGxldCBnZXREZXZpY2VzU3R1YjtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBleGVjU3R1YiA9IHNpbm9uLnN0dWIoVGVlblByb2Nlc3MsICdleGVjJyk7XG4gICAgeGNvZGVNb2NrID0gc2lub24ubW9jayh4Y29kZSk7XG4gICAgZ2V0RGV2aWNlc1N0dWIgPSBzaW5vbi5zdHViKG5vZGVTaW1jdGwsICdnZXREZXZpY2VzJyk7XG4gICAgZ2V0RGV2aWNlc1N0dWIucmV0dXJucyhQcm9taXNlLnJlc29sdmUoZGV2aWNlcykpO1xuICB9KTtcbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBleGVjU3R1Yi5yZXN0b3JlKCk7XG4gICAgeGNvZGVNb2NrLnJlc3RvcmUoKTtcbiAgICBub2RlU2ltY3RsLmdldERldmljZXMucmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgna2lsbEFsbFNpbXVsYXRvcnMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjYWxsIGV4ZWMgd2l0aCBTaW11bGF0b3IgZm9yIFhjb2RlIDcnLCBhc3luYyAoKSA9PiB7XG4gICAgICB4Y29kZU1vY2suZXhwZWN0cygnZ2V0VmVyc2lvbicpLndpdGhBcmdzKHRydWUpLnJldHVybnMoUHJvbWlzZS5yZXNvbHZlKFhDT0RFX1ZFUlNJT05fNykpO1xuICAgICAgYXdhaXQga2lsbEFsbFNpbXVsYXRvcnMoKTtcbiAgICAgIGV4ZWNTdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWU7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBjYWxsIGV4ZWMgd2l0aCBpT1MgU2ltdWxhdG9yIGZvciBYY29kZSA2JywgYXN5bmMgKCkgPT4ge1xuICAgICAgeGNvZGVNb2NrLmV4cGVjdHMoJ2dldFZlcnNpb24nKS53aXRoQXJncyh0cnVlKS5yZXR1cm5zKFByb21pc2UucmVzb2x2ZShYQ09ERV9WRVJTSU9OXzYpKTtcbiAgICAgIGF3YWl0IGtpbGxBbGxTaW11bGF0b3JzKCk7XG4gICAgICBleGVjU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZW5kQWxsU2ltdWxhdG9yRGFlbW9ucycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNhbGwgZXhlYyBmaXZlIHRpbWVzIHRvIHN0b3AgYW5kIHJlbW92ZSBlYWNoIHNlcnZpY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBlbmRBbGxTaW11bGF0b3JEYWVtb25zKCk7XG4gICAgICBleGVjU3R1Yi5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDUpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgaWdub3JlIGFsbCBlcnJvcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBleGVjU3R1Yi50aHJvd3MoKTtcbiAgICAgIGF3YWl0IGVuZEFsbFNpbXVsYXRvckRhZW1vbnMoKS5zaG91bGQubm90LmJlLnJlamVjdGVkO1xuICAgICAgZXhlY1N0dWIuY2FsbENvdW50LnNob3VsZC5lcXVhbCg1KTtcbiAgICAgIGV4ZWNTdHViLnRocmV3KCkuc2hvdWxkLmJlLnRydWU7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaW1FeGlzdHMnLCAoKSA9PiB7XG5cbiAgICBpdCgncmV0dXJucyB0cnVlIGlmIGRldmljZSBpcyBmb3VuZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBleGlzdGVuY2UgPSBbXG4gICAgICAgc2ltRXhpc3RzKCdDMDlCMzRFNS03RENCLTQ0MkUtQjc5Qy1BQjZCQzAzNTc0MTcnKSxcbiAgICAgICBzaW1FeGlzdHMoJ0ZBNUM5NzFELTRFMDUtNEFBMy1CNDhCLUM5NjE5Qzc0NTNCRScpLFxuICAgICAgIHNpbUV4aXN0cygnRTQ2RUZBNTktRTJCNC00RkY5LUIyOTAtQjYxRjNDRkVDQzY1JyksXG4gICAgICAgc2ltRXhpc3RzKCdGMzM3ODNCMi05RUU5LTRBOTktODY2RS1FMTI2QURCQUQ0MTAnKVxuICAgICBdO1xuXG4gICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBCLmFsbChleGlzdGVuY2UpO1xuXG4gICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZTtcbiAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBmYWxzZSBpZiBkZXZpY2UgaXMgbm90IGZvdW5kJywgYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IGV4aXN0ZW5jZSA9IFtdO1xuICAgICAgIGV4aXN0ZW5jZS5wdXNoKHNpbUV4aXN0cygnQTk0RTRDRDctRDQxMi00MTk4LUJDRDQtMjY3OTk2NzI5NzVFJykpO1xuICAgICAgIGV4aXN0ZW5jZS5wdXNoKHNpbUV4aXN0cygnYXNkZicpKTtcbiAgICAgICBleGlzdGVuY2UucHVzaChzaW1FeGlzdHMoNCkpO1xuXG4gICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBCLmFsbChleGlzdGVuY2UpO1xuXG4gICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgIHJlc3VsdC5zaG91bGQuYmUuZmFsc2U7XG4gICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19