appium-adb-test
Version:
Android Debug Bridge interface
716 lines (611 loc) • 69.3 kB
JavaScript
'use strict';
var _regeneratorRuntime = require('babel-runtime/regenerator')['default'];
var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default'];
var _this = this;
var _chai = require('chai');
var _chai2 = _interopRequireDefault(_chai);
var _chaiAsPromised = require('chai-as-promised');
var _chaiAsPromised2 = _interopRequireDefault(_chaiAsPromised);
var _ = require('../..');
var _2 = _interopRequireDefault(_);
var _appiumTestSupport = require('appium-test-support');
_chai2['default'].use(_chaiAsPromised2['default']);
var should = _chai2['default'].should(),
pkg = 'com.example.android.contactmanager',
uri = 'content://contacts/people/1',
act = '.ContactManager',
startAppOptions = { stopApp: true, action: 'action', category: 'cat',
flags: 'flags', pkg: 'pkg', activity: 'act',
optionalIntentArguments: '-x options -y option argument -z option arg with spaces' },
cmd = ['am', 'start', '-W', '-n', 'pkg/act', '-S', '-a', 'action', '-c', 'cat', '-f', 'flags', '-x', 'options', '-y', 'option', 'argument', '-z', 'option', 'arg with spaces'],
language = 'en',
country = 'US',
locale = 'en-US';
describe('Apk-utils', function () {
var adb = new _2['default']();
describe('isAppInstalled', (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it('should parse correctly and return true', function callee$2$0() {
var pkg;
return _regeneratorRuntime.async(function callee$2$0$(context$3$0) {
while (1) switch (context$3$0.prev = context$3$0.next) {
case 0:
pkg = 'dummy.package';
mocks.adb.expects('getApiLevel').once().withExactArgs().returns("17");
mocks.adb.expects('shell').once().withExactArgs(['pm', 'list', 'packages', '-3', pkg]).returns('package:' + pkg);
context$3$0.next = 5;
return _regeneratorRuntime.awrap(adb.isAppInstalled(pkg));
case 5:
context$3$0.sent.should.be['true'];
mocks.adb.verify();
case 7:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should parse correctly and return false', function callee$2$0() {
var pkg;
return _regeneratorRuntime.async(function callee$2$0$(context$3$0) {
while (1) switch (context$3$0.prev = context$3$0.next) {
case 0:
pkg = 'dummy.package';
mocks.adb.expects('getApiLevel').once().withExactArgs().returns("17");
mocks.adb.expects('shell').once().withExactArgs(['pm', 'list', 'packages', '-3', pkg]).returns("");
context$3$0.next = 5;
return _regeneratorRuntime.awrap(adb.isAppInstalled(pkg));
case 5:
context$3$0.sent.should.be['false'];
mocks.adb.verify();
case 7:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
describe('getFocusedPackageAndActivity', (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it('should parse correctly and return package and activity', function callee$2$0() {
var _ref, appPackage, appActivity;
return _regeneratorRuntime.async(function callee$2$0$(context$3$0) {
while (1) switch (context$3$0.prev = context$3$0.next) {
case 0:
mocks.adb.expects('shell').once().withExactArgs(['dumpsys', 'window', 'windows']).returns('mFocusedApp=AppWindowToken{38600b56 token=Token{9ea1171 ' + ('ActivityRecord{2 u ' + pkg + '/' + act + ' t181}}}'));
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.getFocusedPackageAndActivity());
case 3:
_ref = context$3$0.sent;
appPackage = _ref.appPackage;
appActivity = _ref.appActivity;
appPackage.should.equal(pkg);
appActivity.should.equal(act);
mocks.adb.verify();
case 9:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should parse correctly and return package and activity when a comma is present', function callee$2$0() {
var _ref2, appPackage, appActivity;
return _regeneratorRuntime.async(function callee$2$0$(context$3$0) {
while (1) switch (context$3$0.prev = context$3$0.next) {
case 0:
mocks.adb.expects('shell').once().withExactArgs(['dumpsys', 'window', 'windows']).returns('mFocusedApp=AppWindowToken{20fe217e token=Token{21878739 ' + ('ActivityRecord{16425300 u0 ' + pkg + '/' + act + ', isShadow:false t10}}}'));
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.getFocusedPackageAndActivity());
case 3:
_ref2 = context$3$0.sent;
appPackage = _ref2.appPackage;
appActivity = _ref2.appActivity;
appPackage.should.equal(pkg);
appActivity.should.equal(act);
mocks.adb.verify();
case 9:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should parse correctly and return null', function callee$2$0() {
var _ref3, appPackage, appActivity;
return _regeneratorRuntime.async(function callee$2$0$(context$3$0) {
while (1) switch (context$3$0.prev = context$3$0.next) {
case 0:
mocks.adb.expects('shell').once().withExactArgs(['dumpsys', 'window', 'windows']).returns('mFocusedApp=null');
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.getFocusedPackageAndActivity());
case 3:
_ref3 = context$3$0.sent;
appPackage = _ref3.appPackage;
appActivity = _ref3.appActivity;
should.not.exist(appPackage);
should.not.exist(appActivity);
mocks.adb.verify();
case 9:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
describe('waitForActivityOrNot', (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it('should call shell once and should return', 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:
mocks.adb.expects('shell').once().withExactArgs(['dumpsys', 'window', 'windows']).returns('mFocusedApp=AppWindowToken{38600b56 token=Token{9ea1171 ' + ('ActivityRecord{2 u ' + pkg + '/' + act + ' t181}}}'));
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.waitForActivityOrNot(pkg, act, false));
case 3:
mocks.adb.verify();
case 4:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should call shell multiple times and return', 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:
mocks.adb.expects('shell').onCall(0).returns('mFocusedApp=AppWindowToken{38600b56 token=Token{9ea1171 ' + 'ActivityRecord{2c7c4318 u0 foo/bar t181}}}');
mocks.adb.expects('shell').returns('mFocusedApp=AppWindowToken{38600b56 token=Token{9ea1171 ' + 'ActivityRecord{2c7c4318 u0 com.example.android.contactmanager/.ContactManager t181}}}');
context$3$0.next = 4;
return _regeneratorRuntime.awrap(adb.waitForActivityOrNot(pkg, act, false));
case 4:
mocks.adb.verify();
case 5:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should call shell once return for not', 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:
mocks.adb.expects('shell').once().withExactArgs(['dumpsys', 'window', 'windows']).returns('mFocusedApp=AppWindowToken{38600b56 token=Token{9ea1171 ' + 'ActivityRecord{c 0 foo/bar t181}}}');
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.waitForActivityOrNot(pkg, act, true));
case 3:
mocks.adb.verify();
case 4:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should call shell multiple times and return for not', 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:
mocks.adb.expects('shell').onCall(0).returns('mFocusedApp=AppWindowToken{38600b56 token=Token{9ea1171 ' + ('ActivityRecord{2 u ' + pkg + '/' + act + ' t181}}}'));
mocks.adb.expects('shell').returns('mFocusedApp=AppWindowToken{38600b56 token=Token{9ea1171 ' + 'ActivityRecord{2c7c4318 u0 foo/bar t181}}}');
context$3$0.next = 4;
return _regeneratorRuntime.awrap(adb.waitForActivityOrNot(pkg, act, true));
case 4:
mocks.adb.verify();
case 5:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should be able to get first of a comma-separated list of activities', 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:
mocks.adb.expects('shell').once().withExactArgs(['dumpsys', 'window', 'windows']).returns('mFocusedApp=AppWindowToken{38600b56 token=Token{9ea1171 ' + ('ActivityRecord{2 u ' + pkg + '/.ContactManager t181}}}'));
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.waitForActivityOrNot(pkg, '.ContactManager, .OtherManager', false));
case 3:
mocks.adb.verify();
case 4:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should be able to get second of a comma-separated list of activities', 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:
mocks.adb.expects('shell').once().withExactArgs(['dumpsys', 'window', 'windows']).returns('mFocusedApp=AppWindowToken{38600b56 token=Token{9ea1171 ' + ('ActivityRecord{2 u ' + pkg + '/.OtherManager t181}}}'));
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.waitForActivityOrNot(pkg, '.ContactManager, .OtherManager', false));
case 3:
mocks.adb.verify();
case 4:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should fail if no activity in a comma-separated list is available', 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:
mocks.adb.expects('shell').atLeast(1).withExactArgs(['dumpsys', 'window', 'windows']).returns('mFocusedApp=AppWindowToken{38600b56 token=Token{9ea1171 ' + ('ActivityRecord{2 u ' + pkg + '/' + act + ' t181}}}'));
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.waitForActivityOrNot(pkg, '.SuperManager, .OtherManager', false, 1000).should.eventually.be.rejected);
case 3:
mocks.adb.verify();
case 4:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
describe('waitForActivity', (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it('should call waitForActivityOrNot with correct arguments', 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:
mocks.adb.expects('waitForActivityOrNot').once().withExactArgs(pkg, act, false, 20000).returns('');
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.waitForActivity(pkg, act));
case 3:
mocks.adb.verify();
case 4:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
describe('waitForNotActivity', (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it('should call waitForActivityOrNot with correct arguments', 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:
mocks.adb.expects('waitForActivityOrNot').once().withExactArgs(pkg, act, true, 20000).returns('');
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.waitForNotActivity(pkg, act));
case 3:
mocks.adb.verify();
case 4:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
describe('uninstallApk', (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it('should call forceStop and adbExec with correct arguments', 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:
mocks.adb.expects('forceStop').once().withExactArgs(pkg).returns('');
mocks.adb.expects('adbExec').once().withExactArgs(['uninstall', pkg], { timeout: 20000 }).returns('Success');
context$3$0.next = 4;
return _regeneratorRuntime.awrap(adb.uninstallApk(pkg));
case 4:
context$3$0.sent.should.be['true'];
mocks.adb.verify();
case 6:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
describe('installFromDevicePath', (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it('should call forceStop and adbExec with correct arguments', 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:
mocks.adb.expects('shell').once().withExactArgs(['pm', 'install', '-r', 'foo'], {}).returns('');
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.installFromDevicePath('foo'));
case 3:
mocks.adb.verify();
case 4:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
describe('install', (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it('should call forceStop and adbExec with correct arguments', 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:
mocks.adb.expects('adbExec').once().withExactArgs(['install', '-r', 'foo'], { timeout: 60000 }).returns('');
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.install('foo'));
case 3:
mocks.adb.verify();
case 4:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should call forceStop and adbExec with correct arguments when not replacing', 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:
mocks.adb.expects('adbExec').once().withExactArgs(['install', 'foo'], { timeout: 60000 }).returns('');
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.install('foo', false));
case 3:
mocks.adb.verify();
case 4:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
describe('startUri', (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it('should fail if uri or pkg are not provided', 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(adb.startUri().should.eventually.be.rejectedWith(/arguments are required/));
case 2:
context$3$0.next = 4;
return _regeneratorRuntime.awrap(adb.startUri('foo').should.eventually.be.rejectedWith(/arguments are required/));
case 4:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should build a call to a VIEW intent with the uri', 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:
mocks.adb.expects('shell').once().withExactArgs(['am', 'start', '-W', '-a', 'android.intent.action.VIEW', '-d', uri, pkg]);
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.startUri(uri, pkg));
case 3:
mocks.adb.verify();
case 4:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
describe('startApp', (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it('should call getApiLevel and shell with correct arguments', 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:
mocks.adb.expects('getApiLevel').once().withExactArgs().returns('17');
mocks.adb.expects('shell').once().withExactArgs(cmd).returns('');
context$3$0.next = 4;
return _regeneratorRuntime.awrap(adb.startApp(startAppOptions));
case 4:
mocks.adb.verify();
case 5:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should call getApiLevel and shell with correct arguments', 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:
mocks.adb.expects('getApiLevel').twice().returns('17');
mocks.adb.expects('shell').onCall(0).returns('Error: Activity class foo does not exist');
mocks.adb.expects('shell').returns('');
context$3$0.next = 5;
return _regeneratorRuntime.awrap(adb.startApp(startAppOptions));
case 5:
mocks.adb.verify();
case 6:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
describe('getDeviceLanguage', (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it('should call shell one time with correct args and return language when API < 23', 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:
mocks.adb.expects("getApiLevel").returns(18);
mocks.adb.expects("shell").once().withExactArgs(['getprop', 'persist.sys.language']).returns(language);
context$3$0.next = 4;
return _regeneratorRuntime.awrap(adb.getDeviceLanguage());
case 4:
context$3$0.t0 = language;
context$3$0.sent.should.equal(context$3$0.t0);
mocks.adb.verify();
case 7:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should call shell two times with correct args and return language when API < 23', 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:
mocks.adb.expects("getApiLevel").returns(18);
mocks.adb.expects("shell").once().withExactArgs(['getprop', 'persist.sys.language']).returns('');
mocks.adb.expects("shell").once().withExactArgs(['getprop', 'ro.product.locale.language']).returns(language);
context$3$0.next = 5;
return _regeneratorRuntime.awrap(adb.getDeviceLanguage());
case 5:
context$3$0.t0 = language;
context$3$0.sent.should.equal(context$3$0.t0);
mocks.adb.verify();
case 8:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should call shell one time with correct args and return language when API = 23', 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:
mocks.adb.expects("getApiLevel").returns(23);
mocks.adb.expects("shell").once().withExactArgs(['getprop', 'persist.sys.locale']).returns(locale);
context$3$0.next = 4;
return _regeneratorRuntime.awrap(adb.getDeviceLanguage());
case 4:
context$3$0.t0 = language;
context$3$0.sent.should.equal(context$3$0.t0);
mocks.adb.verify();
case 7:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should call shell two times with correct args and return language when API = 23', 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:
mocks.adb.expects("getApiLevel").returns(23);
mocks.adb.expects("shell").once().withExactArgs(['getprop', 'persist.sys.locale']).returns('');
mocks.adb.expects("shell").once().withExactArgs(['getprop', 'ro.product.locale']).returns(locale);
context$3$0.next = 5;
return _regeneratorRuntime.awrap(adb.getDeviceLanguage());
case 5:
context$3$0.t0 = language;
context$3$0.sent.should.equal(context$3$0.t0);
mocks.adb.verify();
case 8:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
describe('setDeviceLanguage', (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it('should call shell one time with correct args when API < 23', 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:
mocks.adb.expects("shell").once().withExactArgs(['setprop', 'persist.sys.language', language]).returns("");
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.setDeviceLanguage(language));
case 3:
mocks.adb.verify();
case 4:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
describe('getDeviceCountry', (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it('should call shell one time with correct args and return country', 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:
mocks.adb.expects("shell").once().withExactArgs(['getprop', 'persist.sys.country']).returns(country);
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.getDeviceCountry());
case 3:
context$3$0.t0 = country;
context$3$0.sent.should.equal(context$3$0.t0);
mocks.adb.verify();
case 6:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should call shell two times with correct args and return country', 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:
mocks.adb.expects("shell").once().withExactArgs(['getprop', 'persist.sys.country']).returns('');
mocks.adb.expects("shell").once().withExactArgs(['getprop', 'ro.product.locale.region']).returns(country);
context$3$0.next = 4;
return _regeneratorRuntime.awrap(adb.getDeviceCountry());
case 4:
context$3$0.t0 = country;
context$3$0.sent.should.equal(context$3$0.t0);
mocks.adb.verify();
case 7:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
describe('setDeviceCountry', (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it('should call shell one time with correct args', 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:
mocks.adb.expects("shell").once().withExactArgs(['setprop', 'persist.sys.country', country]).returns("");
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.setDeviceCountry(country));
case 3:
mocks.adb.verify();
case 4:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
describe('getDeviceLocale', (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it('should call shell one time with correct args and return locale', 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:
mocks.adb.expects("shell").once().withExactArgs(['getprop', 'persist.sys.locale']).returns(locale);
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.getDeviceLocale());
case 3:
context$3$0.t0 = locale;
context$3$0.sent.should.equal(context$3$0.t0);
mocks.adb.verify();
case 6:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
it('should call shell two times with correct args and return locale', 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:
mocks.adb.expects("shell").once().withExactArgs(['getprop', 'persist.sys.locale']).returns('');
mocks.adb.expects("shell").once().withExactArgs(['getprop', 'ro.product.locale']).returns(locale);
context$3$0.next = 4;
return _regeneratorRuntime.awrap(adb.getDeviceLocale());
case 4:
context$3$0.t0 = locale;
context$3$0.sent.should.equal(context$3$0.t0);
mocks.adb.verify();
case 7:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
describe('setDeviceLocale', (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it('should call shell one time with correct args', 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:
mocks.adb.expects("shell").once().withExactArgs(['setprop', 'persist.sys.locale', locale]).returns("");
context$3$0.next = 3;
return _regeneratorRuntime.awrap(adb.setDeviceLocale(locale));
case 3:
mocks.adb.verify();
case 4:
case 'end':
return context$3$0.stop();
}
}, null, _this);
});
}));
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvdW5pdC9hcGstdXRpbHMtc3BlY3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7b0JBQWlCLE1BQU07Ozs7OEJBQ0ksa0JBQWtCOzs7O2dCQUM3QixPQUFPOzs7O2lDQUNHLHFCQUFxQjs7QUFHL0Msa0JBQUssR0FBRyw2QkFBZ0IsQ0FBQztBQUN6QixJQUFNLE1BQU0sR0FBRyxrQkFBSyxNQUFNLEVBQUU7SUFDdEIsR0FBRyxHQUFHLG9DQUFvQztJQUMxQyxHQUFHLEdBQUcsNkJBQTZCO0lBQ25DLEdBQUcsR0FBRyxpQkFBaUI7SUFDdkIsZUFBZSxHQUFHLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLO0FBQ2hELE9BQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSztBQUMzQyx5QkFBdUIsRUFBRSx5REFBeUQsRUFBQztJQUN0RyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQ3ZFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFDMUQsSUFBSSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQztJQUN6QyxRQUFRLEdBQUcsSUFBSTtJQUNmLE9BQU8sR0FBRyxJQUFJO0lBQ2QsTUFBTSxHQUFHLE9BQU8sQ0FBQzs7QUFFdkIsUUFBUSxDQUFDLFdBQVcsRUFBRSxZQUFNO0FBQzFCLE1BQUksR0FBRyxHQUFHLG1CQUFTLENBQUM7QUFDcEIsVUFBUSxDQUFDLGdCQUFnQixFQUFFLGtDQUFVLEVBQUMsR0FBRyxFQUFILEdBQUcsRUFBQyxFQUFFLFVBQUMsS0FBSyxFQUFLO0FBQ3JELE1BQUUsQ0FBQyx3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QUFDLENBQUM7OzZDQUNULEdBQUcsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDOzs7QUFDakMsaUJBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7Ozs7Ozs7S0FDcEIsQ0FBQyxDQUFDO0dBQ0osQ0FBQyxDQUFDLENBQUM7Q0FDTCxDQUFDLENBQUMiLCJmaWxlIjoidGVzdC91bml0L2Fway11dGlscy1zcGVjcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFpIGZyb20gJ2NoYWknO1xyXG5pbXBvcnQgY2hhaUFzUHJvbWlzZWQgZnJvbSAnY2hhaS1hcy1wcm9taXNlZCc7XHJcbmltcG9ydCBBREIgZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgeyB3aXRoTW9ja3MgfSBmcm9tICdhcHBpdW0tdGVzdC1zdXBwb3J0JztcclxuXHJcblxyXG5jaGFpLnVzZShjaGFpQXNQcm9taXNlZCk7XHJcbmNvbnN0IHNob3VsZCA9IGNoYWkuc2hvdWxkKCksXHJcbiAgICAgIHBrZyA9ICdjb20uZXhhbXBsZS5hbmRyb2lkLmNvbnRhY3RtYW5hZ2VyJyxcclxuICAgICAgdXJpID0gJ2NvbnRlbnQ6Ly9jb250YWN0cy9wZW9wbGUvMScsXHJcbiAgICAgIGFjdCA9ICcuQ29udGFjdE1hbmFnZXInLFxyXG4gICAgICBzdGFydEFwcE9wdGlvbnMgPSB7c3RvcEFwcDogdHJ1ZSwgYWN0aW9uOiAnYWN0aW9uJywgY2F0ZWdvcnk6ICdjYXQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6ICdmbGFncycsIHBrZzogJ3BrZycsIGFjdGl2aXR5OiAnYWN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzOiAnLXggb3B0aW9ucyAteSBvcHRpb24gYXJndW1lbnQgLXogb3B0aW9uIGFyZyB3aXRoIHNwYWNlcyd9LFxyXG4gICAgICBjbWQgPSBbJ2FtJywgJ3N0YXJ0JywgJy1XJywgJy1uJywgJ3BrZy9hY3QnLCAnLVMnLCAnLWEnLCAnYWN0aW9uJywgJy1jJywgJ2NhdCcsXHJcbiAgICAgICAgICAgICAnLWYnLCAnZmxhZ3MnLCAnLXgnLCAnb3B0aW9ucycsICcteScsICdvcHRpb24nLCAnYXJndW1lbnQnLFxyXG4gICAgICAgICAgICAgJy16JywgJ29wdGlvbicsICdhcmcgd2l0aCBzcGFjZXMnXSxcclxuICAgICAgbGFuZ3VhZ2UgPSAnZW4nLFxyXG4gICAgICBjb3VudHJ5ID0gJ1VTJyxcclxuICAgICAgbG9jYWxlID0gJ2VuLVVTJztcclxuXHJcbmRlc2NyaWJlKCdBcGstdXRpbHMnLCAoKSA9PiB7XHJcbiAgbGV0IGFkYiA9IG5ldyBBREIoKTtcclxuICBkZXNjcmliZSgnaXNBcHBJbnN0YWxsZWQnLCB3aXRoTW9ja3Moe2FkYn0sIChtb2NrcykgPT4ge1xyXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBjb3JyZWN0bHkgYW5kIHJldHVybiB0cnVlJywgYXN5bmMgKCkgPT4ge1xyXG4gICAgICBjb25zdCBwa2cgPSAnZHVtbXkucGFja2FnZSc7XHJcbiAgICAgIG1vY2tzLmFkYi5leHBlY3RzKCdnZXRBcGlMZXZlbCcpXHJcbiAgICAgICAgLm9uY2UoKS53aXRoRXhhY3RBcmdzKClcclxuICAgICAgICAucmV0dXJucyhcIjE3XCIpO1xyXG4gICAgICBtb2Nrcy5hZGIuZXhwZWN0cygnc2hlbGwnKVxyXG4gICAgICAgIC5vbmNlKCkud2l0aEV4YWN0QXJncyhbJ3BtJywgJ2xpc3QnLCAncGFja2FnZXMnLCAnLTMnLCBwa2ddKVxyXG4gICAgICAg