blob: ab1872cd1357be8ae534cdb2a94ee7734fe26d2f [file] [log] [blame]
'use strict';
function assert_relatedapplication_equals(actual, expected, description) {
assert_equals(actual.platform, expected.platform, description);
assert_equals(actual.url, expected.url, description);
assert_equals(actual.id, expected.id, description);
}
function assert_array_relatedapplication_equals(
actual, expected, description) {
assert_equals(actual.length, expected.length, description);
for (let i = 0; i < actual.length; i++)
assert_relatedapplication_equals(actual[i], expected[i], description);
}
class MockInstalledAppProvider {
constructor(interfaceProvider) {
this.bindingSet_ = new mojo.BindingSet(blink.mojom.InstalledAppProvider);
this.interceptor_ = new MojoInterfaceInterceptor(
blink.mojom.InstalledAppProvider.name);
this.interceptor_.oninterfacerequest =
e => this.bindingSet_.addBinding(this, e.handle);
this.interceptor_.start();
}
// Returns a Promise that gets rejected if the test should fail.
init_() {
// sequence of [expectedRelatedApps, installedApps].
this.callQueue_ = [];
return new Promise((resolve, reject) => { this.reject_ = reject });
}
async filterInstalledApps(relatedApps) {
if (!this.callQueue_.length) {
this.reject_('Unexpected call to mojo FilterInstalledApps method');
return;
}
let [expectedRelatedApps, installedApps] = this.callQueue_.shift();
try {
assert_array_relatedapplication_equals(relatedApps, expectedRelatedApps);
} catch (e) {
this.reject_(e);
return;
}
return { installedApps: installedApps };
}
pushExpectedCall(expectedRelatedApps, installedApps) {
this.callQueue_.push([expectedRelatedApps, installedApps]);
}
}
let mockInstalledAppProvider = new MockInstalledAppProvider();
// Creates a test case that uses a mock InstalledAppProvider.
// |func| is a function that takes (t, mock), where |mock| is a
// MockInstalledAppProvider that can have expectations set with
// pushExpectedCall. It should return a promise, the result of
// getInstalledRelatedApps().
// |name| and |properties| are standard testharness arguments.
function installedapp_test(func, name, properties) {
promise_test(t => {
let mockPromise = mockInstalledAppProvider.init_();
return Promise.race([func(t, mockInstalledAppProvider), mockPromise]);
}, name, properties);
}