appium-ios-simulator
Version:
iOS Simulator interface for Appium.
290 lines (222 loc) • 17 kB
JavaScript
require('source-map-support').install();
;
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