appium-adb-test
Version:
Android Debug Bridge interface
166 lines (135 loc) • 15.6 kB
JavaScript
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']);
_chai2['default'].should();
var emulators = [{ udid: 'emulator-5554', state: 'device', port: 5554 }, { udid: 'emulator-5556', state: 'device', port: 5556 }];
var fingerprint = 1111;
describe('adb emulator commands', function () {
var adb = new _2['default']();
describe("emu", function () {
describe("isEmulatorConnected", (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it("should check emulator is connected", function callee$3$0() {
return _regeneratorRuntime.async(function callee$3$0$(context$4$0) {
while (1) switch (context$4$0.prev = context$4$0.next) {
case 0:
mocks.adb.expects("getConnectedEmulators").atLeast(1).withExactArgs().returns(emulators);
context$4$0.next = 3;
return _regeneratorRuntime.awrap(adb.isEmulatorConnected("emulator-5554"));
case 3:
context$4$0.sent.should.equal(true);
context$4$0.next = 6;
return _regeneratorRuntime.awrap(adb.isEmulatorConnected("emulator-5556"));
case 6:
context$4$0.sent.should.equal(true);
context$4$0.next = 9;
return _regeneratorRuntime.awrap(adb.isEmulatorConnected("emulator-5558"));
case 9:
context$4$0.sent.should.equal(false);
mocks.adb.verify();
case 11:
case 'end':
return context$4$0.stop();
}
}, null, _this);
});
}));
describe("fingerprint", (0, _appiumTestSupport.withMocks)({ adb: adb }, function (mocks) {
it("should emit fingerprint without error", function callee$3$0() {
return _regeneratorRuntime.async(function callee$3$0$(context$4$0) {
while (1) switch (context$4$0.prev = context$4$0.next) {
case 0:
mocks.adb.expects("getConnectedEmulators").atLeast(1).withExactArgs().returns(emulators);
mocks.adb.expects("getApiLevel").atLeast(1).withExactArgs().returns("23");
mocks.adb.expects("setDeviceId").once().withExactArgs("emulator-5554").returns();
mocks.adb.expects("setDeviceId").once().withExactArgs("emulator-5556").returns();
mocks.adb.expects("adbExec").atLeast(1).withExactArgs(["emu", "finger", "touch", fingerprint]).returns("");
context$4$0.next = 7;
return _regeneratorRuntime.awrap(adb.fingerprint(fingerprint));
case 7:
context$4$0.next = 9;
return _regeneratorRuntime.awrap(adb.fingerprint(fingerprint, "emulator-5554"));
case 9:
context$4$0.next = 11;
return _regeneratorRuntime.awrap(adb.fingerprint(fingerprint, "emulator-5556"));
case 11:
mocks.adb.verify();
case 12:
case 'end':
return context$4$0.stop();
}
}, null, _this);
});
it("should throw an error on fingerprint argument undefined", function callee$3$0() {
return _regeneratorRuntime.async(function callee$3$0$(context$4$0) {
while (1) switch (context$4$0.prev = context$4$0.next) {
case 0:
context$4$0.next = 2;
return _regeneratorRuntime.awrap(adb.fingerprint().should.eventually.be.rejected);
case 2:
mocks.adb.verify();
case 3:
case 'end':
return context$4$0.stop();
}
}, null, _this);
});
it("should throw an error on emulator not connected", function callee$3$0() {
return _regeneratorRuntime.async(function callee$3$0$(context$4$0) {
while (1) switch (context$4$0.prev = context$4$0.next) {
case 0:
mocks.adb.expects("getApiLevel").atLeast(1).withExactArgs().returns("23");
mocks.adb.expects("getConnectedEmulators").once().withExactArgs().returns(emulators);
context$4$0.next = 4;
return _regeneratorRuntime.awrap(adb.fingerprint(1111, "emulator-5558").should.eventually.be.rejected);
case 4:
mocks.adb.verify();
case 5:
case 'end':
return context$4$0.stop();
}
}, null, _this);
});
it("should throw an error on no emulators connected", function callee$3$0() {
return _regeneratorRuntime.async(function callee$3$0$(context$4$0) {
while (1) switch (context$4$0.prev = context$4$0.next) {
case 0:
mocks.adb.expects("getApiLevel").atLeast(1).withExactArgs().returns("23");
mocks.adb.expects("getConnectedEmulators").atLeast(1).withExactArgs().returns([]);
context$4$0.next = 4;
return _regeneratorRuntime.awrap(adb.fingerprint(1111).should.eventually.be.rejected);
case 4:
mocks.adb.verify();
case 5:
case 'end':
return context$4$0.stop();
}
}, null, _this);
});
it("should throw an error on emulator Api Level < 23", function callee$3$0() {
return _regeneratorRuntime.async(function callee$3$0$(context$4$0) {
while (1) switch (context$4$0.prev = context$4$0.next) {
case 0:
mocks.adb.expects("getApiLevel").once().withExactArgs().returns("22");
context$4$0.next = 3;
return _regeneratorRuntime.awrap(adb.fingerprint(1111).should.eventually.be.rejected);
case 3:
mocks.adb.verify();
case 4:
case 'end':
return context$4$0.stop();
}
}, null, _this);
});
}));
});
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvdW5pdC9hZGItZW11LWNvbW1hbmRzLXNwZWNzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O29CQUFpQixNQUFNOzs7OzhCQUNJLGtCQUFrQjs7OztnQkFDN0IsT0FBTzs7OztpQ0FDRyxxQkFBcUI7O0FBRy9DLGtCQUFLLEdBQUcsNkJBQWdCLENBQUM7QUFDekIsa0JBQUssTUFBTSxFQUFFLENBQUM7O0FBRWQsSUFBTSxTQUFTLEdBQUcsQ0FDaEIsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUN0RCxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQ3ZELENBQUM7QUFDRixJQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7O0FBRXpCLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxZQUFNO0FBQ3RDLE1BQUksR0FBRyxHQUFHLG1CQUFTLENBQUM7QUFDcEIsVUFBUSxDQUFDLEtBQUssRUFBRSxZQUFNO0FBQ3BCLFlBQVEsQ0FBQyxxQkFBcUIsRUFBRSxrQ0FBVSxFQUFDLEdBQUcsRUFBSCxHQUFHLEVBQUMsRUFBRSxVQUFDLEtBQUssRUFBSztBQUMxRCxRQUFFLENBQUMsb0NBQW9DLEVBQUU7Ozs7QUFDdkMsbUJBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQ3ZDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FDMUIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDOzsrQ0FDZixHQUFHLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDOzs7K0JBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJOzsrQ0FDM0QsR0FBRyxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQzs7OytCQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSTs7K0NBQzNELEdBQUcs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QyxDQUFDO0FBQ2pCLG1CQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUN2QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQzFCLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQzs7K0NBQ1QsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxRQUFROzs7QUFDekQsbUJBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7Ozs7Ozs7T0FDcEIsQ0FBQyxDQUFDO0FBQ0gsUUFBRSxDQUFDLGtEQUFrRCxFQUFFOzs7O0FBQ3JELG1CQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FDN0IsSUFBSSxFQUFFLENBQUMsYUFBYSxFQUFFLENBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7K0NBQ1gsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxRQUFROzs7QUFDekQsbUJBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7Ozs7Ozs7T0FDcEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQyxDQUFDLENBQUM7R0FDTCxDQUFDLENBQUM7Q0FDSixDQUFDLENBQUMiLCJmaWxlIjoidGVzdC91bml0L2FkYi1lbXUtY29tbWFuZHMtc3BlY3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhaSBmcm9tICdjaGFpJztcclxuaW1wb3J0IGNoYWlBc1Byb21pc2VkIGZyb20gJ2NoYWktYXMtcHJvbWlzZWQnO1xyXG5pbXBvcnQgQURCIGZyb20gJy4uLy4uJztcclxuaW1wb3J0IHsgd2l0aE1vY2tzIH0gZnJvbSAnYXBwaXVtLXRlc3Qtc3VwcG9ydCc7XHJcblxyXG5cclxuY2hhaS51c2UoY2hhaUFzUHJvbWlzZWQpO1xyXG5jaGFpLnNob3VsZCgpO1xyXG5cclxuY29uc3QgZW11bGF0b3JzID0gW1xyXG4gIHsgdWRpZDogJ2VtdWxhdG9yLTU1NTQnLCBzdGF0ZTogJ2RldmljZScsIHBvcnQ6IDU1NTQgfSxcclxuICB7IHVkaWQ6ICdlbXVsYXRvci01NTU2Jywgc3RhdGU6ICdkZXZpY2UnLCBwb3J0OiA1NTU2IH0sXHJcbl07XHJcbmNvbnN0IGZpbmdlcnByaW50ID0gMTExMTtcclxuXHJcbmRlc2NyaWJlKCdhZGIgZW11bGF0b3IgY29tbWFuZHMnLCAoKSA9PiB7XHJcbiAgbGV0IGFkYiA9IG5ldyBBREIoKTtcclxuICBkZXNjcmliZShcImVtdVwiLCAoKSA9PiB7XHJcbiAgICBkZXNjcmliZShcImlzRW11bGF0b3JDb25uZWN0ZWRcIiwgd2l0aE1vY2tzKHthZGJ9LCAobW9ja3MpID0+IHtcclxuICAgICAgaXQoXCJzaG91bGQgY2hlY2sgZW11bGF0b3IgaXMgY29ubmVjdGVkXCIsIGFzeW5jICgpID0+IHtcclxuICAgICAgICBtb2Nrcy5hZGIuZXhwZWN0cyhcImdldENvbm5lY3RlZEVtdWxhdG9yc1wiKVxyXG4gICAgICAgICAgLmF0TGVhc3QoMSkud2l0aEV4YWN0QXJncygpXHJcbiAgICAgICAgICAucmV0dXJucyhlbXVsYXRvcnMpO1xyXG4gICAgICAgIChhd2FpdCBhZGIuaXNFbXVsYXRvckNvbm5lY3RlZChcImVtdWxhdG9yLTU1NTRcIikpLnNob3VsZC5lcXVhbCh0cnVlKTtcclxuICAgICAgICAoYXdhaXQgYWRiLmlzRW11bGF0b3JDb25uZWN0ZWQoXCJlbXVsYXRvci01NTU2XCIpKS5zaG91bGQuZXF1YWwodHJ1ZSk7XHJcbiAgICAgICAgKGF3YWl0IGFkYi5pc0VtdWxhdG9yQ29ubmVjdGVkKFwiZW11bGF0b3ItNTU1OFwiKSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcclxuICAgICAgICBtb2Nrcy5hZGIudmVyaWZ5KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSkpO1xyXG4gICAgZGVzY3JpYmUoXCJmaW5nZXJwcmludFwiLCB3aXRoTW9ja3Moe2FkYn0sIChtb2NrcykgPT4ge1xyXG4gICAgICBpdChcInNob3VsZCBlbWl0IGZpbmdlcnByaW50IHdpdGhvdXQgZXJyb3JcIiwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIG1vY2tzLmFkYi5leHBlY3RzKFwiZ2V0Q29ubmVjdGVkRW11bGF0b3JzXCIpXHJcbiAgICAgICAgICAuYXRMZWFzdCgxKS53aXRoRXhhY3RBcmdzKClcclxuICAgICAgICAgIC5yZXR1cm5zKGVtdWxhdG9ycyk7XHJcbiAgICAgICAgbW9ja3MuYWRiLmV4cGVjdHMoXCJnZXRBcGlMZXZlbFwiKVxyXG4gICAgICAgICAgLmF0TGVhc3QoMSkud2l0aEV4YWN0QXJncygpXHJcbiAgICAgICAgICAucmV0dXJucyhcIjIzXCIpO1xyXG4gICAgICAgIG1vY2tzLmFkYi5leHBlY3RzKFwic2V0RGV2aWNlSWRcIilcclxuICAgICAgICAgIC5vbmNlKCkud2l0aEV4YWN0QXJncyhcImVtdWxhdG9yLTU1NTRcIilcclxuICAgICAgICAgIC5yZXR1cm5zKCk7XHJcbiAgICAgICAgbW9ja3MuYWRiLmV4cGVjdHMoXCJzZXREZXZpY2VJZFwiKVxyXG4gICAgICAgICAgLm9uY2UoKS53aXRoRXhhY3RBcmdzKFwiZW11bGF0b3ItNTU1NlwiKVxyXG4gICAgICAgICAgLnJldHVybnMoKTtcclxuICAgICAgICBtb2Nrcy5hZGIuZXhwZWN0cyhcImFkYkV4ZWNcIilcclxuICAgICAgICAgIC5hdExlYXN0KDEpXHJcbiAgICAgICAgICAud2l0aEV4YWN0QXJncyhbXCJlbXVcIiwgXCJmaW5nZXJcIiwgXCJ0b3VjaFwiLCBmaW5nZXJwcmludF0pXHJcbiAgICAgICAgICAucmV0dXJucyhcIlwiKTtcclxuICAgICAgICBhd2FpdCBhZGIuZmluZ2VycHJpbnQoZmluZ2VycHJpbnQpO1xyXG4gICAgICAgIGF3YWl0IGFkYi5maW5nZXJwcmludChmaW5nZXJwcmludCwgXCJlbXVsYXRvci01NTU0XCIpO1xyXG4gICAgICAgIGF3YWl0IGFkYi5maW5nZXJwcmludChmaW5nZXJwcmludCwgXCJlbXVsYXRvci01NTU2XCIpO1xyXG4gICAgICAgIG1vY2tzLmFkYi52ZXJpZnkoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGl0KFwic2hvdWxkIHRocm93IGFuIGVycm9yIG9uIGZpbmdlcnByaW50IGFyZ3VtZW50IHVuZGVmaW5lZFwiLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgYXdhaXQgYWRiLmZpbmdlcnByaW50KCkuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWQ7XHJcbiAgICAgICAgbW9ja3MuYWRiLnZlcmlmeSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgaXQoXCJzaG91bGQgdGhyb3cgYW4gZXJyb3Igb24gZW11bGF0b3Igbm90IGNvbm5lY3RlZFwiLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgbW9ja3MuYWRiLmV4cGVjdHMoXCJnZXRBcGlMZXZlbFwiKVxyXG4gICAgICAgICAgLmF0TGVhc3QoMSkud2l0aEV4YWN0QXJncygpXHJcbiAgICAgICAgICAucmV0dXJucyhcIjIzXCIpO1xyXG4gICAgICAgIG1vY2tzLmFkYi5leHBlY3RzKFwiZ2V0Q29ubmVjdGVkRW11bGF0b3JzXCIpXHJcbiAgICAgICAgICAub25jZSgpLndpdGhFeGFjdEFyZ3MoKVxyXG4gICAgICAgICAgLnJldHVybnMoZW11bGF0b3JzKTtcclxuICAgICAgICBhd2FpdCBhZGIuZmluZ2VycHJpbnQoMTExMSwgXCJlbXVsYXRvci01NTU4XCIpLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkO1xyXG4gICAgICAgIG1vY2tzLmFkYi52ZXJpZnkoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGl0KFwic2hvdWxkIHRocm93IGFuIGVycm9yIG9uIG5vIGVtdWxhdG9ycyBjb25uZWN0ZWRcIiwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIG1vY2tzLmFkYi5leHBlY3RzKFwiZ2V0QXBpTGV2ZWxcIilcclxuICAgICAgICAgIC5hdExlYXN0KDEpLndpdGhFeGFjdEFyZ3MoKVxyXG4gICAgICAgICAgLnJldHVybnMoXCIyM1wiKTtcclxuICAgICAgICBtb2Nrcy5hZGIuZXhwZWN0cyhcImdldENvbm5lY3RlZEVtdWxhdG9yc1wiKVxyXG4gICAgICAgICAgLmF0TGVhc3QoMSkud2l0aEV4YWN0QXJncygpXHJcbiAgICAgICAgICAucmV0dXJucyhbXSk7XHJcbiAgICAgICAgYXdhaXQgYWRiLmZpbmdlcnByaW50KDExMTEpLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkO1xyXG4gICAgICAgIG1vY2tzLmFkYi52ZXJpZnkoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGl0KFwic2hvdWxkIHRocm93IGFuIGVycm9yIG9uIGVtdWxhdG9yIEFwaSBMZXZlbCA8IDIzXCIsIGFzeW5jICgpID0+IHtcclxuICAgICAgICBtb2Nrcy5hZGIuZXhwZWN0cyhcImdldEFwaUxldmVsXCIpXHJcbiAgICAgICAgICAub25jZSgpLndpdGhFeGFjdEFyZ3MoKVxyXG4gICAgICAgICAgLnJldHVybnMoXCIyMlwiKTtcclxuICAgICAgICBhd2FpdCBhZGIuZmluZ2VycHJpbnQoMTExMSkuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWQ7XHJcbiAgICAgICAgbW9ja3MuYWRiLnZlcmlmeSgpO1xyXG4gICAgICB9KTtcclxuICAgIH0pKTtcclxuICB9KTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiLi5cXC4uXFwuLiJ9
;