Index: third_party/WebKit/LayoutTests/webshare/resources/mock-share-service.js |
diff --git a/third_party/WebKit/LayoutTests/webshare/resources/mock-share-service.js b/third_party/WebKit/LayoutTests/webshare/resources/mock-share-service.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0e4165568fb04490bad07e499fba0af7f9582113 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/webshare/resources/mock-share-service.js |
@@ -0,0 +1,66 @@ |
+'use strict'; |
+ |
+let mockShareService = loadMojoModules( |
+ 'mockShareService', |
+ ['mojo/public/js/router', |
+ 'third_party/WebKit/public/platform/modules/webshare/webshare.mojom', |
+ ]).then(mojo => { |
+ let [router, webshare] = mojo.modules; |
+ |
+ class MockShareService extends webshare.ShareService.stubClass { |
+ constructor(serviceRegistry) { |
+ super(); |
+ serviceRegistry.addServiceOverrideForTesting( |
+ webshare.ShareService.name, |
+ handle => this.connect_(handle)); |
+ } |
+ |
+ // Returns a Promise that gets rejected if the test should fail. |
+ init_() { |
+ // sequence of [expectedTitle, expectedText, result]. |
+ this.shareResultQueue_ = []; |
+ |
+ return new Promise((resolve, reject) => {this.reject_ = reject}); |
+ } |
+ |
+ connect_(handle) { |
+ this.router_ = new router.Router(handle); |
+ this.router_.setIncomingReceiver(this); |
+ } |
+ |
+ share(title, text) { |
+ let callback = null; |
+ let result = new Promise(resolve => {callback = resolve;}); |
+ |
+ if (!this.shareResultQueue_.length) { |
+ this.reject_('Unexpected call to mojo share method'); |
+ return result; |
+ } |
+ |
+ let expectedTitle, expectedText, error; |
+ [expectedTitle, expectedText, error] = this.shareResultQueue_.shift(); |
+ try { |
+ assert_equals(title, expectedTitle); |
+ assert_equals(text, expectedText); |
+ } catch (e) { |
+ this.reject_(e); |
+ return result; |
+ } |
+ callback({error: error}); |
+ |
+ return result; |
+ } |
+ |
+ pushShareResult(expectedTitle, expectedText, result) { |
+ this.shareResultQueue_.push([expectedTitle, expectedText, result]); |
+ } |
+ } |
+ return new MockShareService(mojo.frameServiceRegistry); |
+}); |
+ |
+function share_test(func, name, properties) { |
+ promise_test(t => mockShareService.then(mock => { |
+ let mockPromise = mock.init_(); |
+ return Promise.race([func(t, mock), mockPromise]); |
+ }), name, properties); |
+} |