Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
coopwire-hypothesis
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
孙灵跃 Leon Sun
coopwire-hypothesis
Commits
01d6718f
Commit
01d6718f
authored
Jan 20, 2022
by
Eduardo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Apply suggestions from code review
Co-authored-by:
Robert Knight
<
robertknight@gmail.com
>
parent
82d8ea93
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
90 additions
and
90 deletions
+90
-90
inter-frame-communication-test.js
...shared/test/integration/inter-frame-communication-test.js
+90
-90
No files found.
src/shared/test/integration/inter-frame-communication-test.js
View file @
01d6718f
...
...
@@ -49,76 +49,72 @@ describe('PortProvider-PortFinder-PortRPC integration', () => {
});
it
(
'enables the communication between guest-host'
,
async
()
=>
{
let
done
;
const
promise
=
new
Promise
(
resolve
=>
(
done
=
resolve
));
// guest frame
const
portFinder
=
new
PortFinder
({
hostFrame
:
window
,
source
:
'guest'
,
});
const
hostRPC
=
new
PortRPC
();
const
simulateGuest
=
async
()
=>
{
const
portFinder
=
new
PortFinder
({
hostFrame
:
window
,
source
:
'guest'
,
});
const
port
=
await
portFinder
.
discover
(
'host'
);
portFinder
.
discover
(
'host'
).
then
(
port
=>
{
const
hostRPC
=
new
PortRPC
();
hostRPC
.
connect
(
port
);
hostRPC
.
call
(
'ping'
,
response
=>
{
assert
.
equal
(
response
,
'pong'
);
done
();
await
new
Promise
(
resolve
=>
hostRPC
.
call
(
'ping'
,
response
=>
{
assert
.
equal
(
response
,
'pong'
);
resolve
();
})
);
};
const
simulateHost
=
async
()
=>
{
await
delay
(
10
);
// simulate scenario when host frame is ready before the guest frame
const
portProvider
=
new
PortProvider
(
window
.
location
.
origin
);
portProvider
.
listen
();
const
guestRPC
=
new
PortRPC
();
guestRPC
.
on
(
'ping'
,
cb
=>
cb
(
'pong'
));
portProvider
.
on
(
'frameConnected'
,
(
source
,
port
)
=>
{
if
(
source
===
'guest'
)
{
guestRPC
.
connect
(
port
);
}
});
});
await
delay
(
10
);
// add some realism
};
// host frame
const
portProvider
=
new
PortProvider
(
window
.
location
.
origin
);
portProvider
.
listen
();
const
guestRPC
=
new
PortRPC
();
// Register RPC method *before* connection
guestRPC
.
on
(
'ping'
,
cb
=>
cb
(
'pong'
));
portProvider
.
on
(
'frameConnected'
,
(
source
,
port
)
=>
{
if
(
source
===
'guest'
)
{
guestRPC
.
connect
(
port
);
}
});
return
promise
;
return
Promise
.
all
([
simulateGuest
(),
simulateHost
()]);
});
it
(
'enables the communication between guest-sidebar'
,
async
()
=>
{
let
done
;
const
promise
=
new
Promise
(
resolve
=>
(
done
=
resolve
));
// guest frame;
const
portFinder1
=
new
PortFinder
({
hostFrame
:
window
,
source
:
'guest'
,
});
const
sidebarRPC
=
new
PortRPC
();
portFinder1
.
discover
(
'sidebar'
).
then
(
port
=>
{
sidebarRPC
.
connect
(
port
);
sidebarRPC
.
call
(
'ping'
,
response
=>
{
assert
.
equal
(
response
,
'pong'
);
done
();
const
simulateGuest
=
async
()
=>
{
const
portFinder
=
new
PortFinder
({
hostFrame
:
window
,
source
:
'guest'
,
});
}
);
const
hostRPC
=
new
PortRPC
(
);
await
delay
(
10
);
// add some realism
const
port
=
await
portFinder
.
discover
(
'sidebar'
);
hostRPC
.
connect
(
port
);
// sidebar frame
const
portFinder2
=
new
PortFinder
({
hostFrame
:
window
,
source
:
'sidebar'
,
});
const
guestRPC
=
new
PortRPC
();
await
new
Promise
(
resolve
=>
hostRPC
.
call
(
'ping'
,
response
=>
{
assert
.
equal
(
response
,
'pong'
);
resolve
();
})
);
};
const
simulateSidebar
=
async
()
=>
{
const
portFinder
=
new
PortFinder
({
hostFrame
:
window
,
source
:
'sidebar'
,
});
const
port
=
await
portFinder
.
discover
(
'host'
);
// Register RPC method *before* connection
guestRPC
.
on
(
'ping'
,
cb
=>
cb
(
'pong'
));
const
guestRPC
=
new
PortRPC
();
guestRPC
.
on
(
'ping'
,
cb
=>
cb
(
'pong'
));
const
listenerCollection
=
new
ListenerCollection
();
portFinder2
.
discover
(
'host'
).
then
(
port
=>
{
const
listenerCollection
=
new
ListenerCollection
();
listenerCollection
.
add
(
port
,
'message'
,
({
data
,
ports
})
=>
{
if
(
isMessageEqual
(
data
,
{
...
...
@@ -130,49 +126,53 @@ describe('PortProvider-PortFinder-PortRPC integration', () => {
guestRPC
.
connect
(
ports
[
0
]);
}
});
port
.
start
();
// `start` method would be triggered by `hostRPC.connect(port)`
});
// host frame
const
portProvider
=
new
PortProvider
(
window
.
location
.
origin
);
portProvider
.
listen
();
port
.
start
();
// `start` is normally invoked by `hostRPC.connect(port)`
};
const
simulateHost
=
async
()
=>
{
await
delay
(
10
);
// simulate scenario when host frame is ready before the guest frame
return
promise
;
const
portProvider
=
new
PortProvider
(
window
.
location
.
origin
);
portProvider
.
listen
();
};
return
Promise
.
all
([
simulateGuest
(),
simulateSidebar
(),
simulateHost
()]);
});
it
(
'enables the communication between sidebar-host'
,
async
()
=>
{
let
done
;
const
promise
=
new
Promise
(
resolve
=>
(
done
=
resolve
));
// sidebar frame
const
portFinder
=
new
PortFinder
({
hostFrame
:
window
,
source
:
'sidebar'
,
});
const
hostRPC
=
new
PortRPC
();
const
simulateSidebar
=
async
()
=>
{
const
portFinder
=
new
PortFinder
({
hostFrame
:
window
,
source
:
'sidebar'
,
});
const
port
=
await
portFinder
.
discover
(
'host'
);
portFinder
.
discover
(
'host'
).
then
(
port
=>
{
const
hostRPC
=
new
PortRPC
();
hostRPC
.
connect
(
port
);
hostRPC
.
call
(
'ping'
,
response
=>
{
assert
.
equal
(
response
,
'pong'
);
done
();
await
new
Promise
(
resolve
=>
{
hostRPC
.
call
(
'ping'
,
response
=>
{
assert
.
equal
(
response
,
'pong'
);
resolve
();
});
});
}
)
;
};
// host frame
const
portProvider
=
new
PortProvider
(
window
.
location
.
origin
);
portProvider
.
listen
();
const
sidebarRPC
=
new
PortRPC
();
const
simulateHost
=
()
=>
{
const
portProvider
=
new
PortProvider
(
window
.
location
.
origin
);
portProvider
.
listen
();
// Register RPC method *before* connection
sidebarRPC
.
on
(
'ping'
,
cb
=>
cb
(
'pong'
));
const
sidebarRPC
=
new
PortRPC
();
sidebarRPC
.
on
(
'ping'
,
cb
=>
cb
(
'pong'
));
portProvider
.
on
(
'frameConnected'
,
(
source
,
port
)
=>
{
if
(
source
===
'sidebar'
)
{
sidebarRPC
.
connect
(
port
);
}
});
portProvider
.
on
(
'frameConnected'
,
(
source
,
port
)
=>
{
if
(
source
===
'sidebar'
)
{
sidebarRPC
.
connect
(
port
);
}
});
};
return
promise
;
return
Promise
.
all
([
simulateSidebar
(),
simulateHost
()])
;
});
});
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment