Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'android'
- Manifest: devtools/client/shared/remote-debugging/test/xpcshell/xpcshell.toml
/* Any copyright is dedicated to the Public Domain.
"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;
}