diff --git a/QA.md b/QA.md
index b88bb6d..2d36d54 100644
--- a/QA.md
+++ b/QA.md
@@ -36,8 +36,6 @@ The behaviors of the console are tested in [Console section](#consoles).
#### Misc
-- [ ] zi, zo: zoom-in and zoom-out
-- [ ] zz: set zoom level as default
- [ ] y: yank current URL and show a message
- [ ] p: open clipbord's URL in current tab
- [ ] P: open clipbord's URL in new tab
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,
diff --git a/e2e/contents/zoom.test.js b/e2e/contents/zoom.test.js
new file mode 100644
index 0000000..c2e787f
--- /dev/null
+++ b/e2e/contents/zoom.test.js
@@ -0,0 +1,72 @@
+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", () => {
+ let targetWindow;
+ let targetTab;
+
+ before(() => {
+ return windows.create(SERVER_URL).then((win) => {
+ targetWindow = win;
+ });
+ });
+
+ after(() => {
+ return windows.remove(targetWindow.id);
+ });
+
+ beforeEach(() => {
+ return tabs.create(targetWindow.id, SERVER_URL).then((tab) => {
+ targetTab = tab;
+ });
+ });
+
+ it('zooms-in by zi', () => {
+ let before;
+ return tabs.getZoom(targetTab.id).then((zoom) => {
+ before = zoom;
+ return keys.press(targetTab.id, 'z');
+ }).then(() => {
+ return keys.press(targetTab.id, 'i');
+ }).then(() => {
+ return tabs.getZoom(targetTab.id);
+ }).then((actual) => {
+ expect(actual).to.be.greaterThan(before);
+ });
+ });
+
+ it('zooms-in by zo', () => {
+ let before;
+ return tabs.getZoom(targetTab.id).then((zoom) => {
+ before = zoom;
+ return keys.press(targetTab.id, 'z');
+ }).then(() => {
+ return keys.press(targetTab.id, 'o');
+ }).then(() => {
+ return tabs.getZoom(targetTab.id);
+ }).then((actual) => {
+ expect(actual).to.be.lessThan(before);
+ });
+ });
+
+ it('zooms-in by zz', () => {
+ let before;
+ tabs.setZoom(targetTab.id, 1.5).then(() => {
+ return tabs.getZoom(targetTab.id);
+ }).then((zoom) => {
+ before = zoom;
+ return keys.press(targetTab.id, 'z');
+ }).then(() => {
+ return keys.press(targetTab.id, 'z');
+ }).then(() => {
+ return tabs.getZoom(targetTab.id);
+ }).then((actual) => {
+ expect(actual).to.be.lessThan(before);
+ expect(actual).to.be.be(1);
+ });
+ });
+});