Index: third_party/WebKit/LayoutTests/installedapp/resources/installedapp-test-helper.js |
diff --git a/third_party/WebKit/LayoutTests/installedapp/resources/installedapp-test-helper.js b/third_party/WebKit/LayoutTests/installedapp/resources/installedapp-test-helper.js |
index 980831d6f11fbed82ac67fd4e67c1a53681499fe..309fc1127d95f6a2a32f4b42925724f6114f373c 100644 |
--- a/third_party/WebKit/LayoutTests/installedapp/resources/installedapp-test-helper.js |
+++ b/third_party/WebKit/LayoutTests/installedapp/resources/installedapp-test-helper.js |
@@ -13,3 +13,70 @@ function assert_array_relatedapplication_equals( |
for (let i = 0; i < actual.length; i++) |
assert_relatedapplication_equals(actual[i], expected[i], description); |
} |
+ |
+let mockInstalledAppProvider = loadMojoModules( |
+ 'mockInstalledAppProvider', |
+ ['mojo/public/js/bindings', |
+ 'third_party/WebKit/public/platform/modules/installedapp/installed_app_provider.mojom', |
+ ]).then(mojo => { |
+ let [bindings, installedAppProvider] = mojo.modules; |
+ |
+ class MockInstalledAppProvider { |
+ constructor(interfaceProvider) { |
+ this.bindingSet_ = |
+ new bindings.BindingSet(installedAppProvider.InstalledAppProvider); |
+ |
+ interfaceProvider.addInterfaceOverrideForTesting( |
+ installedAppProvider.InstalledAppProvider.name, |
+ handle => this.bindingSet_.addBinding(this, handle)); |
+ } |
+ |
+ // 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}); |
+ } |
+ |
+ filterInstalledApps(relatedApps) { |
+ let callback = null; |
+ let result = new Promise(resolve => {callback = resolve;}); |
+ |
+ if (!this.callQueue_.length) { |
+ this.reject_('Unexpected call to mojo FilterInstalledApps method'); |
+ return result; |
+ } |
+ |
+ let [expectedRelatedApps, installedApps] = this.callQueue_.shift(); |
+ try { |
+ assert_array_relatedapplication_equals( |
+ relatedApps, expectedRelatedApps); |
+ } catch (e) { |
+ this.reject_(e); |
+ return result; |
+ } |
+ callback({installedApps: installedApps}); |
+ |
+ return result; |
+ } |
+ |
+ pushExpectedCall(expectedRelatedApps, installedApps) { |
+ this.callQueue_.push([expectedRelatedApps, installedApps]); |
+ } |
+ } |
+ return new MockInstalledAppProvider(mojo.frameInterfaces); |
+}); |
+ |
+// 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 => mockInstalledAppProvider.then(mock => { |
+ let mockPromise = mock.init_(); |
+ return Promise.race([func(t, mock), mockPromise]); |
+ }), name, properties); |
+} |