diff options
Diffstat (limited to 'devtools/client/shared/remote-debugging/test/xpcshell/test_remote_client_manager.js')
-rw-r--r-- | devtools/client/shared/remote-debugging/test/xpcshell/test_remote_client_manager.js | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/devtools/client/shared/remote-debugging/test/xpcshell/test_remote_client_manager.js b/devtools/client/shared/remote-debugging/test/xpcshell/test_remote_client_manager.js new file mode 100644 index 0000000000..e66c38b67d --- /dev/null +++ b/devtools/client/shared/remote-debugging/test/xpcshell/test_remote_client_manager.js @@ -0,0 +1,153 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const { + remoteClientManager, +} = require("resource://devtools/client/shared/remote-debugging/remote-client-manager.js"); +const { + CONNECTION_TYPES, +} = require("resource://devtools/client/shared/remote-debugging/constants.js"); + +add_task(async function testRemoteClientManager() { + for (const type of Object.values(CONNECTION_TYPES)) { + const fakeClient = createFakeClient(); + const runtimeInfo = {}; + const clientId = "clientId"; + const remoteId = remoteClientManager.getRemoteId(clientId, type); + + const connectionType = + remoteClientManager.getConnectionTypeByRemoteId(remoteId); + equal( + connectionType, + type, + `[${type}]: Correct connection type was returned by getConnectionTypeByRemoteId` + ); + + equal( + remoteClientManager.hasClient(clientId, type), + false, + `[${type}]: hasClient returns false if no client was set` + ); + equal( + remoteClientManager.getClient(clientId, type), + null, + `[${type}]: getClient returns null if no client was set` + ); + equal( + remoteClientManager.getClientByRemoteId(remoteId), + null, + `[${type}]: getClientByRemoteId returns null if no client was set` + ); + equal( + remoteClientManager.getRuntimeInfoByRemoteId(remoteId), + null, + `[${type}]: getRuntimeInfoByRemoteId returns null if no client was set` + ); + + remoteClientManager.setClient(clientId, type, fakeClient, runtimeInfo); + equal( + remoteClientManager.hasClient(clientId, type), + true, + `[${type}]: hasClient returns true` + ); + equal( + remoteClientManager.getClient(clientId, type), + fakeClient, + `[${type}]: getClient returns the correct client` + ); + equal( + remoteClientManager.getClientByRemoteId(remoteId), + fakeClient, + `[${type}]: getClientByRemoteId returns the correct client` + ); + equal( + remoteClientManager.getRuntimeInfoByRemoteId(remoteId), + runtimeInfo, + `[${type}]: getRuntimeInfoByRemoteId returns the correct object` + ); + + remoteClientManager.removeClient(clientId, type); + equal( + remoteClientManager.hasClient(clientId, type), + false, + `[${type}]: hasClient returns false after removing the client` + ); + equal( + remoteClientManager.getClient(clientId, type), + null, + `[${type}]: getClient returns null after removing the client` + ); + equal( + remoteClientManager.getClientByRemoteId(remoteId), + null, + `[${type}]: getClientByRemoteId returns null after removing the client` + ); + equal( + remoteClientManager.getRuntimeInfoByRemoteId(), + null, + `[${type}]: getRuntimeInfoByRemoteId returns null after removing the client` + ); + } + + // Test various fallback scenarios for APIs relying on remoteId, when called without a + // remoteId, we expect to get the information for the local this-firefox runtime. + const { THIS_FIREFOX } = CONNECTION_TYPES; + const thisFirefoxClient = createFakeClient(); + const thisFirefoxInfo = {}; + remoteClientManager.setClient( + THIS_FIREFOX, + THIS_FIREFOX, + thisFirefoxClient, + thisFirefoxInfo + ); + + equal( + remoteClientManager.getClientByRemoteId(), + thisFirefoxClient, + `[fallback]: getClientByRemoteId returns this-firefox if remoteId is null` + ); + equal( + remoteClientManager.getRuntimeInfoByRemoteId(), + thisFirefoxInfo, + `[fallback]: getRuntimeInfoByRemoteId returns this-firefox if remoteId is null` + ); + + const otherRemoteId = remoteClientManager.getRemoteId( + "clientId", + CONNECTION_TYPES.USB + ); + equal( + remoteClientManager.getClientByRemoteId(otherRemoteId), + null, + `[fallback]: getClientByRemoteId does not fallback if remoteId is non-null` + ); + equal( + remoteClientManager.getRuntimeInfoByRemoteId(otherRemoteId), + null, + `[fallback]: getRuntimeInfoByRemoteId does not fallback if remoteId is non-null` + ); +}); + +add_task(async function testRemoteClientManagerWithUnknownType() { + const remoteId = remoteClientManager.getRemoteId( + "someClientId", + "NotARealType" + ); + const connectionType = + remoteClientManager.getConnectionTypeByRemoteId(remoteId); + equal( + connectionType, + CONNECTION_TYPES.UNKNOWN, + `Connection type UNKNOWN was returned by getConnectionTypeByRemoteId` + ); +}); + +function createFakeClient() { + const EventEmitter = require("resource://devtools/shared/event-emitter.js"); + + const client = {}; + EventEmitter.decorate(client); + return client; +} |