first webextension test
This commit is contained in:
parent
bb5b6d367c
commit
f6f64297aa
10 changed files with 149 additions and 0 deletions
|
@ -0,0 +1,12 @@
|
|||
import { WINDOWS_CREATE, WINDOWS_REMOVE } from '../shared/messages';
|
||||
import { receiveContentMessage } from './ipc';
|
||||
|
||||
receiveContentMessage((message) => {
|
||||
switch (message.type) {
|
||||
case WINDOWS_CREATE:
|
||||
return browser.windows.create();
|
||||
case WINDOWS_REMOVE:
|
||||
return browser.windows.remove(message.windowId);
|
||||
}
|
||||
});
|
||||
|
7
e2e/ambassador/src/background/ipc.js
Normal file
7
e2e/ambassador/src/background/ipc.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
const receiveContentMessage = (func) => {
|
||||
browser.runtime.onMessage.addListener((message) => {
|
||||
return func(message);
|
||||
});
|
||||
};
|
||||
|
||||
export { receiveContentMessage };
|
29
e2e/ambassador/src/client/ipc.js
Normal file
29
e2e/ambassador/src/client/ipc.js
Normal file
|
@ -0,0 +1,29 @@
|
|||
import { METHOD_REQUEST, METHOD_RESPONSE } from '../shared/messages';
|
||||
|
||||
const generateId = () => {
|
||||
return Math.random().toString();
|
||||
};
|
||||
|
||||
const send = (message) => {
|
||||
return new Promise((resolve) => {
|
||||
let id = generateId();
|
||||
let callback = (e) => {
|
||||
let packet = e.data;
|
||||
if (e.source !== window || packet.method !== METHOD_RESPONSE ||
|
||||
packet.id !== id) {
|
||||
return;
|
||||
}
|
||||
window.removeEventListener('message', callback);
|
||||
resolve(packet.message);
|
||||
};
|
||||
window.addEventListener('message', callback);
|
||||
|
||||
window.postMessage({
|
||||
id,
|
||||
method: METHOD_REQUEST,
|
||||
message
|
||||
}, window.origin);
|
||||
});
|
||||
};
|
||||
|
||||
export { send };
|
17
e2e/ambassador/src/client/windows.js
Normal file
17
e2e/ambassador/src/client/windows.js
Normal file
|
@ -0,0 +1,17 @@
|
|||
import { WINDOWS_CREATE, WINDOWS_REMOVE } from '../shared/messages';
|
||||
import * as ipc from './ipc';
|
||||
|
||||
const create = () => {
|
||||
return ipc.send({
|
||||
type: WINDOWS_CREATE
|
||||
});
|
||||
};
|
||||
|
||||
const remove = (windowId) => {
|
||||
return ipc.send({
|
||||
type: WINDOWS_REMOVE,
|
||||
windowId,
|
||||
});
|
||||
};
|
||||
|
||||
export { create, remove };
|
|
@ -0,0 +1,11 @@
|
|||
import { WINDOWS_CREATE, WINDOWS_REMOVE } from '../shared/messages';
|
||||
import * as ipc from './ipc';
|
||||
|
||||
ipc.receivePageMessage((message) => {
|
||||
switch (message.type) {
|
||||
case WINDOWS_CREATE:
|
||||
return ipc.send(message);
|
||||
case WINDOWS_REMOVE:
|
||||
return ipc.send(message);
|
||||
}
|
||||
});
|
31
e2e/ambassador/src/content/ipc.js
Normal file
31
e2e/ambassador/src/content/ipc.js
Normal file
|
@ -0,0 +1,31 @@
|
|||
import { METHOD_REQUEST, METHOD_RESPONSE } from '../shared/messages';
|
||||
|
||||
const send = (message) => {
|
||||
return browser.runtime.sendMessage(message);
|
||||
};
|
||||
|
||||
const receivePageMessage = (func) => {
|
||||
window.addEventListener('message', (e) => {
|
||||
let packet = e.data;
|
||||
if (e.origin !== window.origin || packet.method !== METHOD_REQUEST) {
|
||||
return;
|
||||
}
|
||||
|
||||
let resp = {
|
||||
id: packet.id,
|
||||
method: METHOD_RESPONSE,
|
||||
};
|
||||
let respMessage = func(packet.message);
|
||||
if (respMessage instanceof Promise) {
|
||||
return respMessage.then((data) => {
|
||||
resp.message = data;
|
||||
e.source.postMessage(resp, e.origin);
|
||||
});
|
||||
} else if (respMessage) {
|
||||
resp.message = respMessage;
|
||||
}
|
||||
e.source.postMessage(resp, e.origin);
|
||||
});
|
||||
};
|
||||
|
||||
export { send, receivePageMessage };
|
12
e2e/ambassador/src/shared/messages.js
Normal file
12
e2e/ambassador/src/shared/messages.js
Normal file
|
@ -0,0 +1,12 @@
|
|||
const METHOD_REQUEST = 'request';
|
||||
const METHOD_RESPONSE = 'response';
|
||||
const WINDOWS_CREATE = 'windows.create';
|
||||
const WINDOWS_REMOVE = 'windows.remove';
|
||||
|
||||
export {
|
||||
METHOD_REQUEST,
|
||||
METHOD_RESPONSE,
|
||||
|
||||
WINDOWS_CREATE,
|
||||
WINDOWS_REMOVE,
|
||||
};
|
19
e2e/contents/scroll.test.js
Normal file
19
e2e/contents/scroll.test.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
import { expect } from "chai";
|
||||
import * as windows from "../ambassador/src/client/windows";
|
||||
|
||||
describe("scroll test", () => {
|
||||
let targetWindow;
|
||||
before(() => {
|
||||
return windows.create().then((win) => {
|
||||
targetWindow = win;
|
||||
});
|
||||
});
|
||||
|
||||
after(() => {
|
||||
return windows.remove(targetWindow.id);
|
||||
});
|
||||
|
||||
it('runs test', () => {
|
||||
expect(targetWindow.id).be.a('number');
|
||||
});
|
||||
});
|
10
e2e/karma-delay.js
Normal file
10
e2e/karma-delay.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
'use strict';
|
||||
|
||||
window.__karma__.start = (function(start){
|
||||
return function(){
|
||||
var args = arguments
|
||||
setTimeout(() => {
|
||||
start(args)
|
||||
}, 1000);
|
||||
};
|
||||
}(window.__karma__.start));
|
|
@ -4,6 +4,7 @@ module.exports = function (config) {
|
|||
basePath: '',
|
||||
frameworks: ['mocha'],
|
||||
files: [
|
||||
'karma-delay.js',
|
||||
'**/*.test.js'
|
||||
],
|
||||
|
||||
|
|
Reference in a new issue