helper-adb-mock.js (3959B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 /** 7 * Setup the loader to return the provided mock object instead of the regular adb module. 8 * 9 * @param {object} 10 * mock should implement the following methods: 11 * - registerListener(listener) 12 * - getRuntimes() 13 * - getDevices() 14 * - updateRuntimes() 15 * - unregisterListener(listener) 16 */ 17 function enableAdbMock(mock) { 18 const { 19 setMockedModule, 20 } = require("resource://devtools/shared/loader/browser-loader-mocks.js"); 21 setMockedModule(mock, "devtools/client/shared/remote-debugging/adb/adb"); 22 } 23 /* exported enableAdbMock */ 24 25 /** 26 * Update the loader to clear the mock entry for the adb module. 27 */ 28 function disableAdbMock() { 29 const { 30 removeMockedModule, 31 } = require("resource://devtools/shared/loader/browser-loader-mocks.js"); 32 removeMockedModule("devtools/client/shared/remote-debugging/adb/adb"); 33 } 34 /* exported disableAdbMock */ 35 36 /** 37 * Creates a simple mock version for adb, implementing all the expected methods 38 * with empty placeholders. 39 */ 40 function createAdbMock() { 41 const adbMock = {}; 42 adbMock.registerListener = function () { 43 console.log("MOCKED METHOD registerListener"); 44 }; 45 46 adbMock.getRuntimes = function () { 47 console.log("MOCKED METHOD getRuntimes"); 48 }; 49 50 adbMock.getDevices = function () { 51 console.log("MOCKED METHOD getDevices"); 52 }; 53 54 adbMock.updateRuntimes = function () { 55 console.log("MOCKED METHOD updateRuntimes"); 56 }; 57 58 adbMock.unregisterListener = function () { 59 console.log("MOCKED METHOD unregisterListener"); 60 }; 61 62 adbMock.once = function () { 63 console.log("MOCKED METHOD once"); 64 }; 65 66 adbMock.isProcessStarted = function () { 67 console.log("MOCKED METHOD isProcessStarted"); 68 }; 69 70 return { adb: adbMock }; 71 } 72 /* exported createAdbMock */ 73 74 /** 75 * The adb module allows to observe runtime updates. To simulate this behaviour 76 * the easiest is to use an EventEmitter-decorated object that can accept listeners and 77 * can emit events from the test. 78 * 79 * This method will update the registerListener method of the provided 80 * usbRuntimesMock in order to add listeners to a mockObserver, and returns said observer 81 * so that the test can emit "runtime-list-updated" when needed. 82 */ 83 function addObserverMock(adbMock) { 84 const EventEmitter = require("resource://devtools/shared/event-emitter.js"); 85 86 const observerMock = {}; 87 EventEmitter.decorate(observerMock); 88 adbMock.registerListener = function (listener) { 89 console.log("MOCKED METHOD registerListener with mock scanner"); 90 observerMock.on("runtime-list-updated", listener); 91 }; 92 93 // NOTE FOR REVIEW: Instead of emitting "runtime-list-updated" events in the test, 94 // this mock could have a emitObservedEvent method, that would just emit the correct 95 // event. This way if the event name changes, everything remains contained in this 96 // method. 97 98 return observerMock; 99 } 100 /* exported addObserverMock */ 101 102 function createAdbProcessMock() { 103 const EventEmitter = require("resource://devtools/shared/event-emitter.js"); 104 105 const mock = {}; 106 EventEmitter.decorate(mock); 107 108 mock.ready = false; 109 110 mock.start = async () => { 111 console.log("MOCKED METHOD start"); 112 mock.ready = true; 113 mock.emit("adb-ready"); 114 }; 115 116 return { adbProcess: mock }; 117 } 118 /* exported createAdbProcessMock */ 119 120 function enableAdbProcessMock(mock) { 121 const { 122 setMockedModule, 123 } = require("resource://devtools/shared/loader/browser-loader-mocks.js"); 124 setMockedModule( 125 mock, 126 "devtools/client/shared/remote-debugging/adb/adb-process" 127 ); 128 } 129 /* exported enableAdbProcessMock */ 130 131 function disableAdbProcessMock() { 132 const { 133 removeMockedModule, 134 } = require("resource://devtools/shared/loader/browser-loader-mocks.js"); 135 removeMockedModule("devtools/client/shared/remote-debugging/adb/adb-process"); 136 } 137 /* exported disableAdbProcessMock */