UNPKG

appium-adb-test

Version:

Android Debug Bridge interface

716 lines (611 loc) 69.3 kB
'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