Skip to content

Commit cb2e488

Browse files
committed
Added a Test for 2 way communication
1 parent cc5874a commit cb2e488

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

tests/fixtures/two-way-iframe.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<script type="module">
2+
import * as Comlink from "/base/dist/esm/comlink.mjs";
3+
4+
const parentEndpoint = Comlink.windowEndpoint(self.parent);
5+
const wrappedParent = Comlink.wrap(parentEndpoint);
6+
7+
Comlink.expose(async (a, b) => {
8+
return a + (await wrappedParent(b));
9+
}, parentEndpoint);
10+
</script>

tests/two-way-iframe.comlink.test.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
* Copyright 2017 Google Inc. All Rights Reserved.
3+
* Licensed under the Apache License, Version 2.0 (the "License");
4+
* you may not use this file except in compliance with the License.
5+
* You may obtain a copy of the License at
6+
* http://www.apache.org/licenses/LICENSE-2.0
7+
* Unless required by applicable law or agreed to in writing, software
8+
* distributed under the License is distributed on an "AS IS" BASIS,
9+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10+
* See the License for the specific language governing permissions and
11+
* limitations under the License.
12+
*/
13+
14+
import * as Comlink from "/base/dist/esm/comlink.mjs";
15+
16+
describe("Comlink across iframes", function () {
17+
beforeEach(function () {
18+
this.ifr = document.createElement("iframe");
19+
this.ifr.sandbox.add("allow-scripts", "allow-same-origin");
20+
this.ifr.src = "/base/tests/fixtures/two-way-iframe.html";
21+
document.body.appendChild(this.ifr);
22+
return new Promise((resolve) => (this.ifr.onload = resolve));
23+
});
24+
25+
afterEach(function () {
26+
this.ifr.remove();
27+
});
28+
29+
it("can communicate both ways", async function () {
30+
let called = false;
31+
const iframe = Comlink.windowEndpoint(this.ifr.contentWindow);
32+
Comlink.expose((a) => {
33+
called = true;
34+
return ++a;
35+
}, iframe);
36+
const proxy = Comlink.wrap(iframe);
37+
expect(await proxy(1, 3)).to.equal(5);
38+
expect(called).to.equal(true);
39+
});
40+
});

0 commit comments

Comments
 (0)