UNPKG

appium-adb-test

Version:

Android Debug Bridge interface

414 lines (344 loc) 24.1 kB
'use strict'; var _regeneratorRuntime = require('babel-runtime/regenerator')['default']; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; var _chai = require('chai'); var _chai2 = _interopRequireDefault(_chai); var _chaiAsPromised = require('chai-as-promised'); var _chaiAsPromised2 = _interopRequireDefault(_chaiAsPromised); var _ = require('../..'); var _2 = _interopRequireDefault(_); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _libHelpersJs = require('../../lib/helpers.js'); _chai2['default'].use(_chaiAsPromised2['default']); // change according to CI var apiLevel = '18', platformVersion = '4.3', IME = 'com.example.android.softkeyboard/.SoftKeyboard', defaultIMEs = ['com.android.inputmethod.latin/.LatinIME', 'io.appium.android.ime/.UnicodeIME'], contactManagerPath = _path2['default'].resolve(_libHelpersJs.rootDir, 'test', 'fixtures', 'ContactManager.apk'), pkg = 'com.example.android.contactmanager', activity = 'ContactManager'; describe('adb commands', function () { var _this = this; var adb = undefined; this.timeout(60000); before(function callee$1$0() { return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(_2['default'].createADB()); case 2: adb = context$2$0.sent; case 3: case 'end': return context$2$0.stop(); } }, null, _this); }); it('getApiLevel should get correct api level', function callee$1$0() { return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(adb.getApiLevel()); case 2: context$2$0.t0 = apiLevel; context$2$0.sent.should.equal(context$2$0.t0); case 4: case 'end': return context$2$0.stop(); } }, null, _this); }); it('getPlatformVersion should get correct platform version', function callee$1$0() { return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(adb.getPlatformVersion()); case 2: context$2$0.t0 = platformVersion; context$2$0.sent.should.equal(context$2$0.t0); case 4: case 'end': return context$2$0.stop(); } }, null, _this); }); it('availableIMEs should get list of available IMEs', function callee$1$0() { return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(adb.availableIMEs()); case 2: context$2$0.sent.should.have.length.above(0); case 3: case 'end': return context$2$0.stop(); } }, null, _this); }); it('enabledIMEs should get list of enabled IMEs', function callee$1$0() { return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(adb.enabledIMEs()); case 2: context$2$0.sent.should.have.length.above(0); case 3: case 'end': return context$2$0.stop(); } }, null, _this); }); it('defaultIME should get default IME', function callee$1$0() { return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.t0 = defaultIMEs.should; context$2$0.next = 3; return _regeneratorRuntime.awrap(adb.defaultIME()); case 3: context$2$0.t1 = context$2$0.sent; context$2$0.t0.include.call(context$2$0.t0, context$2$0.t1); case 5: case 'end': return context$2$0.stop(); } }, null, _this); }); it('enableIME and disableIME should enable and disble IME', function callee$1$0() { return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(adb.disableIME(IME)); case 2: context$2$0.next = 4; return _regeneratorRuntime.awrap(adb.enabledIMEs()); case 4: context$2$0.t0 = IME; context$2$0.sent.should.not.include(context$2$0.t0); context$2$0.next = 8; return _regeneratorRuntime.awrap(adb.enableIME(IME)); case 8: context$2$0.next = 10; return _regeneratorRuntime.awrap(adb.enabledIMEs()); case 10: context$2$0.t1 = IME; context$2$0.sent.should.include(context$2$0.t1); context$2$0.next = 14; return _regeneratorRuntime.awrap(adb.enabledIMEs()); case 14: case 'end': return context$2$0.stop(); } }, null, _this); }); it('processExists should be able to find ui process', function callee$1$0() { return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(adb.processExists('com.android.systemui')); case 2: context$2$0.sent.should.be['true']; case 3: case 'end': return context$2$0.stop(); } }, null, _this); }); it('ping should return true', function callee$1$0() { return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(adb.ping()); case 2: context$2$0.sent.should.be['true']; case 3: case 'end': return context$2$0.stop(); } }, null, _this); }); it('getPIDsByName should return pids', function callee$1$0() { return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(adb.getPIDsByName('m.android.phone')); case 2: context$2$0.sent.should.have.length.above(0); case 3: case 'end': return context$2$0.stop(); } }, null, _this); }); it('killProcessesByName should kill process', function callee$1$0() { return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(adb.install(contactManagerPath)); case 2: context$2$0.next = 4; return _regeneratorRuntime.awrap(adb.startApp({ pkg: pkg, activity: activity })); case 4: context$2$0.next = 6; return _regeneratorRuntime.awrap(adb.killProcessesByName(pkg)); case 6: context$2$0.next = 8; return _regeneratorRuntime.awrap(adb.getPIDsByName(pkg)); case 8: context$2$0.sent.should.have.length(0); case 9: case 'end': return context$2$0.stop(); } }, null, _this); }); it('killProcessByPID should kill process', function callee$1$0() { var pids; return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(adb.install(contactManagerPath)); case 2: context$2$0.next = 4; return _regeneratorRuntime.awrap(adb.startApp({ pkg: pkg, activity: activity })); case 4: context$2$0.next = 6; return _regeneratorRuntime.awrap(adb.getPIDsByName(pkg)); case 6: pids = context$2$0.sent; pids.should.have.length.above(0); context$2$0.next = 10; return _regeneratorRuntime.awrap(adb.killProcessByPID(pids[0])); case 10: context$2$0.next = 12; return _regeneratorRuntime.awrap(adb.getPIDsByName(pkg)); case 12: context$2$0.sent.length.should.equal(0); case 13: case 'end': return context$2$0.stop(); } }, null, _this); }); it('should get device language and country', function callee$1$0() { return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.t0 = ['en', 'fr'].should; context$2$0.next = 3; return _regeneratorRuntime.awrap(adb.getDeviceSysLanguage()); case 3: context$2$0.t1 = context$2$0.sent; context$2$0.t0.contain.call(context$2$0.t0, context$2$0.t1); context$2$0.t2 = ['US', 'EN_US', 'EN', 'FR'].should; context$2$0.next = 8; return _regeneratorRuntime.awrap(adb.getDeviceSysCountry()); case 8: context$2$0.t3 = context$2$0.sent; context$2$0.t2.contain.call(context$2$0.t2, context$2$0.t3); case 10: case 'end': return context$2$0.stop(); } }, null, _this); }); it('should set device language and country', function callee$1$0() { return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(adb.setDeviceSysLanguage('fr')); case 2: context$2$0.next = 4; return _regeneratorRuntime.awrap(adb.setDeviceSysCountry('fr')); case 4: context$2$0.next = 6; return _regeneratorRuntime.awrap(adb.reboot()); case 6: context$2$0.next = 8; return _regeneratorRuntime.awrap(adb.getDeviceSysLanguage().should.eventually.equal('fr')); case 8: context$2$0.next = 10; return _regeneratorRuntime.awrap(adb.getDeviceSysCountry().should.eventually.equal('FR')); case 10: context$2$0.next = 12; return _regeneratorRuntime.awrap(adb.setDeviceSysLanguage('en')); case 12: context$2$0.next = 14; return _regeneratorRuntime.awrap(adb.setDeviceSysCountry('us')); case 14: case 'end': return context$2$0.stop(); } }, null, _this); }); it('should forward the port', function callee$1$0() { return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(adb.forwardPort(4724, 4724)); case 2: case 'end': return context$2$0.stop(); } }, null, _this); }); it('should remove forwarded port', function callee$1$0() { return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(adb.forwardPort(8200, 6790)); case 2: context$2$0.next = 4; return _regeneratorRuntime.awrap(adb.adbExec(['forward', '--list'])); case 4: context$2$0.sent.should.contain('tcp:8200'); context$2$0.next = 7; return _regeneratorRuntime.awrap(adb.removePortForward(8200)); case 7: context$2$0.next = 9; return _regeneratorRuntime.awrap(adb.adbExec(['forward', '--list'])); case 9: context$2$0.sent.should.not.contain('tcp:8200'); case 10: case 'end': return context$2$0.stop(); } }, null, _this); }); it('should start logcat from adb', function callee$1$0() { var logs; return _regeneratorRuntime.async(function callee$1$0$(context$2$0) { while (1) switch (context$2$0.prev = context$2$0.next) { case 0: context$2$0.next = 2; return _regeneratorRuntime.awrap(adb.startLogcat()); case 2: logs = adb.logcat.getLogs(); logs.should.have.length.above(0); context$2$0.next = 6; return _regeneratorRuntime.awrap(adb.stopLogcat()); case 6: case 'end': return context$2$0.stop(); } }, null, _this); }); }); // cleanup //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZnVuY3Rpb25hbC9hZGItY29tbWFuZHMtZTJlLXNwZWNzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztvQkFBaUIsTUFBTTs7Ozs4QkFDSSxrQkFBa0I7Ozs7Z0JBQzdCLE9BQU87Ozs7b0JBQ04sTUFBTTs7Ozs0QkFDQyxzQkFBc0I7O0FBRzlDLGtCQUFLLEdBQUcsNkJBQWdCLENBQUM7O0FBRXpCLElBQU0sUUFBUSxHQUFHLElBQUk7SUFDZixlQUFlLEdBQUcsS0FBSztJQUN2QixHQUFHLEdBQUcsZ0RBQWdEO0lBQ3RELFdBQVcsR0FBRyxDQUFDLHlDQUF5QyxFQUN6QyxtQ0FBbUMsQ0FBQztJQUNuRCxrQkFBa0IsR0FBRyxrQkFBSyxPQUFPLHdCQUFVLE1BQU0sRUFDZixVQUFVLEVBQUUsb0JBQW9CLENBQUM7SUFDbkUsR0FBRyxHQUFHLG9DQUFvQztJQUMxQyxRQUFRLEdBQUcsZ0JBQWdCLENBQUM7O0FBRWxDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsWUFBWTs7O0FBQ25DLE1BQUksR0FBRyxZQUFBLENBQUM7QUFDUixNQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BCLFFBQU0sQ0FBQzs7Ozs7MkNBQ08sY0FBSSxTQUFTLEVBQUU7OztBQUEzQixhQUFHOzs7Ozs7O0dBQ0osQ0FBQyxDQUFDO0FBQ0gsSUFBRSxDQUFDLDBDQUEwQyxFQUFFOzs7OzsyQ0FDdEMsR0FBRyxDQUFDLFdBQVcsRUFBRTs7OzJCQUFlLFFBQVE7MkJBQXJCLE1BQU0sQ0FBQyxLQUFLOzs7Ozs7O0dBQ3ZDLENBQUMsQ0FBQztBQUNILElBQUUsQ0FBQyx3REFBd0QsRUFBRTs7Ozs7MkNBQ3BELEdBQUcsQ0FBQyxrQkFBa0IsRUFBRTs7OzJCQUFlLGVBQWU7MkJBQTVCLE1BQU0sQ0FBQyxLQUFLOzs7Ozs7O0dBQzlDLENBQUMsQ0FBQztBQUNILElBQUUsQ0FBQyxpREFBaUQsRUFBRTs7Ozs7MkNBQzdDLEdBQUcsQ0FBQyxhQUFhLEVBQUU7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LENBQUM7OzsyQkFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVOzs7Ozs7O0dBRXpFLENBQUMsQ0FBQztBQUNILElBQUUsQ0FBQyw4QkFBOEIsRUFBRTtRQUU3QixJQUFJOzs7OzsyQ0FERixHQUFHLENBQUMsV0FBVyxFQUFFOzs7QUFDbkIsY0FBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFOztBQUMvQixjQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDOzsyQ0FDM0IsR0FBRyxDQUFDLFVBQVUsRUFBRTs7Ozs7OztHQUN2QixDQUFDLENBQUM7Q0FDSixDQUFDLENBQUMiLCJmaWxlIjoidGVzdC9mdW5jdGlvbmFsL2FkYi1jb21tYW5kcy1lMmUtc3BlY3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhaSBmcm9tICdjaGFpJztcclxuaW1wb3J0IGNoYWlBc1Byb21pc2VkIGZyb20gJ2NoYWktYXMtcHJvbWlzZWQnO1xyXG5pbXBvcnQgQURCIGZyb20gJy4uLy4uJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCB7IHJvb3REaXIgfSBmcm9tICcuLi8uLi9saWIvaGVscGVycy5qcyc7XHJcblxyXG5cclxuY2hhaS51c2UoY2hhaUFzUHJvbWlzZWQpO1xyXG4vLyBjaGFuZ2UgYWNjb3JkaW5nIHRvIENJXHJcbmNvbnN0IGFwaUxldmVsID0gJzE4JyxcclxuICAgICAgcGxhdGZvcm1WZXJzaW9uID0gJzQuMycsXHJcbiAgICAgIElNRSA9ICdjb20uZXhhbXBsZS5hbmRyb2lkLnNvZnRrZXlib2FyZC8uU29mdEtleWJvYXJkJyxcclxuICAgICAgZGVmYXVsdElNRXMgPSBbJ2NvbS5hbmRyb2lkLmlucHV0bWV0aG9kLmxhdGluLy5MYXRpbklNRScsXHJcbiAgICAgICAgICAgICAgICAgICAgICdpby5hcHBpdW0uYW5kcm9pZC5pbWUvLlVuaWNvZGVJTUUnXSxcclxuICAgICAgY29udGFjdE1hbmFnZXJQYXRoID0gcGF0aC5yZXNvbHZlKHJvb3REaXIsICd0ZXN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXh0dXJlcycsICdDb250YWN0TWFuYWdlci5hcGsnKSxcclxuICAgICAgcGtnID0gJ2NvbS5leGFtcGxlLmFuZHJvaWQuY29udGFjdG1hbmFnZXInLFxyXG4gICAgICBhY3Rpdml0eSA9ICdDb250YWN0TWFuYWdlcic7XHJcblxyXG5kZXNjcmliZSgnYWRiIGNvbW1hbmRzJywgZnVuY3Rpb24gKCkge1xyXG4gIGxldCBhZGI7XHJcbiAgdGhpcy50aW1lb3V0KDYwMDAwKTtcclxuICBiZWZvcmUoYXN5bmMgKCkgPT4ge1xyXG4gICAgYWRiID0gYXdhaXQgQURCLmNyZWF0ZUFEQigpO1xyXG4gIH0pO1xyXG4gIGl0KCdnZXRBcGlMZXZlbCBzaG91bGQgZ2V0IGNvcnJlY3QgYXBpIGxldmVsJywgYXN5bmMgKCkgPT4ge1xyXG4gICAgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpKS5zaG91bGQuZXF1YWwoYXBpTGV2ZWwpO1xyXG4gIH0pO1xyXG4gIGl0KCdnZXRQbGF0Zm9ybVZlcnNpb24gc2hvdWxkIGdldCBjb3JyZWN0IHBsYXRmb3JtIHZlcnNpb24nLCBhc3luYyAoKSA9PiB7XHJcbiAgICAoYXdhaXQgYWRiLmdldFBsYXRmb3JtVmVyc2lvbigpKS5zaG91bGQuZXF1YWwocGxhdGZvcm1WZXJzaW9uKTtcclxuICB9KTtcclxuICBpdCgnYXZhaWxhYmxlSU1FcyBzaG91bGQgZ2V0IGxpc3Qgb2YgYXZhaWxhYmxlIElNRXMnLCBhc3luYyAoKSA9PiB7XHJcbiAgICAoYXdhaXQgYWRiLmF2YWlsYWJsZUlNRXMoKSkuc2hvdWxkLmhhdmUubGVuZ3RoLmFib3ZlKDApO1xyXG4gIH0pO1xyXG4gIGl0KCdlbmFibGVkSU1FcyBzaG91bGQgZ2V0IGxpc3Qgb2YgZW5hYmxlZCBJTUVzJywgYXN5bmMgKCkgPT4ge1xyXG4gICAgKGF3YWl0IGFkYi5lbmFibGVkSU1FcygpKS5zaG91bGQuaGF2ZS5sZW5ndGguYWJvdmUoMCk7XHJcbiAgfSk7XHJcbiAgaXQoJ2RlZmF1bHRJTUUgc2hvdWxkIGdldCBkZWZhdWx0IElNRScsIGFzeW5jICgpID0+IHtcclxuICAgIGRlZmF1bHRJTUVzLnNob3VsZC5pbmNsdWRlKGF3YWl0IGFkYi5kZWZhdWx0SU1FKCkpO1xyXG4gIH0pO1xyXG4gIGl0KCdlbmFibGVJTUUgYW5kIGRpc2FibGVJTUUgc2hvdWxkIGVuYWJsZSBhbmQgZGlzYmxlIElNRScsIGFzeW5jICgpID0+IHtcclxuICAgIGF3YWl0IGFkYi5kaXNhYmxlSU1FKElNRSk7XHJcbiAgICAoYXdhaXQgYWRiLmVuYWJsZWRJTUVzKCkpLnNob3VsZC5ub3QuaW5jbHVkZShJTUUpO1xyXG4gICAgYXdhaXQgYWRiLmVuYWJsZUlNRShJTUUpO1xyXG4gICAgKGF3YWl0IGFkYi5lbmFibGVkSU1FcygpKS5zaG91bGQuaW5jbHVkZShJTUUpO1xyXG4gICAgYXdhaXQgYWRiLmVuYWJsZWRJTUVzKCk7XHJcbiAgfSk7XHJcbiAgaXQoJ3Byb2Nlc3NFeGlzdHMgc2hvdWxkIGJlIGFibGUgdG8gZmluZCB1aSBwcm9jZXNzJywgYXN5bmMgKCkgPT4ge1xyXG4gICAgKGF3YWl0IGFkYi5wcm9jZXNzRXhpc3RzKCdjb20uYW5kcm9pZC5zeXN0ZW11aScpKS5zaG91bGQuYmUudHJ1ZTtcclxuICB9KTtcclxuICBpdCgncGluZyBzaG91bGQgcmV0dXJuIHRydWUnLCBhc3luYyAoKSA9PiB7XHJcbiAgICAoYXdhaXQgYWRiLnBpbmcoKSkuc2hvdWxkLmJlLnRydWU7XHJcbiAgfSk7XHJcbiAgaXQoJ2dldFBJRHNCeU5hbWUgc2hvdWxkIHJldHVybiBwaWRzJywgYXN5bmMgKCkgPT4ge1xyXG4gICAgKGF3YWl0IGFkYi5nZXRQSURzQnlOYW1lKCdtLmFuZHJvaWQucGhvbmUnKSkuc2hvdWxkLmhhdmUubGVuZ3RoLmFib3ZlKDApO1xyXG4gIH0pO1xyXG4gIGl0KCdraWxsUHJvY2Vzc2VzQnlOYW1lIHNob3VsZCBraWxsIHByb2Nlc3MnLCBhc3luYyAoKSA9PiB7XHJcbiAgICBhd2FpdCBhZGIuaW5zdGFsbChjb250YWN0TWFuYWdlclBhdGgpO1xyXG4gICAgYXdhaXQgYWRiLnN0YXJ0QXBwKHtwa2csIGFjdGl2aXR5fSk7XHJcbiAgICBhd2FpdCBhZGIua2lsbFByb2Nlc3Nlc0J5TmFtZShwa2cpO1xyXG4gICAgKGF3YWl0IGFkYi5nZXRQSURzQnlOYW1lKHBrZykpLnNob3VsZC5oYXZlLmxlbmd0aCgwKTtcclxuICB9KTtcclxuICBpdCgna2lsbFByb2Nlc3NCeVBJRCBzaG91bGQga2lsbCBwcm9jZXNzJywgYXN5bmMgKCkgPT4ge1xyXG4gICAgYXdhaXQgYWRiLmluc3RhbGwoY29udGFjdE1hbmFnZXJQYXRoKTtcclxuICAgIGF3YWl0IGFkYi5zdGFydEFwcCh7cGtnLCBhY3Rpdml0eX0pO1xyXG4gICAgbGV0IHBpZHMgPSBhd2FpdCBhZGIuZ2V0UElEc0J5TmFtZShwa2cpO1xyXG4gICAgcGlkcy5zaG91bGQuaGF2ZS5sZW5ndGguYWJvdmUoMCk7XHJcbiAgICBhd2FpdCBhZGIua2lsbFByb2Nlc3NCeVBJRChwaWRzWzBdKTtcclxuICAgIChhd2FpdCBhZGIuZ2V0UElEc0J5TmFtZShwa2cpKS5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xyXG4gIH0pO1xyXG4gIGl0KCdzaG91bGQgZ2V0IGRldmljZSBsYW5ndWFnZSBhbmQgY291bnRyeScsIGFzeW5jICgpID0+IHtcclxuICAgIFsnZW4nLCAnZnInXS5zaG91bGQuY29udGFpbihhd2FpdCBhZGIuZ2V0RGV2aWNlU3lzTGFuZ3VhZ2UoKSk7XHJcbiAgICBbJ1VTJywgJ0VOX1VTJywgJ0VOJywgJ0ZSJ10uc2hvdWxkLmNvbnRhaW4oYXdhaXQgYWRiLmdldERldmljZVN5c0NvdW50cnkoKSk7XHJcbiAgfSk7XHJcbiAgaXQoJ3Nob3VsZCBzZXQgZGV2aWNlIGxhbmd1YWdlIGFuZCBjb3VudHJ5JywgYXN5bmMgKCkgPT4ge1xyXG4gICAgYXdhaXQgYWRiLnNldERldmljZVN5c0xhbmd1YWdlKCdmcicpO1xyXG4gICAgYXdhaXQgYWRiLnNldERldmljZVN5c0NvdW50cnkoJ2ZyJyk7XHJcbiAgICBhd2FpdCBhZGIucmVib290KCk7XHJcbiAgICBhd2FpdCBhZGIuZ2V0RGV2aWNlU3lzTGFuZ3VhZ2UoKS5zaG91bGQuZXZlbnR1YWxseS5lcXVhbCgnZnInKTtcclxuICAgIGF3YWl0IGFkYi5nZXREZXZpY2VTeXNDb3VudHJ5KCkuc2hvdWxkLmV2ZW50dWFsbHkuZXF1YWwoJ0ZSJyk7XHJcbiAgICAvLyBjbGVhbnVwXHJcbiAgICBhd2FpdCBhZGIuc2V0RGV2aWNlU3lzTGFuZ3VhZ2UoJ2VuJyk7XHJcbiAgICBhd2FpdCBhZGIuc2V0RGV2aWNlU3lzQ291bnRyeSgndXMnKTtcclxuICB9KTtcclxuICBpdCgnc2hvdWxkIGZvcndhcmQgdGhlIHBvcnQnLCBhc3luYyAoKSA9PiB7XHJcbiAgICBhd2FpdCBhZGIuZm9yd2FyZFBvcnQoNDcyNCwgNDcyNCk7XHJcbiAgfSk7XHJcbiAgaXQoJ3Nob3VsZCByZW1vdmUgZm9yd2FyZGVkIHBvcnQnLCBhc3luYyAoKSA9PiB7XHJcbiAgICBhd2FpdCBhZGIuZm9yd2FyZFBvcnQoODIwMCwgNjc5MCk7XHJcbiAgICAoYXdhaXQgYWRiLmFkYkV4ZWMoW2Bmb3J3YXJkYCwgYC0tbGlzdGBdKSkuc2hvdWxkLmNvbnRhaW4oJ3RjcDo4MjAwJyk7XHJcbiAgICBhd2FpdCBhZGIucmVtb3ZlUG9ydEZvcndhcmQoODIwMCk7XHJcbiAgICAoYXdhaXQgYWRiLmFkYkV4ZWMoW2Bmb3J3YXJkYCwgYC0tbGlzdGBdKSkuc2hvdWxkLm5vdC5jb250YWluKCd0Y3A6ODIwMCcpO1xyXG5cclxuICB9KTtcclxuICBpdCgnc2hvdWxkIHN0YXJ0IGxvZ2NhdCBmcm9tIGFkYicsIGFzeW5jICgpID0+IHtcclxuICAgIGF3YWl0IGFkYi5zdGFydExvZ2NhdCgpO1xyXG4gICAgbGV0IGxvZ3MgPSBhZGIubG9nY2F0LmdldExvZ3MoKTtcclxuICAgIGxvZ3Muc2hvdWxkLmhhdmUubGVuZ3RoLmFib3ZlKDApO1xyXG4gICAgYXdhaXQgYWRiLnN0b3BMb2djYXQoKTtcclxuICB9KTtcclxufSk7XHJcbiJdLCJzb3VyY2VSb290IjoiLi5cXC4uXFwuLiJ9