From 8ff200755f6b3661c405b14fe1ff6dc5b0f17dbd Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 4 Feb 2018 17:44:40 +0900 Subject: add ambassador extension --- e2e/ambassador/src/background/index.js | 0 e2e/ambassador/src/content/index.js | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 e2e/ambassador/src/background/index.js create mode 100644 e2e/ambassador/src/content/index.js (limited to 'e2e/ambassador/src') diff --git a/e2e/ambassador/src/background/index.js b/e2e/ambassador/src/background/index.js new file mode 100644 index 0000000..e69de29 diff --git a/e2e/ambassador/src/content/index.js b/e2e/ambassador/src/content/index.js new file mode 100644 index 0000000..e69de29 -- cgit v1.2.3 From f6f64297aa030cd3fbad4bbb9e322e469bc762e8 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 4 Feb 2018 19:27:22 +0900 Subject: first webextension test --- e2e/ambassador/src/background/index.js | 12 ++++++++++++ e2e/ambassador/src/background/ipc.js | 7 +++++++ e2e/ambassador/src/client/ipc.js | 29 +++++++++++++++++++++++++++++ e2e/ambassador/src/client/windows.js | 17 +++++++++++++++++ e2e/ambassador/src/content/index.js | 11 +++++++++++ e2e/ambassador/src/content/ipc.js | 31 +++++++++++++++++++++++++++++++ e2e/ambassador/src/shared/messages.js | 12 ++++++++++++ e2e/contents/scroll.test.js | 19 +++++++++++++++++++ e2e/karma-delay.js | 10 ++++++++++ e2e/karma.conf.js | 1 + 10 files changed, 149 insertions(+) create mode 100644 e2e/ambassador/src/background/ipc.js create mode 100644 e2e/ambassador/src/client/ipc.js create mode 100644 e2e/ambassador/src/client/windows.js create mode 100644 e2e/ambassador/src/content/ipc.js create mode 100644 e2e/ambassador/src/shared/messages.js create mode 100644 e2e/contents/scroll.test.js create mode 100644 e2e/karma-delay.js (limited to 'e2e/ambassador/src') diff --git a/e2e/ambassador/src/background/index.js b/e2e/ambassador/src/background/index.js index e69de29..027c953 100644 --- a/e2e/ambassador/src/background/index.js +++ b/e2e/ambassador/src/background/index.js @@ -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); + } +}); + diff --git a/e2e/ambassador/src/background/ipc.js b/e2e/ambassador/src/background/ipc.js new file mode 100644 index 0000000..95d2164 --- /dev/null +++ b/e2e/ambassador/src/background/ipc.js @@ -0,0 +1,7 @@ +const receiveContentMessage = (func) => { + browser.runtime.onMessage.addListener((message) => { + return func(message); + }); +}; + +export { receiveContentMessage }; diff --git a/e2e/ambassador/src/client/ipc.js b/e2e/ambassador/src/client/ipc.js new file mode 100644 index 0000000..9f232ea --- /dev/null +++ b/e2e/ambassador/src/client/ipc.js @@ -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 }; diff --git a/e2e/ambassador/src/client/windows.js b/e2e/ambassador/src/client/windows.js new file mode 100644 index 0000000..69b8905 --- /dev/null +++ b/e2e/ambassador/src/client/windows.js @@ -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 }; diff --git a/e2e/ambassador/src/content/index.js b/e2e/ambassador/src/content/index.js index e69de29..dd46688 100644 --- a/e2e/ambassador/src/content/index.js +++ b/e2e/ambassador/src/content/index.js @@ -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); + } +}); diff --git a/e2e/ambassador/src/content/ipc.js b/e2e/ambassador/src/content/ipc.js new file mode 100644 index 0000000..62fcac1 --- /dev/null +++ b/e2e/ambassador/src/content/ipc.js @@ -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 }; diff --git a/e2e/ambassador/src/shared/messages.js b/e2e/ambassador/src/shared/messages.js new file mode 100644 index 0000000..e8a0438 --- /dev/null +++ b/e2e/ambassador/src/shared/messages.js @@ -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, +}; diff --git a/e2e/contents/scroll.test.js b/e2e/contents/scroll.test.js new file mode 100644 index 0000000..6cf0042 --- /dev/null +++ b/e2e/contents/scroll.test.js @@ -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'); + }); +}); diff --git a/e2e/karma-delay.js b/e2e/karma-delay.js new file mode 100644 index 0000000..be7b448 --- /dev/null +++ b/e2e/karma-delay.js @@ -0,0 +1,10 @@ +'use strict'; + +window.__karma__.start = (function(start){ +return function(){ + var args = arguments + setTimeout(() => { + start(args) + }, 1000); +}; +}(window.__karma__.start)); diff --git a/e2e/karma.conf.js b/e2e/karma.conf.js index 259eb17..a6c115e 100644 --- a/e2e/karma.conf.js +++ b/e2e/karma.conf.js @@ -4,6 +4,7 @@ module.exports = function (config) { basePath: '', frameworks: ['mocha'], files: [ + 'karma-delay.js', '**/*.test.js' ], -- cgit v1.2.3 From cf03d278eb8bb8f7544ae6395b76e1a1e0781053 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Mon, 12 Feb 2018 21:45:47 +0900 Subject: add util to wait for tab loading --- e2e/ambassador/src/background/tabs.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 e2e/ambassador/src/background/tabs.js (limited to 'e2e/ambassador/src') diff --git a/e2e/ambassador/src/background/tabs.js b/e2e/ambassador/src/background/tabs.js new file mode 100644 index 0000000..93d47a3 --- /dev/null +++ b/e2e/ambassador/src/background/tabs.js @@ -0,0 +1,18 @@ +const create = (props = {}) => { + return new Promise((resolve) => { + browser.tabs.create(props).then((createdTab) => { + let callback = (tabId, changeInfo, tab) => { + if (tab.url !== 'about:blank' && tabId === createdTab.id && + changeInfo.status === 'complete') { + browser.tabs.onUpdated.removeListener(callback); + resolve(tab); + } + }; + browser.tabs.onUpdated.addListener(callback); + }); + }); +}; + +export { + create, +}; -- cgit v1.2.3 From 3f8bbe11d96b751affa9e2bf0a1995008f9e3220 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 11 Feb 2018 15:40:34 +0900 Subject: send press key to tabs --- e2e/ambassador/manifest.json | 3 ++- e2e/ambassador/src/background/index.js | 25 ++++++++++++++++++++++-- e2e/ambassador/src/client/keys.js | 29 ++++++++++++++++++++++++++++ e2e/ambassador/src/client/tabs.js | 12 ++++++++++++ e2e/ambassador/src/client/windows.js | 5 +++-- e2e/ambassador/src/content/index.js | 30 ++++++++++++++++++++++++++--- e2e/ambassador/src/content/ipc.js | 13 +++++++++++-- e2e/ambassador/src/shared/messages.js | 10 ++++++++++ e2e/contents/scroll.test.js | 19 ------------------ e2e/contents/tab.test.js | 35 ++++++++++++++++++++++++++++++++++ e2e/karma-delay.js | 2 +- 11 files changed, 153 insertions(+), 30 deletions(-) create mode 100644 e2e/ambassador/src/client/keys.js create mode 100644 e2e/ambassador/src/client/tabs.js delete mode 100644 e2e/contents/scroll.test.js create mode 100644 e2e/contents/tab.test.js (limited to 'e2e/ambassador/src') diff --git a/e2e/ambassador/manifest.json b/e2e/ambassador/manifest.json index b9b0331..d2253f6 100644 --- a/e2e/ambassador/manifest.json +++ b/e2e/ambassador/manifest.json @@ -22,6 +22,7 @@ "sessions", "storage", "tabs", - "clipboardRead" + "clipboardRead", + "activeTab" ] } diff --git a/e2e/ambassador/src/background/index.js b/e2e/ambassador/src/background/index.js index 027c953..9e64986 100644 --- a/e2e/ambassador/src/background/index.js +++ b/e2e/ambassador/src/background/index.js @@ -1,12 +1,33 @@ -import { WINDOWS_CREATE, WINDOWS_REMOVE } from '../shared/messages'; +import { + WINDOWS_CREATE, WINDOWS_REMOVE, TABS_CREATE, + EVENT_KEYPRESS, EVENT_KEYDOWN, EVENT_KEYUP, +} from '../shared/messages'; +import * as tabs from './tabs'; import { receiveContentMessage } from './ipc'; receiveContentMessage((message) => { switch (message.type) { case WINDOWS_CREATE: - return browser.windows.create(); + return browser.windows.create({ url: message.url }); case WINDOWS_REMOVE: return browser.windows.remove(message.windowId); + case TABS_CREATE: + return tabs.create({ + url: message.url, + windowId: message.windowId, + }); } }); + +receiveContentMessage((message) => { + switch (message.type) { + case EVENT_KEYPRESS: + case EVENT_KEYDOWN: + case EVENT_KEYUP: + return browser.tabs.sendMessage( + message.tabId, + message + ); + } +}); diff --git a/e2e/ambassador/src/client/keys.js b/e2e/ambassador/src/client/keys.js new file mode 100644 index 0000000..af0fb3d --- /dev/null +++ b/e2e/ambassador/src/client/keys.js @@ -0,0 +1,29 @@ +import { EVENT_KEYPRESS, EVENT_KEYDOWN, EVENT_KEYUP } from '../shared/messages'; +import * as ipc from './ipc'; + +const press = (tabId, key) => { + return ipc.send({ + type: EVENT_KEYPRESS, + tabId, + key, + }); +}; + +const down = (tabId, key) => { + return ipc.send({ + type: EVENT_KEYDOWN, + tabId, + key, + }); +}; + + +const up = (tabId, key) => { + return ipc.send({ + type: EVENT_KEYUP, + tabId, + key, + }); +}; + +export { press, down, up }; diff --git a/e2e/ambassador/src/client/tabs.js b/e2e/ambassador/src/client/tabs.js new file mode 100644 index 0000000..4db3c11 --- /dev/null +++ b/e2e/ambassador/src/client/tabs.js @@ -0,0 +1,12 @@ +import { TABS_CREATE } from '../shared/messages'; +import * as ipc from './ipc'; + +const create = (windowId, url) => { + return ipc.send({ + type: TABS_CREATE, + windowId, + url, + }); +}; + +export { create }; diff --git a/e2e/ambassador/src/client/windows.js b/e2e/ambassador/src/client/windows.js index 69b8905..c6ba37a 100644 --- a/e2e/ambassador/src/client/windows.js +++ b/e2e/ambassador/src/client/windows.js @@ -1,9 +1,10 @@ import { WINDOWS_CREATE, WINDOWS_REMOVE } from '../shared/messages'; import * as ipc from './ipc'; -const create = () => { +const create = (url) => { return ipc.send({ - type: WINDOWS_CREATE + type: WINDOWS_CREATE, + url, }); }; diff --git a/e2e/ambassador/src/content/index.js b/e2e/ambassador/src/content/index.js index dd46688..0931f93 100644 --- a/e2e/ambassador/src/content/index.js +++ b/e2e/ambassador/src/content/index.js @@ -1,11 +1,35 @@ -import { WINDOWS_CREATE, WINDOWS_REMOVE } from '../shared/messages'; +import { + WINDOWS_CREATE, WINDOWS_REMOVE, TABS_CREATE, + EVENT_KEYPRESS, EVENT_KEYDOWN, EVENT_KEYUP, +} 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); + case TABS_CREATE: + case EVENT_KEYPRESS: + case EVENT_KEYDOWN: + case EVENT_KEYUP: + return ipc.sendToBackground(message); } }); + +ipc.receiveBackgroundMesssage((message) => { + switch (message.type) { + case EVENT_KEYPRESS: + document.body.dispatchEvent( + new KeyboardEvent('keypress', { 'key': message.key })); + break; + case EVENT_KEYDOWN: + document.body.dispatchEvent( + new KeyboardEvent('keydown', { 'key': message.key })); + break; + case EVENT_KEYUP: + document.body.dispatchEvent( + new KeyboardEvent('keyup', { 'key': message.key })); + break; + } + return Promise.resolve({}); +}); diff --git a/e2e/ambassador/src/content/ipc.js b/e2e/ambassador/src/content/ipc.js index 62fcac1..917623c 100644 --- a/e2e/ambassador/src/content/ipc.js +++ b/e2e/ambassador/src/content/ipc.js @@ -1,9 +1,15 @@ import { METHOD_REQUEST, METHOD_RESPONSE } from '../shared/messages'; -const send = (message) => { +const sendToBackground = (message) => { return browser.runtime.sendMessage(message); }; +const receiveBackgroundMesssage = (func) => { + return browser.runtime.onMessage.addListener((message) => { + return Promise.resolve(func(message)); + }); +}; + const receivePageMessage = (func) => { window.addEventListener('message', (e) => { let packet = e.data; @@ -28,4 +34,7 @@ const receivePageMessage = (func) => { }); }; -export { send, receivePageMessage }; +export { + sendToBackground, receiveBackgroundMesssage, + receivePageMessage, +}; diff --git a/e2e/ambassador/src/shared/messages.js b/e2e/ambassador/src/shared/messages.js index e8a0438..1369260 100644 --- a/e2e/ambassador/src/shared/messages.js +++ b/e2e/ambassador/src/shared/messages.js @@ -2,6 +2,10 @@ const METHOD_REQUEST = 'request'; const METHOD_RESPONSE = 'response'; const WINDOWS_CREATE = 'windows.create'; const WINDOWS_REMOVE = 'windows.remove'; +const TABS_CREATE = 'tabs.create'; +const EVENT_KEYPRESS = 'event.keypress'; +const EVENT_KEYDOWN = 'event.keydown'; +const EVENT_KEYUP = 'event.keyup'; export { METHOD_REQUEST, @@ -9,4 +13,10 @@ export { WINDOWS_CREATE, WINDOWS_REMOVE, + + TABS_CREATE, + + EVENT_KEYPRESS, + EVENT_KEYDOWN, + EVENT_KEYUP, }; diff --git a/e2e/contents/scroll.test.js b/e2e/contents/scroll.test.js deleted file mode 100644 index 6cf0042..0000000 --- a/e2e/contents/scroll.test.js +++ /dev/null @@ -1,19 +0,0 @@ -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'); - }); -}); diff --git a/e2e/contents/tab.test.js b/e2e/contents/tab.test.js new file mode 100644 index 0000000..d33a35f --- /dev/null +++ b/e2e/contents/tab.test.js @@ -0,0 +1,35 @@ +import { expect } from "chai"; +import * as windows from "../ambassador/src/client/windows"; +import * as tabs from "../ambassador/src/client/tabs"; +import * as keys from "../ambassador/src/client/keys"; + +const SERVER_URL = "localhost:11111"; + +describe("tab test", function() { + let targetWindow; + let targetTab; + + before(() => { + return windows.create().then((win) => { + targetWindow = win; + return tabs.create(win.id, SERVER_URL).then((tab) => { + targetTab = tab; + }); + }); + }); + + after(() => { + return windows.remove(targetWindow.id); + }); + + it('delete tab', (done) => { + let before = window.document.documentElement.scrollTop; + keys.press(targetTab.id, 'j').then((r) => { + }); + keys.press(targetTab.id, 'j').then((r) => { + }); + keys.press(targetTab.id, 'G').then((r) => { + }); + let after = window.document.documentElement.scrollTop; + }); +}); diff --git a/e2e/karma-delay.js b/e2e/karma-delay.js index be7b448..7d18c4a 100644 --- a/e2e/karma-delay.js +++ b/e2e/karma-delay.js @@ -5,6 +5,6 @@ return function(){ var args = arguments setTimeout(() => { start(args) - }, 1000); + }, 3000); }; }(window.__karma__.start)); -- cgit v1.2.3 From 0904f8e1ebd61d425c3536a7dd02afbffaad0550 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Tue, 13 Feb 2018 20:13:27 +0900 Subject: add tab delete test --- e2e/ambassador/src/background/index.js | 5 ++++- e2e/ambassador/src/client/windows.js | 13 +++++++++++-- e2e/ambassador/src/content/index.js | 4 +++- e2e/ambassador/src/shared/messages.js | 2 ++ e2e/contents/tab.test.js | 17 ++++++++--------- 5 files changed, 28 insertions(+), 13 deletions(-) (limited to 'e2e/ambassador/src') diff --git a/e2e/ambassador/src/background/index.js b/e2e/ambassador/src/background/index.js index 9e64986..f9fda7e 100644 --- a/e2e/ambassador/src/background/index.js +++ b/e2e/ambassador/src/background/index.js @@ -1,5 +1,6 @@ import { - WINDOWS_CREATE, WINDOWS_REMOVE, TABS_CREATE, + WINDOWS_CREATE, WINDOWS_REMOVE, WINDOWS_GET, + TABS_CREATE, EVENT_KEYPRESS, EVENT_KEYDOWN, EVENT_KEYUP, } from '../shared/messages'; import * as tabs from './tabs'; @@ -11,6 +12,8 @@ receiveContentMessage((message) => { return browser.windows.create({ url: message.url }); case WINDOWS_REMOVE: return browser.windows.remove(message.windowId); + case WINDOWS_GET: + return browser.windows.get(message.windowId, { populate: true }); case TABS_CREATE: return tabs.create({ url: message.url, diff --git a/e2e/ambassador/src/client/windows.js b/e2e/ambassador/src/client/windows.js index c6ba37a..f92405a 100644 --- a/e2e/ambassador/src/client/windows.js +++ b/e2e/ambassador/src/client/windows.js @@ -1,4 +1,6 @@ -import { WINDOWS_CREATE, WINDOWS_REMOVE } from '../shared/messages'; +import { + WINDOWS_CREATE, WINDOWS_REMOVE, WINDOWS_GET +} from '../shared/messages'; import * as ipc from './ipc'; const create = (url) => { @@ -15,4 +17,11 @@ const remove = (windowId) => { }); }; -export { create, remove }; +const get = (windowId) => { + return ipc.send({ + type: WINDOWS_GET, + windowId, + }); +}; + +export { create, remove, get }; diff --git a/e2e/ambassador/src/content/index.js b/e2e/ambassador/src/content/index.js index 0931f93..8573d66 100644 --- a/e2e/ambassador/src/content/index.js +++ b/e2e/ambassador/src/content/index.js @@ -1,5 +1,6 @@ import { - WINDOWS_CREATE, WINDOWS_REMOVE, TABS_CREATE, + WINDOWS_CREATE, WINDOWS_REMOVE, WINDOWS_GET, + TABS_CREATE, EVENT_KEYPRESS, EVENT_KEYDOWN, EVENT_KEYUP, } from '../shared/messages'; import * as ipc from './ipc'; @@ -8,6 +9,7 @@ ipc.receivePageMessage((message) => { switch (message.type) { case WINDOWS_CREATE: case WINDOWS_REMOVE: + case WINDOWS_GET: case TABS_CREATE: case EVENT_KEYPRESS: case EVENT_KEYDOWN: diff --git a/e2e/ambassador/src/shared/messages.js b/e2e/ambassador/src/shared/messages.js index 1369260..32b7aa2 100644 --- a/e2e/ambassador/src/shared/messages.js +++ b/e2e/ambassador/src/shared/messages.js @@ -2,6 +2,7 @@ const METHOD_REQUEST = 'request'; const METHOD_RESPONSE = 'response'; const WINDOWS_CREATE = 'windows.create'; const WINDOWS_REMOVE = 'windows.remove'; +const WINDOWS_GET = 'windows.get'; const TABS_CREATE = 'tabs.create'; const EVENT_KEYPRESS = 'event.keypress'; const EVENT_KEYDOWN = 'event.keydown'; @@ -13,6 +14,7 @@ export { WINDOWS_CREATE, WINDOWS_REMOVE, + WINDOWS_GET, TABS_CREATE, diff --git a/e2e/contents/tab.test.js b/e2e/contents/tab.test.js index d33a35f..dda572f 100644 --- a/e2e/contents/tab.test.js +++ b/e2e/contents/tab.test.js @@ -5,7 +5,7 @@ import * as keys from "../ambassador/src/client/keys"; const SERVER_URL = "localhost:11111"; -describe("tab test", function() { +describe("tab test", () => { let targetWindow; let targetTab; @@ -22,14 +22,13 @@ describe("tab test", function() { return windows.remove(targetWindow.id); }); - it('delete tab', (done) => { - let before = window.document.documentElement.scrollTop; - keys.press(targetTab.id, 'j').then((r) => { + it('delete tab', () => { + return Promise.resolve().then(() => { + return keys.press(targetTab.id, 'd'); + }).then(() => { + return windows.get(targetWindow.id); + }).then((after) => { + expect(after.tabs).to.have.lengthOf(1); }); - keys.press(targetTab.id, 'j').then((r) => { - }); - keys.press(targetTab.id, 'G').then((r) => { - }); - let after = window.document.documentElement.scrollTop; }); }); -- cgit v1.2.3 From b694afb7ce0eed4c4ee3ee9c3fae5dd35cb72d14 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Wed, 14 Feb 2018 21:11:03 +0900 Subject: add scroll test --- e2e/ambassador/src/background/index.js | 9 ++-- e2e/ambassador/src/client/scrolls.js | 20 +++++++++ e2e/ambassador/src/content/index.js | 19 +++----- e2e/ambassador/src/content/scrolls.js | 18 ++++++++ e2e/ambassador/src/shared/messages.js | 4 ++ e2e/contents/scroll.test.js | 81 ++++++++++++++++++++++++++++++++++ 6 files changed, 133 insertions(+), 18 deletions(-) create mode 100644 e2e/ambassador/src/client/scrolls.js create mode 100644 e2e/ambassador/src/content/scrolls.js create mode 100644 e2e/contents/scroll.test.js (limited to 'e2e/ambassador/src') diff --git a/e2e/ambassador/src/background/index.js b/e2e/ambassador/src/background/index.js index f9fda7e..c3e9dc1 100644 --- a/e2e/ambassador/src/background/index.js +++ b/e2e/ambassador/src/background/index.js @@ -2,6 +2,7 @@ import { WINDOWS_CREATE, WINDOWS_REMOVE, WINDOWS_GET, TABS_CREATE, EVENT_KEYPRESS, EVENT_KEYDOWN, EVENT_KEYUP, + SCROLL_GET, SCROLL_SET, } from '../shared/messages'; import * as tabs from './tabs'; import { receiveContentMessage } from './ipc'; @@ -19,15 +20,11 @@ receiveContentMessage((message) => { url: message.url, windowId: message.windowId, }); - } -}); - - -receiveContentMessage((message) => { - switch (message.type) { case EVENT_KEYPRESS: case EVENT_KEYDOWN: case EVENT_KEYUP: + case SCROLL_GET: + case SCROLL_SET: return browser.tabs.sendMessage( message.tabId, message diff --git a/e2e/ambassador/src/client/scrolls.js b/e2e/ambassador/src/client/scrolls.js new file mode 100644 index 0000000..f8f82e9 --- /dev/null +++ b/e2e/ambassador/src/client/scrolls.js @@ -0,0 +1,20 @@ +import { SCROLL_GET, SCROLL_SET } from '../shared/messages'; +import * as ipc from './ipc'; + +const get = (tabId) => { + return ipc.send({ + type: SCROLL_GET, + tabId, + }); +}; + +const set = (tabId, x, y) => { + return ipc.send({ + type: SCROLL_SET, + tabId, + x, + y, + }); +}; + +export { get, set }; diff --git a/e2e/ambassador/src/content/index.js b/e2e/ambassador/src/content/index.js index 8573d66..93943b8 100644 --- a/e2e/ambassador/src/content/index.js +++ b/e2e/ambassador/src/content/index.js @@ -1,21 +1,12 @@ import { - WINDOWS_CREATE, WINDOWS_REMOVE, WINDOWS_GET, - TABS_CREATE, EVENT_KEYPRESS, EVENT_KEYDOWN, EVENT_KEYUP, + SCROLL_GET, SCROLL_SET, } from '../shared/messages'; import * as ipc from './ipc'; +import * as scrolls from './scrolls'; ipc.receivePageMessage((message) => { - switch (message.type) { - case WINDOWS_CREATE: - case WINDOWS_REMOVE: - case WINDOWS_GET: - case TABS_CREATE: - case EVENT_KEYPRESS: - case EVENT_KEYDOWN: - case EVENT_KEYUP: - return ipc.sendToBackground(message); - } + return ipc.sendToBackground(message); }); ipc.receiveBackgroundMesssage((message) => { @@ -32,6 +23,10 @@ ipc.receiveBackgroundMesssage((message) => { document.body.dispatchEvent( new KeyboardEvent('keyup', { 'key': message.key })); break; + case SCROLL_GET: + return Promise.resolve(scrolls.get()); + case SCROLL_SET: + return Promise.resolve(scrolls.set(message.x, message.y)); } return Promise.resolve({}); }); diff --git a/e2e/ambassador/src/content/scrolls.js b/e2e/ambassador/src/content/scrolls.js new file mode 100644 index 0000000..79be01d --- /dev/null +++ b/e2e/ambassador/src/content/scrolls.js @@ -0,0 +1,18 @@ +const get = () => { + let element = document.documentElement; + return { + xMax: element.scrollWidth - element.clientWidth, + yMax: element.scrollHeight - element.clientHeight, + x: element.scrollLeft, + y: element.scrollTop, + }; +}; + +const set = (x, y) => { + let element = document.documentElement; + element.scrollLeft = x; + element.scrollTop = y; + return get(); +}; + +export { get, set }; diff --git a/e2e/ambassador/src/shared/messages.js b/e2e/ambassador/src/shared/messages.js index 32b7aa2..dd389db 100644 --- a/e2e/ambassador/src/shared/messages.js +++ b/e2e/ambassador/src/shared/messages.js @@ -7,6 +7,8 @@ const TABS_CREATE = 'tabs.create'; const EVENT_KEYPRESS = 'event.keypress'; const EVENT_KEYDOWN = 'event.keydown'; const EVENT_KEYUP = 'event.keyup'; +const SCROLL_GET = 'scroll.get'; +const SCROLL_SET = 'scroll.set'; export { METHOD_REQUEST, @@ -21,4 +23,6 @@ export { EVENT_KEYPRESS, EVENT_KEYDOWN, EVENT_KEYUP, + SCROLL_GET, + SCROLL_SET, }; diff --git a/e2e/contents/scroll.test.js b/e2e/contents/scroll.test.js new file mode 100644 index 0000000..79e0d32 --- /dev/null +++ b/e2e/contents/scroll.test.js @@ -0,0 +1,81 @@ +import { expect } from "chai"; +import * as windows from "../ambassador/src/client/windows"; +import * as tabs from "../ambassador/src/client/tabs"; +import * as keys from "../ambassador/src/client/keys"; +import * as scrolls from "../ambassador/src/client/scrolls"; + +const SERVER_URL = "localhost:11111"; + +describe("scroll test", () => { + let targetWindow; + let targetTab; + + before(() => { + return windows.create().then((win) => { + targetWindow = win; + return tabs.create(targetWindow.id, SERVER_URL); + }).then((tab) => { + targetTab = tab; + }); + }); + + after(() => { + return windows.remove(targetWindow.id); + }); + + describe('press k', () => { + it('scrolls up', () => { + let before + return scrolls.set(targetTab.id, 100, 100).then((scroll) => { + before = scroll; + return keys.press(targetTab.id, 'k'); + }).then(() => { + return scrolls.get(targetTab.id); + }).then((actual) => { + expect(actual.y).to.be.lessThan(before.y); + }); + }); + }); + + describe('press j', () => { + it('scrolls down', () => { + let before + return scrolls.set(targetTab.id, 100, 100).then((scroll) => { + before = scroll; + return keys.press(targetTab.id, 'j'); + }).then(() => { + return scrolls.get(targetTab.id); + }).then((actual) => { + expect(actual.y).to.be.greaterThan(before.y); + }); + }); + }); + + describe('press h', () => { + it('scrolls left', () => { + let before + return scrolls.set(targetTab.id, 100, 100).then((scroll) => { + before = scroll; + return keys.press(targetTab.id, 'h'); + }).then(() => { + return scrolls.get(targetTab.id); + }).then((actual) => { + expect(actual.x).to.be.lessThan(before.x); + }); + }); + }); + + describe('press l', () => { + it('scrolls right', () => { + let before + return scrolls.set(targetTab.id, 100, 100).then((scroll) => { + before = scroll; + return keys.press(targetTab.id, 'l'); + }).then(() => { + return scrolls.get(targetTab.id); + }).then((actual) => { + expect(actual.x).to.be.greaterThan(before.x); + }); + }); + }); +}); -- cgit v1.2.3 From d4e4b7541433d527225026f51e14fc0e2c585e04 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Wed, 14 Feb 2018 21:30:04 +0900 Subject: add scroll tests --- e2e/ambassador/src/client/keys.js | 20 ++++--- e2e/ambassador/src/content/events.js | 31 ++++++++++ e2e/ambassador/src/content/index.js | 10 ++-- e2e/contents/scroll.test.js | 110 +++++++++++++++++++++-------------- 4 files changed, 112 insertions(+), 59 deletions(-) create mode 100644 e2e/ambassador/src/content/events.js (limited to 'e2e/ambassador/src') diff --git a/e2e/ambassador/src/client/keys.js b/e2e/ambassador/src/client/keys.js index af0fb3d..37b9c0a 100644 --- a/e2e/ambassador/src/client/keys.js +++ b/e2e/ambassador/src/client/keys.js @@ -1,29 +1,31 @@ import { EVENT_KEYPRESS, EVENT_KEYDOWN, EVENT_KEYUP } from '../shared/messages'; import * as ipc from './ipc'; -const press = (tabId, key) => { - return ipc.send({ +const NEUTRAL_MODIFIERS = { shiftKey: false, altKey: false, ctrlKey: false }; + +const press = (tabId, key, modifiers = NEUTRAL_MODIFIERS) => { + return ipc.send(Object.assign({}, modifiers, { type: EVENT_KEYPRESS, tabId, key, - }); + })); }; -const down = (tabId, key) => { - return ipc.send({ +const down = (tabId, key, modifiers = NEUTRAL_MODIFIERS) => { + return ipc.send(Object.assign({}, modifiers, { type: EVENT_KEYDOWN, tabId, key, - }); + })); }; -const up = (tabId, key) => { - return ipc.send({ +const up = (tabId, key, modifiers = NEUTRAL_MODIFIERS) => { + return ipc.send(Object.assign({}, modifiers, { type: EVENT_KEYUP, tabId, key, - }); + })); }; export { press, down, up }; diff --git a/e2e/ambassador/src/content/events.js b/e2e/ambassador/src/content/events.js new file mode 100644 index 0000000..1e45909 --- /dev/null +++ b/e2e/ambassador/src/content/events.js @@ -0,0 +1,31 @@ +const keypress = (opts) => { + let event = new KeyboardEvent('keypress', { + key: opts.key, + altKey: opts.altKey, + shiftKey: opts.shiftKey, + ctrlKey: opts.ctrlKey + }); + document.body.dispatchEvent(event); +}; + +const keydown = (opts) => { + let event = new KeyboardEvent('keydown', { + key: opts.key, + altKey: opts.altKey, + shiftKey: opts.shiftKey, + ctrlKey: opts.ctrlKey + }); + document.body.dispatchEvent(event); +}; + +const keyup = (opts) => { + let event = new KeyboardEvent('keyup', { + key: opts.key, + altKey: opts.altKey, + shiftKey: opts.shiftKey, + ctrlKey: opts.ctrlKey + }); + document.body.dispatchEvent(event); +}; + +export { keypress, keydown, keyup }; diff --git a/e2e/ambassador/src/content/index.js b/e2e/ambassador/src/content/index.js index 93943b8..fd19136 100644 --- a/e2e/ambassador/src/content/index.js +++ b/e2e/ambassador/src/content/index.js @@ -3,6 +3,7 @@ import { SCROLL_GET, SCROLL_SET, } from '../shared/messages'; import * as ipc from './ipc'; +import * as events from './events'; import * as scrolls from './scrolls'; ipc.receivePageMessage((message) => { @@ -12,16 +13,13 @@ ipc.receivePageMessage((message) => { ipc.receiveBackgroundMesssage((message) => { switch (message.type) { case EVENT_KEYPRESS: - document.body.dispatchEvent( - new KeyboardEvent('keypress', { 'key': message.key })); + events.keypress(message); break; case EVENT_KEYDOWN: - document.body.dispatchEvent( - new KeyboardEvent('keydown', { 'key': message.key })); + events.keydown(message); break; case EVENT_KEYUP: - document.body.dispatchEvent( - new KeyboardEvent('keyup', { 'key': message.key })); + events.keyup(message); break; case SCROLL_GET: return Promise.resolve(scrolls.get()); diff --git a/e2e/contents/scroll.test.js b/e2e/contents/scroll.test.js index 79e0d32..da14f76 100644 --- a/e2e/contents/scroll.test.js +++ b/e2e/contents/scroll.test.js @@ -23,59 +23,81 @@ describe("scroll test", () => { return windows.remove(targetWindow.id); }); - describe('press k', () => { - it('scrolls up', () => { - let before - return scrolls.set(targetTab.id, 100, 100).then((scroll) => { - before = scroll; - return keys.press(targetTab.id, 'k'); - }).then(() => { - return scrolls.get(targetTab.id); - }).then((actual) => { - expect(actual.y).to.be.lessThan(before.y); - }); + it('scrolls up by k', () => { + let before + return scrolls.set(targetTab.id, 100, 100).then((scroll) => { + before = scroll; + return keys.press(targetTab.id, 'k'); + }).then(() => { + return scrolls.get(targetTab.id); + }).then((actual) => { + expect(actual.y).to.be.lessThan(before.y); }); }); - describe('press j', () => { - it('scrolls down', () => { - let before - return scrolls.set(targetTab.id, 100, 100).then((scroll) => { - before = scroll; - return keys.press(targetTab.id, 'j'); - }).then(() => { - return scrolls.get(targetTab.id); - }).then((actual) => { - expect(actual.y).to.be.greaterThan(before.y); - }); + it('scrolls down by j', () => { + let before + return scrolls.set(targetTab.id, 100, 100).then((scroll) => { + before = scroll; + return keys.press(targetTab.id, 'j'); + }).then(() => { + return scrolls.get(targetTab.id); + }).then((actual) => { + expect(actual.y).to.be.greaterThan(before.y); }); }); - describe('press h', () => { - it('scrolls left', () => { - let before - return scrolls.set(targetTab.id, 100, 100).then((scroll) => { - before = scroll; - return keys.press(targetTab.id, 'h'); - }).then(() => { - return scrolls.get(targetTab.id); - }).then((actual) => { - expect(actual.x).to.be.lessThan(before.x); - }); + it('scrolls left by h', () => { + let before + return scrolls.set(targetTab.id, 100, 100).then((scroll) => { + before = scroll; + return keys.press(targetTab.id, 'h'); + }).then(() => { + return scrolls.get(targetTab.id); + }).then((actual) => { + expect(actual.x).to.be.lessThan(before.x); }); }); - describe('press l', () => { - it('scrolls right', () => { - let before - return scrolls.set(targetTab.id, 100, 100).then((scroll) => { - before = scroll; - return keys.press(targetTab.id, 'l'); - }).then(() => { - return scrolls.get(targetTab.id); - }).then((actual) => { - expect(actual.x).to.be.greaterThan(before.x); - }); + it('scrolls top by gg', () => { + return scrolls.set(targetTab.id, 100, 100).then((scroll) => { + return keys.press(targetTab.id, 'g'); + }).then(() => { + return keys.press(targetTab.id, 'g'); + }).then(() => { + return scrolls.get(targetTab.id); + }).then((actual) => { + expect(actual.y).to.be.equals(0); + }); + }); + + it('scrolls bottom by G', () => { + return scrolls.set(targetTab.id, 100, 100).then((scroll) => { + return keys.press(targetTab.id, 'G', { shiftKey: true }); + }).then(() => { + return scrolls.get(targetTab.id); + }).then((actual) => { + expect(actual.y).to.be.equals(actual.yMax); + }); + }); + + it('scrolls bottom by 0', () => { + return scrolls.set(targetTab.id, 100, 100).then((scroll) => { + return keys.press(targetTab.id, '0'); + }).then(() => { + return scrolls.get(targetTab.id); + }).then((actual) => { + expect(actual.x).to.be.equals(0); + }); + }); + + it('scrolls bottom by $', () => { + return scrolls.set(targetTab.id, 100, 100).then((scroll) => { + return keys.press(targetTab.id, '$'); + }).then(() => { + return scrolls.get(targetTab.id); + }).then((actual) => { + expect(actual.x).to.be.equals(actual.xMax); }); }); }); -- cgit v1.2.3 From ffd1018fa73eef644b170485cc9bd477e21804e7 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Wed, 14 Feb 2018 21:48:19 +0900 Subject: add scroll test --- e2e/ambassador/src/content/scrolls.js | 2 ++ e2e/contents/scroll.test.js | 48 +++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) (limited to 'e2e/ambassador/src') diff --git a/e2e/ambassador/src/content/scrolls.js b/e2e/ambassador/src/content/scrolls.js index 79be01d..4227cf7 100644 --- a/e2e/ambassador/src/content/scrolls.js +++ b/e2e/ambassador/src/content/scrolls.js @@ -5,6 +5,8 @@ const get = () => { yMax: element.scrollHeight - element.clientHeight, x: element.scrollLeft, y: element.scrollTop, + frameWidth: element.clientWidth, + frameHeight: element.clientHeight, }; }; diff --git a/e2e/contents/scroll.test.js b/e2e/contents/scroll.test.js index da14f76..070529a 100644 --- a/e2e/contents/scroll.test.js +++ b/e2e/contents/scroll.test.js @@ -100,4 +100,52 @@ describe("scroll test", () => { expect(actual.x).to.be.equals(actual.xMax); }); }); + + it('scrolls bottom by ', () => { + let before + return scrolls.set(targetTab.id, 5000, 5000).then((scroll) => { + before = scroll; + return keys.press(targetTab.id, 'u', { ctrlKey: true }); + }).then(() => { + return scrolls.get(targetTab.id); + }).then((actual) => { + expect(actual.y).to.closeTo(before.y - before.frameHeight / 2, 1); + }); + }); + + it('scrolls bottom by ', () => { + let before + return scrolls.set(targetTab.id, 5000, 5000).then((scroll) => { + before = scroll; + return keys.press(targetTab.id, 'd', { ctrlKey: true }); + }).then(() => { + return scrolls.get(targetTab.id); + }).then((actual) => { + expect(actual.y).to.closeTo(before.y + before.frameHeight / 2, 1); + }); + }); + + it('scrolls bottom by ', () => { + let before + return scrolls.set(targetTab.id, 5000, 5000).then((scroll) => { + before = scroll; + return keys.press(targetTab.id, 'b', { ctrlKey: true }); + }).then(() => { + return scrolls.get(targetTab.id); + }).then((actual) => { + expect(actual.y).to.equals(before.y - before.frameHeight); + }); + }); + + it('scrolls bottom by ', () => { + let before + return scrolls.set(targetTab.id, 5000, 5000).then((scroll) => { + before = scroll; + return keys.press(targetTab.id, 'f', { ctrlKey: true }); + }).then(() => { + return scrolls.get(targetTab.id); + }).then((actual) => { + expect(actual.y).to.equals(before.y + before.frameHeight); + }); + }); }); -- cgit v1.2.3 From cbd8f5b9288c7ec84fc77a3d1a30a4d018cf05f0 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sat, 17 Feb 2018 22:41:08 +0900 Subject: add tab tests --- e2e/ambassador/src/background/index.js | 7 +- e2e/ambassador/src/background/tabs.js | 10 ++- e2e/ambassador/src/client/tabs.js | 14 +++- e2e/ambassador/src/shared/messages.js | 2 + e2e/contents/tab.test.js | 132 ++++++++++++++++++++++++++++++++- 5 files changed, 157 insertions(+), 8 deletions(-) (limited to 'e2e/ambassador/src') diff --git a/e2e/ambassador/src/background/index.js b/e2e/ambassador/src/background/index.js index c3e9dc1..6425b54 100644 --- a/e2e/ambassador/src/background/index.js +++ b/e2e/ambassador/src/background/index.js @@ -1,6 +1,6 @@ import { WINDOWS_CREATE, WINDOWS_REMOVE, WINDOWS_GET, - TABS_CREATE, + TABS_CREATE, TABS_SELECT_AT, EVENT_KEYPRESS, EVENT_KEYDOWN, EVENT_KEYUP, SCROLL_GET, SCROLL_SET, } from '../shared/messages'; @@ -20,6 +20,11 @@ receiveContentMessage((message) => { url: message.url, windowId: message.windowId, }); + case TABS_SELECT_AT: + return tabs.selectAt({ + windowId: message.windowId, + index: message.index, + }); case EVENT_KEYPRESS: case EVENT_KEYDOWN: case EVENT_KEYUP: diff --git a/e2e/ambassador/src/background/tabs.js b/e2e/ambassador/src/background/tabs.js index 93d47a3..d049500 100644 --- a/e2e/ambassador/src/background/tabs.js +++ b/e2e/ambassador/src/background/tabs.js @@ -13,6 +13,14 @@ const create = (props = {}) => { }); }; +const selectAt = (props = {}) => { + return browser.tabs.query({ windowId: props.windowId }).then((tabs) => { + let target = tabs[props.index]; + return browser.tabs.update(target.id, { active: true }); + }); +}; + + export { - create, + create, selectAt }; diff --git a/e2e/ambassador/src/client/tabs.js b/e2e/ambassador/src/client/tabs.js index 4db3c11..6aaefbd 100644 --- a/e2e/ambassador/src/client/tabs.js +++ b/e2e/ambassador/src/client/tabs.js @@ -1,4 +1,6 @@ -import { TABS_CREATE } from '../shared/messages'; +import { + TABS_CREATE, TABS_SELECT_AT, +} from '../shared/messages'; import * as ipc from './ipc'; const create = (windowId, url) => { @@ -9,4 +11,12 @@ const create = (windowId, url) => { }); }; -export { create }; +const selectAt = (windowId, index) => { + return ipc.send({ + type: TABS_SELECT_AT, + windowId, + index, + }); +}; + +export { create, selectAt }; diff --git a/e2e/ambassador/src/shared/messages.js b/e2e/ambassador/src/shared/messages.js index dd389db..9fd1054 100644 --- a/e2e/ambassador/src/shared/messages.js +++ b/e2e/ambassador/src/shared/messages.js @@ -4,6 +4,7 @@ const WINDOWS_CREATE = 'windows.create'; const WINDOWS_REMOVE = 'windows.remove'; const WINDOWS_GET = 'windows.get'; const TABS_CREATE = 'tabs.create'; +const TABS_SELECT_AT = 'tabs.selectAt'; const EVENT_KEYPRESS = 'event.keypress'; const EVENT_KEYDOWN = 'event.keydown'; const EVENT_KEYUP = 'event.keyup'; @@ -19,6 +20,7 @@ export { WINDOWS_GET, TABS_CREATE, + TABS_SELECT_AT, EVENT_KEYPRESS, EVENT_KEYDOWN, diff --git a/e2e/contents/tab.test.js b/e2e/contents/tab.test.js index 707acef..852c6d9 100644 --- a/e2e/contents/tab.test.js +++ b/e2e/contents/tab.test.js @@ -3,18 +3,18 @@ import * as windows from "../ambassador/src/client/windows"; import * as tabs from "../ambassador/src/client/tabs"; import * as keys from "../ambassador/src/client/keys"; -const SERVER_URL = "localhost:11111"; +const SERVER_URL = "localhost:11111/"; describe("tab test", () => { let targetWindow; - before(() => { - return windows.create().then((win) => { + beforeEach(() => { + return windows.create(SERVER_URL).then((win) => { targetWindow = win; }); }); - after(() => { + afterEach(() => { return windows.remove(targetWindow.id); }); @@ -51,4 +51,128 @@ describe("tab test", () => { expect(actual.tabs).to.have.lengthOf(before.tabs.length + 1); }); }) + + it('selects previous tab by K', () => { + return Promise.resolve().then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#1') + }).then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#2') + }).then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#3'); + }).then(() => { + return tabs.selectAt(targetWindow.id, 2); + }).then((tab) => { + return keys.press(tab.id, 'K', { shiftKey: true }); + }).then(() => { + return windows.get(targetWindow.id); + }).then((win) => { + expect(win.tabs[1].active).to.be.true; + }); + }); + + it('selects previous tab by K rotatory', () => { + return Promise.resolve().then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#1') + }).then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#2') + }).then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#3'); + }).then(() => { + return tabs.selectAt(targetWindow.id, 0); + }).then((tab) => { + return keys.press(tab.id, 'K', { shiftKey: true }); + }).then(() => { + return windows.get(targetWindow.id); + }).then((win) => { + expect(win.tabs[3].active).to.be.true; + }); + }); + + it('selects next tab by J', () => { + return Promise.resolve().then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#1') + }).then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#2') + }).then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#3'); + }).then(() => { + return tabs.selectAt(targetWindow.id, 2); + }).then((tab) => { + return keys.press(tab.id, 'J', { shiftKey: true }); + }).then(() => { + return windows.get(targetWindow.id); + }).then((win) => { + expect(win.tabs[3].active).to.be.true; + }); + }); + + it('selects previous tab by J rotatory', () => { + return Promise.resolve().then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#1') + }).then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#2') + }).then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#3'); + }).then(() => { + return tabs.selectAt(targetWindow.id, 3); + }).then((tab) => { + return keys.press(tab.id, 'J', { shiftKey: true }); + }).then(() => { + return windows.get(targetWindow.id); + }).then((win) => { + expect(win.tabs[0].active).to.be.true; + }); + }); + + it('selects first tab by g0', () => { + return Promise.resolve().then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#1') + }).then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#2') + }).then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#3'); + }).then(() => { + return tabs.selectAt(targetWindow.id, 2); + }).then((tab) => { + return keys.press(tab.id, 'g').then(() => tab); + }).then((tab) => { + return keys.press(tab.id, '0'); + }).then(() => { + return windows.get(targetWindow.id); + }).then((win) => { + expect(win.tabs[0].active).to.be.true; + }); + }); + + it('selects last tab by g$', () => { + return Promise.resolve().then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#1') + }).then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#2') + }).then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#3'); + }).then(() => { + return tabs.selectAt(targetWindow.id, 2); + }).then((tab) => { + return keys.press(tab.id, 'g').then(() => tab); + }).then((tab) => { + return keys.press(tab.id, '$'); + }).then(() => { + return windows.get(targetWindow.id); + }).then((win) => { + expect(win.tabs[3].active).to.be.true; + }); + }); + + it('deletes tab by d', () => { + return Promise.resolve().then(() => { + return tabs.create(targetWindow.id, SERVER_URL + '#1'); + }).then((tab) => { + return keys.press(tab.id, 'd'); + }).then(() => { + return windows.get(targetWindow.id); + }).then((win) => { + expect(win.tabs).to.have.lengthOf(1); + }); + }); }); -- cgit v1.2.3 From 13eba7574cd2ad2d40eba6d8cd5dde3ac4b6e806 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Tue, 20 Feb 2018 20:48:12 +0900 Subject: add zomm tests --- e2e/ambassador/src/background/index.js | 8 +++++++- e2e/ambassador/src/client/tabs.js | 19 +++++++++++++++++-- e2e/ambassador/src/shared/messages.js | 4 ++++ 3 files changed, 28 insertions(+), 3 deletions(-) (limited to 'e2e/ambassador/src') diff --git a/e2e/ambassador/src/background/index.js b/e2e/ambassador/src/background/index.js index 6425b54..5264c16 100644 --- a/e2e/ambassador/src/background/index.js +++ b/e2e/ambassador/src/background/index.js @@ -1,6 +1,6 @@ import { WINDOWS_CREATE, WINDOWS_REMOVE, WINDOWS_GET, - TABS_CREATE, TABS_SELECT_AT, + TABS_CREATE, TABS_REMOVE, TABS_SELECT_AT, TABS_GET_ZOOM, TABS_SET_ZOOM, EVENT_KEYPRESS, EVENT_KEYDOWN, EVENT_KEYUP, SCROLL_GET, SCROLL_SET, } from '../shared/messages'; @@ -20,11 +20,17 @@ receiveContentMessage((message) => { url: message.url, windowId: message.windowId, }); + case TABS_REMOVE: + return browser.tabs.remove(message.tabId); case TABS_SELECT_AT: return tabs.selectAt({ windowId: message.windowId, index: message.index, }); + case TABS_GET_ZOOM: + return browser.tabs.getZoom(message.tabId); + case TABS_SET_ZOOM: + return browser.tabs.setZoom(message.tabId, message.factor); case EVENT_KEYPRESS: case EVENT_KEYDOWN: case EVENT_KEYUP: diff --git a/e2e/ambassador/src/client/tabs.js b/e2e/ambassador/src/client/tabs.js index 6aaefbd..c7b1340 100644 --- a/e2e/ambassador/src/client/tabs.js +++ b/e2e/ambassador/src/client/tabs.js @@ -1,5 +1,5 @@ import { - TABS_CREATE, TABS_SELECT_AT, + TABS_CREATE, TABS_SELECT_AT, TABS_GET_ZOOM, TABS_SET_ZOOM, } from '../shared/messages'; import * as ipc from './ipc'; @@ -19,4 +19,19 @@ const selectAt = (windowId, index) => { }); }; -export { create, selectAt }; +const getZoom = (tabId) => { + return ipc.send({ + tabId, + type: TABS_GET_ZOOM, + }); +}; + +const setZoom = (tabId, factor) => { + return ipc.send({ + type: TABS_SET_ZOOM, + tabId, + factor, + }); +}; + +export { create, selectAt, getZoom, setZoom }; diff --git a/e2e/ambassador/src/shared/messages.js b/e2e/ambassador/src/shared/messages.js index 9fd1054..1fc47d2 100644 --- a/e2e/ambassador/src/shared/messages.js +++ b/e2e/ambassador/src/shared/messages.js @@ -5,6 +5,8 @@ const WINDOWS_REMOVE = 'windows.remove'; const WINDOWS_GET = 'windows.get'; const TABS_CREATE = 'tabs.create'; const TABS_SELECT_AT = 'tabs.selectAt'; +const TABS_GET_ZOOM = 'tabs.get.zoom'; +const TABS_SET_ZOOM = 'tabs.set.zoom'; const EVENT_KEYPRESS = 'event.keypress'; const EVENT_KEYDOWN = 'event.keydown'; const EVENT_KEYUP = 'event.keyup'; @@ -21,6 +23,8 @@ export { TABS_CREATE, TABS_SELECT_AT, + TABS_GET_ZOOM, + TABS_SET_ZOOM, EVENT_KEYPRESS, EVENT_KEYDOWN, -- cgit v1.2.3 From 594913917579ca456ca7c14801afdde09ca1e592 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 11 Mar 2018 10:08:35 +0900 Subject: fix e2e test --- e2e/ambassador/src/background/index.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'e2e/ambassador/src') diff --git a/e2e/ambassador/src/background/index.js b/e2e/ambassador/src/background/index.js index 5264c16..db2deb3 100644 --- a/e2e/ambassador/src/background/index.js +++ b/e2e/ambassador/src/background/index.js @@ -1,6 +1,6 @@ import { WINDOWS_CREATE, WINDOWS_REMOVE, WINDOWS_GET, - TABS_CREATE, TABS_REMOVE, TABS_SELECT_AT, TABS_GET_ZOOM, TABS_SET_ZOOM, + TABS_CREATE, TABS_SELECT_AT, TABS_GET_ZOOM, TABS_SET_ZOOM, EVENT_KEYPRESS, EVENT_KEYDOWN, EVENT_KEYUP, SCROLL_GET, SCROLL_SET, } from '../shared/messages'; @@ -20,8 +20,6 @@ receiveContentMessage((message) => { url: message.url, windowId: message.windowId, }); - case TABS_REMOVE: - return browser.tabs.remove(message.tabId); case TABS_SELECT_AT: return tabs.selectAt({ windowId: message.windowId, -- cgit v1.2.3