From c884c2b0a7d62b54d7040558e9bb3dd91267f7ca Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 17 Jun 2018 14:54:23 +0900 Subject: [PATCH 01/10] Rewrite e2e tests with await/async --- e2e/contents/scroll.test.js | 183 ++++++++++++++---------------------- 1 file changed, 70 insertions(+), 113 deletions(-) diff --git a/e2e/contents/scroll.test.js b/e2e/contents/scroll.test.js index 9410343..f364890 100644 --- a/e2e/contents/scroll.test.js +++ b/e2e/contents/scroll.test.js @@ -8,142 +8,99 @@ describe("scroll test", () => { let targetWindow; let targetTab; - before(() => { - return windows.create().then((win) => { - targetWindow = win; - return tabs.create(targetWindow.id, CLIENT_URL + '/scroll'); - }).then((tab) => { - targetTab = tab; - }); + before(async () => { + targetWindow = await windows.create(); + targetTab = await tabs.create(targetWindow.id, CLIENT_URL + '/scroll'); }); - after(() => { - return windows.remove(targetWindow.id); + after(async () => { + await windows.remove(targetWindow.id); }); - 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); - }); + it('scrolls up by k', async () => { + let before = await scrolls.set(targetTab.id, 100, 100); + await keys.press(targetTab.id, 'k'); + + let actual = await scrolls.get(targetTab.id); + expect(actual.y).to.be.lessThan(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); - }); + it('scrolls down by j', async () => { + let before = await scrolls.set(targetTab.id, 100, 100); + await keys.press(targetTab.id, 'j'); + + let actual = await scrolls.get(targetTab.id); + expect(actual.y).to.be.greaterThan(before.y); }); - 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); - }); + it('scrolls left by h', async () => { + let before = await scrolls.set(targetTab.id, 100, 100) + await keys.press(targetTab.id, 'h'); + + let actual = await scrolls.get(targetTab.id); + expect(actual.x).to.be.lessThan(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 top by gg', async () => { + await scrolls.set(targetTab.id, 100, 100); + await keys.press(targetTab.id, 'g'); + await keys.press(targetTab.id, 'g'); + let actual = await scrolls.get(targetTab.id); + 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 G', async () => { + await scrolls.set(targetTab.id, 100, 100); + await keys.press(targetTab.id, 'G', { shiftKey: true }); + + let actual = await scrolls.get(targetTab.id); + 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 0', async () => { + await scrolls.set(targetTab.id, 100, 100); + await keys.press(targetTab.id, '0'); + + let actual = await scrolls.get(targetTab.id); + 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); - }); + it('scrolls bottom by $', async () => { + await scrolls.set(targetTab.id, 100, 100); + await keys.press(targetTab.id, '$'); + + let actual = await scrolls.get(targetTab.id); + 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 ', async () => { + let before = await scrolls.set(targetTab.id, 5000, 5000); + await keys.press(targetTab.id, 'u', { ctrlKey: true }); + + let actual = await scrolls.get(targetTab.id); + 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 ', async () => { + let before = await scrolls.set(targetTab.id, 5000, 5000); + await keys.press(targetTab.id, 'd', { ctrlKey: true }); + + let actual = await scrolls.get(targetTab.id); + 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 ', async () => { + let before = await scrolls.set(targetTab.id, 5000, 5000); + await keys.press(targetTab.id, 'b', { ctrlKey: true }); + + let actual = await await scrolls.get(targetTab.id); + 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); - }); + it('scrolls bottom by ', async () => { + let before = await scrolls.set(targetTab.id, 5000, 5000); + await keys.press(targetTab.id, 'f', { ctrlKey: true }); + let actual = await scrolls.get(targetTab.id); + expect(actual.y).to.equals(before.y + before.frameHeight); }); }); From c91f8e4dcc223799016e5e26b5ae665818207a39 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 17 Jun 2018 15:05:29 +0900 Subject: [PATCH 02/10] Rewrite e2e tests with await/async --- e2e/contents/follow.test.js | 162 ++++++++++++++---------------------- 1 file changed, 62 insertions(+), 100 deletions(-) diff --git a/e2e/contents/follow.test.js b/e2e/contents/follow.test.js index f852dc0..f78780b 100644 --- a/e2e/contents/follow.test.js +++ b/e2e/contents/follow.test.js @@ -6,116 +6,78 @@ import { CLIENT_URL } from '../web-server/url'; describe("tab test", () => { let targetWindow; - beforeEach(() => { - return windows.create(CLIENT_URL).then((win) => { - targetWindow = win; - }); + beforeEach(async () => { + targetWindow = await windows.create(CLIENT_URL); }); - afterEach(() => { - return windows.remove(targetWindow.id); - }); + afterEach(async () => { + await windows.remove(targetWindow.id); + });return + + it('follows link by `f`', async() => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/follow'); + await keys.press(tab.id, 'f'); + await new Promise(resolve => { setTimeout(() => resolve(), 10) }); + await keys.press(tab.id, 'a'); + await new Promise(resolve => { setTimeout(() => resolve(), 10) }); - it('follows link by `f`', () => { - let targetTab; - return tabs.create(targetWindow.id, CLIENT_URL + '/follow').then((tab) => { - targetTab = tab; - return keys.press(targetTab.id, 'f'); - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 10) }); - }).then(() => { - return keys.press(targetTab.id, 'a'); - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 10) }); - }).then(() => { - return tabs.get(targetTab.id); - }).then((tab) => { - expect(tab.url).to.be.equal(CLIENT_URL + '/follow#a'); - }); + tab = tabs.get(tab.id); + expect(tab.url).to.be.equal(CLIENT_URL + '/follow#a'); }); - it('follows link into new tab by `F`', () => { - let targetTab; - return tabs.create(targetWindow.id, CLIENT_URL + '/follow').then((tab) => { - targetTab = tab; - return keys.press(targetTab.id, 'F', { shiftKey: true }); - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 10) }); - }).then(() => { - return keys.press(targetTab.id, 'a'); - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 500) }); - }).then(() => { - return windows.get(targetWindow.id); - }).then((win) => { - let urls = win.tabs.map(t => t.url); - expect(urls).to.have.lengthOf(3); - expect(urls).to.include(CLIENT_URL + '/'); - expect(urls).to.include(CLIENT_URL + '/follow'); - expect(urls).to.include(CLIENT_URL + '/follow#a'); - }); + it('follows link into new tab by `F`', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/follow'); + await keys.press(tab.id, 'F', { shiftKey: true }); + await new Promise(resolve => { setTimeout(() => resolve(), 10) }); + await keys.press(tab.id, 'a'); + await new Promise(resolve => { setTimeout(() => resolve(), 500) }); + + let win = await windows.get(targetWindow.id); + let urls = win.tabs.map(t => t.url); + expect(urls).to.have.lengthOf(3); + expect(urls).to.include(CLIENT_URL + '/'); + expect(urls).to.include(CLIENT_URL + '/follow'); + expect(urls).to.include(CLIENT_URL + '/follow#a'); }); - it('follows link with target=_blank into new tab by `f`', () => { - let targetTab; - return tabs.create(targetWindow.id, CLIENT_URL + '/follow').then((tab) => { - targetTab = tab; - return keys.press(targetTab.id, 'f'); - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 10) }); - }).then(() => { - return keys.press(targetTab.id, 'b'); - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 500) }); - }).then(() => { - return windows.get(targetWindow.id); - }).then((win) => { - let urls = win.tabs.map(t => t.url); - expect(urls).to.have.lengthOf(3); - expect(urls).to.include(CLIENT_URL + '/'); - expect(urls).to.include(CLIENT_URL + '/follow'); - expect(urls).to.include(CLIENT_URL + '/follow#external'); - }); + it('follows link with target=_blank into new tab by `f`', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/follow'); + await keys.press(tab.id, 'f'); + await new Promise(resolve => { setTimeout(() => resolve(), 10) }); + await keys.press(tab.id, 'b'); + await new Promise(resolve => { setTimeout(() => resolve(), 500) }); + + let win = await windows.get(targetWindow.id); + let urls = win.tabs.map(t => t.url); + expect(urls).to.have.lengthOf(3); + expect(urls).to.include(CLIENT_URL + '/'); + expect(urls).to.include(CLIENT_URL + '/follow'); + expect(urls).to.include(CLIENT_URL + '/follow#external'); }); - it('follows link with target=_blank into new tab by `F`', () => { - let targetTab; - return tabs.create(targetWindow.id, CLIENT_URL + '/follow').then((tab) => { - targetTab = tab; - return keys.press(targetTab.id, 'F', { shiftKey: true }); - }).then(() => { - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 10) }); - }).then(() => { - return keys.press(targetTab.id, 'b'); - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 500) }); - }).then(() => { - return windows.get(targetWindow.id); - }).then((win) => { - let urls = win.tabs.map(t => t.url); - expect(urls).to.have.lengthOf(3); - expect(urls).to.include(CLIENT_URL + '/'); - expect(urls).to.include(CLIENT_URL + '/follow'); - expect(urls).to.include(CLIENT_URL + '/follow#external'); - }); + it('follows link with target=_blank into new tab by `F`', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/follow'); + await keys.press(tab.id, 'F', { shiftKey: true }); + await new Promise(resolve => { setTimeout(() => resolve(), 10) }); + await keys.press(tab.id, 'b'); + await new Promise(resolve => { setTimeout(() => resolve(), 500) }); + + let win = await windows.get(targetWindow.id); + let urls = win.tabs.map(t => t.url); + expect(urls).to.have.lengthOf(3); + expect(urls).to.include(CLIENT_URL + '/'); + expect(urls).to.include(CLIENT_URL + '/follow'); + expect(urls).to.include(CLIENT_URL + '/follow#external'); }); - it('follows area by `F`', () => { - let targetTab; - return tabs.create(targetWindow.id, CLIENT_URL + '/follow').then((tab) => { - targetTab = tab; - return keys.press(targetTab.id, 'f'); - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 10) }); - }).then(() => { - return keys.press(targetTab.id, 'c'); - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 10) }); - }).then(() => { - return tabs.get(targetTab.id); - }).then((tab) => { - expect(tab.url).to.be.equal(CLIENT_URL + '/follow#area'); - }); + it('follows area by `F`', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/follow'); + await keys.press(tab.id, 'f'); + await new Promise(resolve => { setTimeout(() => resolve(), 10) }); + await keys.press(tab.id, 'c'); + await new Promise(resolve => { setTimeout(() => resolve(), 10) }); + + tab = await tabs.get(tab.id); + expect(tab.url).to.be.equal(CLIENT_URL + '/follow#area'); }); }); From f1be4fa0a87dbd63647a51d44e55f52efa3d1696 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 17 Jun 2018 15:29:19 +0900 Subject: [PATCH 03/10] Rewrite e2e tests with await/async --- e2e/contents/tab.test.js | 359 ++++++++++++++------------------------- 1 file changed, 130 insertions(+), 229 deletions(-) diff --git a/e2e/contents/tab.test.js b/e2e/contents/tab.test.js index 3846248..3b2e7b5 100644 --- a/e2e/contents/tab.test.js +++ b/e2e/contents/tab.test.js @@ -6,260 +6,161 @@ import { CLIENT_URL } from '../web-server/url'; describe("tab test", () => { let targetWindow; - beforeEach(() => { - return windows.create(CLIENT_URL).then((win) => { - targetWindow = win; - }); + beforeEach(async () => { + targetWindow = await windows.create(CLIENT_URL); }); - afterEach(() => { - return windows.remove(targetWindow.id); + afterEach(async () => { + await windows.remove(targetWindow.id); }); - it('deletes tab by d', () => { - let before; - let targetTab; - return tabs.create(targetWindow.id, CLIENT_URL).then((tab) => { - targetTab = tab; - return windows.get(targetWindow.id); - }).then((win) => { - before = win; - return keys.press(targetTab.id, 'd'); - }).then(() => { - return windows.get(targetWindow.id); - }).then((actual) => { - expect(actual.tabs).to.have.lengthOf(before.tabs.length - 1); - }); + it('deletes tab by d', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL); + let before = await windows.get(targetWindow.id); + await keys.press(tab.id, 'd'); + + let actual = await windows.get(targetWindow.id); + expect(actual.tabs).to.have.lengthOf(before.tabs.length - 1); + }); + + it('duplicates tab by zd', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL); + let before = await windows.get(targetWindow.id) + await keys.press(tab.id, 'z'); + await keys.press(tab.id, 'd'); + + let actual = await windows.get(targetWindow.id); + expect(actual.tabs).to.have.lengthOf(before.tabs.length + 1); + }); + + it('makes pinned by zp', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL); + let before = await windows.get(targetWindow.id); + await keys.press(tab.id, 'z'); + await keys.press(tab.id, 'p'); + + let actual = await windows.get(targetWindow.id); + expect(actual.tabs[0].pinned).to.be.true; }); - it('duplicates tab by zd', () => { - let before; - let targetTab; - return tabs.create(targetWindow.id, CLIENT_URL).then((tab) => { - targetTab = tab; - return windows.get(targetWindow.id) - }).then((win) => {; - before = win; - return keys.press(targetTab.id, 'z'); - }).then(() => { - return keys.press(targetTab.id, 'd'); - }).then(() => { - return windows.get(targetWindow.id); - }).then((actual) => { - expect(actual.tabs).to.have.lengthOf(before.tabs.length + 1); - }); - }) - - it('makes pinned by zp', () => { - let before; - let targetTab; - return tabs.create(targetWindow.id, CLIENT_URL).then((tab) => { - targetTab = tab; - return windows.get(targetWindow.id) - }).then((win) => {; - before = win; - return keys.press(targetTab.id, 'z'); - }).then(() => { - return keys.press(targetTab.id, 'p'); - }).then(() => { - return windows.get(targetWindow.id); - }).then((actual) => { - expect(actual.tabs[0].pinned).to.be.true; - }); - }) - - it('selects previous tab by K', () => { - return Promise.resolve().then(() => { - return tabs.create(targetWindow.id, CLIENT_URL + '#1') - }).then(() => { - return tabs.create(targetWindow.id, CLIENT_URL + '#2') - }).then(() => { - return tabs.create(targetWindow.id, CLIENT_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', async () => { + await tabs.create(targetWindow.id, CLIENT_URL + '#1'); + await tabs.create(targetWindow.id, CLIENT_URL + '#2'); + await tabs.create(targetWindow.id, CLIENT_URL + '#3'); + let tab = await tabs.selectAt(targetWindow.id, 2); + await keys.press(tab.id, 'K', { shiftKey: true }); + + let win = await windows.get(targetWindow.id); + expect(win.tabs[1].active).to.be.true; }); - it('selects previous tab by K rotatory', () => { - return Promise.resolve().then(() => { - return tabs.create(targetWindow.id, CLIENT_URL + '#1') - }).then(() => { - return tabs.create(targetWindow.id, CLIENT_URL + '#2') - }).then(() => { - return tabs.create(targetWindow.id, CLIENT_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 previous tab by K rotatory', async () => { + await tabs.create(targetWindow.id, CLIENT_URL + '#1'); + await tabs.create(targetWindow.id, CLIENT_URL + '#2'); + await tabs.create(targetWindow.id, CLIENT_URL + '#3'); + let tab = await tabs.selectAt(targetWindow.id, 0); + await keys.press(tab.id, 'K', { shiftKey: true }); + + let win = await windows.get(targetWindow.id); + expect(win.tabs[3].active).to.be.true; }); - it('selects next tab by J', () => { - return Promise.resolve().then(() => { - return tabs.create(targetWindow.id, CLIENT_URL + '#1') - }).then(() => { - return tabs.create(targetWindow.id, CLIENT_URL + '#2') - }).then(() => { - return tabs.create(targetWindow.id, CLIENT_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 next tab by J', async () => { + await tabs.create(targetWindow.id, CLIENT_URL + '#1'); + await tabs.create(targetWindow.id, CLIENT_URL + '#2'); + await tabs.create(targetWindow.id, CLIENT_URL + '#3'); + let tab = await tabs.selectAt(targetWindow.id, 2); + await keys.press(tab.id, 'J', { shiftKey: true }); + + let win = await windows.get(targetWindow.id); + expect(win.tabs[3].active).to.be.true; }); - it('selects previous tab by J rotatory', () => { - return Promise.resolve().then(() => { - return tabs.create(targetWindow.id, CLIENT_URL + '#1') - }).then(() => { - return tabs.create(targetWindow.id, CLIENT_URL + '#2') - }).then(() => { - return tabs.create(targetWindow.id, CLIENT_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 previous tab by J rotatory', async () => { + await tabs.create(targetWindow.id, CLIENT_URL + '#1'); + await tabs.create(targetWindow.id, CLIENT_URL + '#2'); + await tabs.create(targetWindow.id, CLIENT_URL + '#3'); + let tab = await tabs.selectAt(targetWindow.id, 3); + await keys.press(tab.id, 'J', { shiftKey: true }); + + let win = await windows.get(targetWindow.id); + expect(win.tabs[0].active).to.be.true; }); - it('selects first tab by g0', () => { - return Promise.resolve().then(() => { - return tabs.create(targetWindow.id, CLIENT_URL + '#1') - }).then(() => { - return tabs.create(targetWindow.id, CLIENT_URL + '#2') - }).then(() => { - return tabs.create(targetWindow.id, CLIENT_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 first tab by g0', async () => { + await tabs.create(targetWindow.id, CLIENT_URL + '#1'); + await tabs.create(targetWindow.id, CLIENT_URL + '#2'); + await tabs.create(targetWindow.id, CLIENT_URL + '#3'); + let tab = await tabs.selectAt(targetWindow.id, 2); + await keys.press(tab.id, 'g').then(() => tab); + await keys.press(tab.id, '0'); + + let win = await windows.get(targetWindow.id); + expect(win.tabs[0].active).to.be.true; }); - it('selects last tab by g$', () => { - return Promise.resolve().then(() => { - return tabs.create(targetWindow.id, CLIENT_URL + '#1') - }).then(() => { - return tabs.create(targetWindow.id, CLIENT_URL + '#2') - }).then(() => { - return tabs.create(targetWindow.id, CLIENT_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('selects last tab by g$', async () => { + await tabs.create(targetWindow.id, CLIENT_URL + '#1'); + await tabs.create(targetWindow.id, CLIENT_URL + '#2'); + await tabs.create(targetWindow.id, CLIENT_URL + '#3'); + let tab = await tabs.selectAt(targetWindow.id, 2); + await keys.press(tab.id, 'g'); + await keys.press(tab.id, '$'); + + let win = await windows.get(targetWindow.id); + expect(win.tabs[3].active).to.be.true; }); - it('selects last selected tab by ', () => { - return Promise.resolve().then(() => { - return tabs.create(targetWindow.id, CLIENT_URL + '#1') - }).then(() => { - return tabs.create(targetWindow.id, CLIENT_URL + '#2') - }).then(() => { - return tabs.create(targetWindow.id, CLIENT_URL + '#3'); - }).then(() => { - return tabs.selectAt(targetWindow.id, 1); - }).then(() => { - return tabs.selectAt(targetWindow.id, 3); - }).then((tab) => { - return keys.press(tab.id, '6', { ctrlKey: true }); - }).then(() => { - return windows.get(targetWindow.id); - }).then((win) => { - expect(win.tabs[1].active).to.be.true; - }); + it('selects last selected tab by ', async () => { + await tabs.create(targetWindow.id, CLIENT_URL + '#1'); + await tabs.create(targetWindow.id, CLIENT_URL + '#2'); + await tabs.create(targetWindow.id, CLIENT_URL + '#3'); + await tabs.selectAt(targetWindow.id, 1); + let tab = await tabs.selectAt(targetWindow.id, 3); + await keys.press(tab.id, '6', { ctrlKey: true }); + + let win = await windows.get(targetWindow.id); + expect(win.tabs[1].active).to.be.true; }); - it('deletes tab by d', () => { - return Promise.resolve().then(() => { - return tabs.create(targetWindow.id, CLIENT_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); - }); + it('deletes tab by d', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL + '#1'); + await keys.press(tab.id, 'd'); + + let win = await windows.get(targetWindow.id); + expect(win.tabs).to.have.lengthOf(1); }); - it('reopen tab by u', () => { - return Promise.resolve().then(() => { - return tabs.create(targetWindow.id, CLIENT_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); - return keys.press(win.tabs[0].id, 'u'); - }).then(() => { - return new Promise((resolve) => setTimeout(resolve, 100)); - }).then(() => { - return windows.get(targetWindow.id); - }).then((win) => { - expect(win.tabs).to.have.lengthOf(2); - }); + it('reopen tab by u', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL + '#1'); + await keys.press(tab.id, 'd'); + + let win = await windows.get(targetWindow.id); + expect(win.tabs).to.have.lengthOf(1); + + await keys.press(win.tabs[0].id, 'u'); + await new Promise((resolve) => setTimeout(resolve, 100)); + + win = await windows.get(targetWindow.id); + expect(win.tabs).to.have.lengthOf(2); }); - it('does not delete pinned tab by d', () => { - return Promise.resolve().then(() => { - return tabs.create(targetWindow.id, CLIENT_URL + '#1'); - }).then((tab) => { - return tabs.update(tab.id, { pinned: true }); - }).then((tab) => { - return keys.press(tab.id, 'd'); - }).then(() => { - return windows.get(targetWindow.id); - }).then((win) => { - expect(win.tabs).to.have.lengthOf(2); - }); + it('does not delete pinned tab by d', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL + '#1'); + tab = await tabs.update(tab.id, { pinned: true }); + await keys.press(tab.id, 'd'); + + let win = await windows.get(targetWindow.id); + expect(win.tabs).to.have.lengthOf(2); }); - it('deletes pinned tab by !d', () => { - let target; - return Promise.resolve().then(() => { - return tabs.create(targetWindow.id, CLIENT_URL + '#1'); - }).then((tab) => { - return tabs.update(tab.id, { pinned: true }); - }).then((tab) => { - target = tab; - return keys.press(target.id, '!'); - }).then(() => { - return keys.press(target.id, 'd'); - }).then(() => { - return windows.get(targetWindow.id); - }).then((win) => { - expect(win.tabs).to.have.lengthOf(1); - }); + it('deletes pinned tab by !d', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL + '#1'); + tab = await tabs.update(tab.id, { pinned: true }); + await keys.press(tab.id, '!'); + await keys.press(tab.id, 'd'); + + let win = await windows.get(targetWindow.id); + expect(win.tabs).to.have.lengthOf(1); }); }); From d6dc869d1f785b628b193d69e698602bbe83a787 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 17 Jun 2018 15:37:13 +0900 Subject: [PATCH 04/10] Rewrite e2e tests with await/async --- e2e/contents/zoom.test.js | 78 +++++++++++++++------------------------ 1 file changed, 29 insertions(+), 49 deletions(-) diff --git a/e2e/contents/zoom.test.js b/e2e/contents/zoom.test.js index c7efc93..2d90e28 100644 --- a/e2e/contents/zoom.test.js +++ b/e2e/contents/zoom.test.js @@ -7,64 +7,44 @@ describe("zoom test", () => { let targetWindow; let targetTab; - before(() => { - return windows.create(CLIENT_URL).then((win) => { - targetWindow = win; - }); + before(async () => { + targetWindow = await windows.create(CLIENT_URL); }); - after(() => { - return windows.remove(targetWindow.id); + after(async () => { + await windows.remove(targetWindow.id); }); - beforeEach(() => { - return tabs.create(targetWindow.id, CLIENT_URL).then((tab) => { - targetTab = tab; - }); + beforeEach(async () => { + targetTab = await tabs.create(targetWindow.id, CLIENT_URL); }); - 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 zi', async () => { + let before = await tabs.getZoom(targetTab.id); + await keys.press(targetTab.id, 'z'); + await keys.press(targetTab.id, 'i'); + + let actual = await tabs.getZoom(targetTab.id); + 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 zo', async () => { + let before = await tabs.getZoom(targetTab.id); + await keys.press(targetTab.id, 'z'); + await keys.press(targetTab.id, 'o'); + + let actual = await tabs.getZoom(targetTab.id); + 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); - }); + it('zooms-in by zz', async () => { + await tabs.setZoom(targetTab.id, 1.5); + let before = await tabs.getZoom(targetTab.id); + await keys.press(targetTab.id, 'z'); + await keys.press(targetTab.id, 'z'); + + let actual = await tabs.getZoom(targetTab.id); + expect(actual).to.be.lessThan(before); + expect(actual).to.equal(1); }); }); From 70ed31f35e1323706b26406ac6471679007051d9 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 17 Jun 2018 15:43:53 +0900 Subject: [PATCH 05/10] Rewrite e2e tests with async/await --- e2e/contents/navigate.test.js | 200 +++++++++++++--------------------- e2e/contents/tab.test.js | 2 +- 2 files changed, 74 insertions(+), 128 deletions(-) diff --git a/e2e/contents/navigate.test.js b/e2e/contents/navigate.test.js index b3f5f32..d36b167 100644 --- a/e2e/contents/navigate.test.js +++ b/e2e/contents/navigate.test.js @@ -7,150 +7,96 @@ import { CLIENT_URL } from '../web-server/url'; describe("navigate test", () => { let targetWindow; - before(() => { - return windows.create().then((win) => { - targetWindow = win; - return tabs.create(targetWindow.id, CLIENT_URL); - }); + before(async () => { + targetWindow = await windows.create(); + await tabs.create(targetWindow.id, CLIENT_URL); }); - after(() => { - return windows.remove(targetWindow.id); + after(async () => { + await windows.remove(targetWindow.id); }); - it('goes to parent', () => { - let targetTab; - return tabs.create(targetWindow.id, CLIENT_URL + '/a/b/c').then((tab) => { - targetTab = tab; - return keys.press(targetTab.id, 'g'); - }).then(() => { - return keys.press(targetTab.id, 'u'); - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 10) }); - }).then(() => { - return tabs.get(targetTab.id); - }).then((tab) => { - expect(tab.url).to.be.equal(CLIENT_URL + '/a/b/'); - }); + it('goes to parent', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/a/b/c'); + await keys.press(tab.id, 'g'); + await keys.press(tab.id, 'u'); + await new Promise(resolve => { setTimeout(() => resolve(), 10) }); + + tab = await tabs.get(tab.id); + expect(tab.url).to.be.equal(CLIENT_URL + '/a/b/'); }); - it('removes hash', () => { - let targetTab; - return tabs.create(targetWindow.id, CLIENT_URL + '/a/b/c#navigate').then((tab) => { - targetTab = tab; - return keys.press(targetTab.id, 'g'); - }).then(() => { - return keys.press(targetTab.id, 'u'); - }).then(() => { - return tabs.get(targetTab.id); - }).then((tab) => { - expect(tab.url).to.be.equal(CLIENT_URL + '/a/b/c#'); - }); + it('removes hash', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/a/b/c#navigate'); + await keys.press(tab.id, 'g'); + await keys.press(tab.id, 'u'); + tab = await tabs.get(tab.id); + expect(tab.url).to.be.equal(CLIENT_URL + '/a/b/c#'); }); - it('goes to root', () => { - let targetTab; - return tabs.create(targetWindow.id, CLIENT_URL + '/a/b/c').then((tab) => { - targetTab = tab; - return keys.press(targetTab.id, 'g'); - }).then(() => { - return keys.press(targetTab.id, 'U', { shiftKey: true }); - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 10) }); - }).then(() => { - return tabs.get(targetTab.id); - }).then((tab) => { - expect(tab.url).to.be.equal(CLIENT_URL + '/'); - }); + it('goes to root', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/a/b/c'); + await keys.press(tab.id, 'g'); + await keys.press(tab.id, 'U', { shiftKey: true }); + await new Promise(resolve => { setTimeout(() => resolve(), 10) }); + + tab = await tabs.get(tab.id); + expect(tab.url).to.be.equal(CLIENT_URL + '/'); }); - it('goes back and forward in history', () => { - let targetTab; - return tabs.create(targetWindow.id, CLIENT_URL + '/#navigate').then((tab) => { - targetTab = tab; - return keys.press(targetTab.id, 'g'); - }).then(() => { - return keys.press(targetTab.id, 'u'); - }).then(() => { - return keys.press(targetTab.id, 'H', { shiftKey: true }); - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 10) }); - }).then(() => { - return tabs.get(targetTab.id); - }).then((tab) => { - expect(tab.url, 'go back in history').to.be.equal(CLIENT_URL + '/#navigate'); - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 10) }); - }).then(() => { - return keys.press(targetTab.id, 'L', { shiftKey: true }); - }).then(() => { - return tabs.get(targetTab.id); - }).then((tab) => { - expect(tab.url, 'go next in history').to.be.equal(CLIENT_URL + '/#'); - }); + it('goes back and forward in history', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/#navigate'); + await keys.press(tab.id, 'g'); + await keys.press(tab.id, 'u'); + await keys.press(tab.id, 'H', { shiftKey: true }); + await new Promise(resolve => { setTimeout(() => resolve(), 10) }); + + tab = await tabs.get(tab.id); + expect(tab.url, 'go back in history').to.be.equal(CLIENT_URL + '/#navigate'); + await new Promise(resolve => { setTimeout(() => resolve(), 10) }); + await keys.press(tab.id, 'L', { shiftKey: true }); + + tab = await tabs.get(tab.id); + expect(tab.url, 'go next in history').to.be.equal(CLIENT_URL + '/#'); }); - it('goes previous page by ', () => { - let targetTab; - return tabs.create(targetWindow.id, CLIENT_URL + '/a-pagenation?page=10').then((tab) => { - targetTab = tab; - return keys.press(targetTab.id, '['); - }).then(() => { - return keys.press(targetTab.id, '['); - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 10) }); - }).then(() => { - return tabs.get(targetTab.id); - }).then((tab) => { - expect(tab.url).to.be.equal(CLIENT_URL + '/a-pagenation?page=9'); - }); + it('goes previous page by ', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/a-pagenation?page=10'); + await keys.press(tab.id, '['); + await keys.press(tab.id, '['); + await new Promise(resolve => { setTimeout(() => resolve(), 10) }); + + tab = await tabs.get(tab.id); + expect(tab.url).to.be.equal(CLIENT_URL + '/a-pagenation?page=9'); }) - it('goes next page by ', () => { - let targetTab; - return tabs.create(targetWindow.id, CLIENT_URL + '/a-pagenation?page=10').then((tab) => { - targetTab = tab; - return keys.press(targetTab.id, ']'); - }).then(() => { - return keys.press(targetTab.id, ']'); - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 10) }); - }).then(() => { - return tabs.get(targetTab.id); - }).then((tab) => { - expect(tab.url).to.be.equal(CLIENT_URL + '/a-pagenation?page=11'); - }); + it('goes next page by ', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/a-pagenation?page=10'); + await keys.press(tab.id, ']'); + await keys.press(tab.id, ']'); + await new Promise(resolve => { setTimeout(() => resolve(), 10) }); + + tab = await tabs.get(tab.id); + expect(tab.url).to.be.equal(CLIENT_URL + '/a-pagenation?page=11'); }) - it('goes previous page by ', () => { - let targetTab; - return tabs.create(targetWindow.id, CLIENT_URL + '/link-pagenation?page=10').then((tab) => { - targetTab = tab; - return keys.press(targetTab.id, '['); - }).then(() => { - return keys.press(targetTab.id, '['); - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 10) }); - }).then(() => { - return tabs.get(targetTab.id); - }).then((tab) => { - expect(tab.url).to.be.equal(CLIENT_URL + '/link-pagenation?page=9'); - }); + it('goes previous page by ', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/link-pagenation?page=10'); + await keys.press(tab.id, '['); + await keys.press(tab.id, '['); + await new Promise(resolve => { setTimeout(() => resolve(), 10) }); + + tab = await tabs.get(tab.id); + expect(tab.url).to.be.equal(CLIENT_URL + '/link-pagenation?page=9'); }) - it('goes next page by ', () => { - let targetTab; - return tabs.create(targetWindow.id, CLIENT_URL + '/link-pagenation?page=10').then((tab) => { - targetTab = tab; - return keys.press(targetTab.id, ']'); - }).then(() => { - return keys.press(targetTab.id, ']'); - }).then(() => { - return new Promise(resolve => { setTimeout(() => resolve(), 10) }); - }).then(() => { - return tabs.get(targetTab.id); - }).then((tab) => { - expect(tab.url).to.be.equal(CLIENT_URL + '/link-pagenation?page=11'); - }); + it('goes next page by ', async () => { + let tab = await tabs.create(targetWindow.id, CLIENT_URL + '/link-pagenation?page=10'); + await keys.press(tab.id, ']'); + await keys.press(tab.id, ']'); + await new Promise(resolve => { setTimeout(() => resolve(), 10) }); + + tab = await tabs.get(tab.id); + expect(tab.url).to.be.equal(CLIENT_URL + '/link-pagenation?page=11'); }) }); diff --git a/e2e/contents/tab.test.js b/e2e/contents/tab.test.js index 3b2e7b5..2d7f548 100644 --- a/e2e/contents/tab.test.js +++ b/e2e/contents/tab.test.js @@ -92,7 +92,7 @@ describe("tab test", () => { await tabs.create(targetWindow.id, CLIENT_URL + '#2'); await tabs.create(targetWindow.id, CLIENT_URL + '#3'); let tab = await tabs.selectAt(targetWindow.id, 2); - await keys.press(tab.id, 'g').then(() => tab); + await keys.press(tab.id, 'g'); await keys.press(tab.id, '0'); let win = await windows.get(targetWindow.id); From 88238005ab64f957d9def8c18473d8210b280de9 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 17 Jun 2018 17:50:42 +0900 Subject: [PATCH 06/10] Rewrite tests with async/await --- test/shared/versions/index.test.js | 47 ++++++++++------------------ test/shared/versions/storage.test.js | 33 +++++++------------ 2 files changed, 27 insertions(+), 53 deletions(-) diff --git a/test/shared/versions/index.test.js b/test/shared/versions/index.test.js index 3bb307a..d90f04c 100644 --- a/test/shared/versions/index.test.js +++ b/test/shared/versions/index.test.js @@ -7,32 +7,21 @@ describe("shared/versions/storage", () => { return browser.storage.local.remove('version'); }); - it('return true if no previous versions', () => { - return Promise.resolve().then(() => { - return versions.checkUpdated(); - }).then((updated) => { - expect(updated).to.be.true; - }); + it('return true if no previous versions', async() => { + let updated = await versions.checkUpdated(); + expect(updated).to.be.true; }); - it('return true if updated', () => { - return Promise.resolve().then(() => { - return browser.storage.local.set({ version: '0.001' }); - }).then(() => { - return versions.checkUpdated(); - }).then((updated) => { - expect(updated).to.be.true; - }); + it('return true if updated', async() => { + await browser.storage.local.set({ version: '0.001' }); + let updated = await versions.checkUpdated(); + expect(updated).to.be.true; }); - it('return false if not updated', () => { - return Promise.resolve().then(() => { - return browser.storage.local.set({ version: manifest.version }); - }).then(() => { - return versions.checkUpdated(); - }).then((updated) => { - expect(updated).to.be.false; - }); + it('return false if not updated', async() => { + await browser.storage.local.set({ version: manifest.version }); + let updated = await versions.checkUpdated(); + expect(updated).to.be.false; }); }); @@ -41,15 +30,11 @@ describe("shared/versions/storage", () => { return browser.storage.local.remove('version'); }); - it('saves current version from manifest.json', () => { - return Promise.resolve().then(() => { - return versions.commit(); - }).then(() => { - return browser.storage.local.get('version'); - }).then(({version}) => { - expect(version).to.be.a('string'); - expect(version).to.equal(manifest.version); - }); + it('saves current version from manifest.json', async() => { + await versions.commit(); + let { version } = await browser.storage.local.get('version'); + expect(version).to.be.a('string'); + expect(version).to.equal(manifest.version); }); }); }); diff --git a/test/shared/versions/storage.test.js b/test/shared/versions/storage.test.js index bcfa259..f541abf 100644 --- a/test/shared/versions/storage.test.js +++ b/test/shared/versions/storage.test.js @@ -6,34 +6,23 @@ describe("shared/versions/storage", () => { return browser.storage.local.remove('version'); }); - it('loads saved version', () => { - return Promise.resolve().then(() => { - return browser.storage.local.set({ version: '1.2.3' }); - }).then(() => { - return storage.load(); - }).then((version) => { - expect(version).to.equal('1.2.3'); - }); + it('loads saved version', async() => { + await browser.storage.local.set({ version: '1.2.3' }); + let version = await storage.load(); + expect(version).to.equal('1.2.3'); }); - it('returns undefined if no versions in storage', () => { - return Promise.resolve().then(() => { - return storage.load(); - }).then((version) => { - expect(version).to.be.a('undefined'); - }); + it('returns undefined if no versions in storage', async() => { + let version = await storage.load(); + expect(version).to.be.a('undefined'); }); }); describe('#save', () => { - it('saves version string', () => { - return Promise.resolve().then(() => { - return storage.save('2.3.4'); - }).then(() => { - return browser.storage.local.get('version'); - }).then(({version}) => { - expect(version).to.equal('2.3.4'); - }); + it('saves version string', async() => { + await storage.save('2.3.4'); + let { version } = await browser.storage.local.get('version'); + expect(version).to.equal('2.3.4'); }); }); }); From 48e4bccf0d24bb6ce53c4ecea567ed7750fe8949 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 17 Jun 2018 20:21:39 +0900 Subject: [PATCH 07/10] Use async/await on background --- src/background/actions/command.js | 68 +++--- src/background/actions/setting.js | 13 +- src/background/actions/tab.js | 27 +-- src/background/components/background.js | 15 +- src/background/components/indicator.js | 14 +- src/background/components/tab.js | 7 +- src/background/index.js | 18 +- .../shared/completions/bookmarks.js | 23 +- .../shared/completions/histories.js | 27 ++- src/background/shared/completions/index.js | 116 +++++----- src/background/shared/tabs.js | 209 ++++++++---------- src/background/shared/zooms.js | 30 +-- 12 files changed, 262 insertions(+), 305 deletions(-) diff --git a/src/background/actions/command.js b/src/background/actions/command.js index f1ee5b5..a6e426a 100644 --- a/src/background/actions/command.js +++ b/src/background/actions/command.js @@ -5,56 +5,63 @@ import * as bookmarks from '../shared/bookmarks'; import * as parsers from 'shared/commands/parsers'; import * as properties from 'shared/settings/properties'; -const openCommand = (url) => { - return browser.tabs.query({ +const openCommand = async(url) => { + let got = await browser.tabs.query({ active: true, currentWindow: true - }).then((gotTabs) => { - if (gotTabs.length > 0) { - return browser.tabs.update(gotTabs[0].id, { url: url }); - } }); + if (got.length > 0) { + return browser.tabs.update(got[0].id, { url: url }); + } }; const tabopenCommand = (url) => { return browser.tabs.create({ url: url }); }; -const tabcloseCommand = () => { - return browser.tabs.query({ +const tabcloseCommand = async() => { + let got = await browser.tabs.query({ active: true, currentWindow: true - }).then((tabList) => { - return browser.tabs.remove(tabList.map(tab => tab.id)); }); + return browser.tabs.remove(got.map(tab => tab.id)); }; const winopenCommand = (url) => { return browser.windows.create({ url }); }; -const bufferCommand = (keywords) => { +const bufferCommand = async(keywords) => { if (keywords.length === 0) { return Promise.resolve([]); } let keywordsStr = keywords.join(' '); - return browser.tabs.query({ + let got = await browser.tabs.query({ active: true, currentWindow: true - }).then((gotTabs) => { - if (gotTabs.length > 0) { - if (isNaN(keywordsStr)) { - return tabs.selectByKeyword(gotTabs[0], keywordsStr); - } - let index = parseInt(keywordsStr, 10) - 1; - return tabs.selectAt(index); - } }); + if (got.length === 0) { + return; + } + if (isNaN(keywordsStr)) { + return tabs.selectByKeyword(got[0], keywordsStr); + } + let index = parseInt(keywordsStr, 10) - 1; + return tabs.selectAt(index); }; -const addBookmarkCommand = (tab, args) => { +const addbookmarkCommand = async(tab, args) => { if (!args[0]) { - return Promise.resolve(); + return; } - - return bookmarks.create(args.join(' '), tab.url); + let item = await bookmarks.create(args.join(' '), tab.url); + if (!item) { + return browser.tabs.sendMessage(tab.id, { + type: messages.CONSOLE_SHOW_ERROR, + text: 'Could not create a bookmark', + }); + } + return browser.tabs.sendMessage(tab.id, { + type: messages.CONSOLE_SHOW_INFO, + text: 'Saved current page: ' + item.url, + }); }; const setCommand = (args) => { @@ -100,18 +107,7 @@ const exec = (tab, line, settings) => { case 'bdeletes!': return tabs.closeTabsByKeywordsForce(args.join(' ')); case 'addbookmark': - return addBookmarkCommand(tab, args).then((item) => { - if (!item) { - return browser.tabs.sendMessage(tab.id, { - type: messages.CONSOLE_SHOW_ERROR, - text: 'Could not create a bookmark', - }); - } - return browser.tabs.sendMessage(tab.id, { - type: messages.CONSOLE_SHOW_INFO, - text: 'Saved current page: ' + item.url, - }); - }); + return addbookmarkCommand(tab, args); case 'set': return setCommand(args); case 'q': diff --git a/src/background/actions/setting.js b/src/background/actions/setting.js index 773142f..7eeb5de 100644 --- a/src/background/actions/setting.js +++ b/src/background/actions/setting.js @@ -1,13 +1,12 @@ import actions from '../actions'; import * as settingsStorage from 'shared/settings/storage'; -const load = () => { - return settingsStorage.loadValue().then((value) => { - return { - type: actions.SETTING_SET_SETTINGS, - value, - }; - }); +const load = async() => { + let value = await settingsStorage.loadValue(); + return { + type: actions.SETTING_SET_SETTINGS, + value, + }; }; const setProperty = (name, value) => { diff --git a/src/background/actions/tab.js b/src/background/actions/tab.js index 0d439fd..5cf1e8c 100644 --- a/src/background/actions/tab.js +++ b/src/background/actions/tab.js @@ -1,19 +1,20 @@ import actions from './index'; -const openNewTab = (url, openerTabId, background = false, adjacent = false) => { - if (adjacent) { - return browser.tabs.query({ - active: true, currentWindow: true - }).then((tabs) => { - return browser.tabs.create({ - url, - openerTabId, - active: !background, - index: tabs[0].index + 1 - }); - }); +const openNewTab = async( + url, openerTabId, background = false, adjacent = false +) => { + if (!adjacent) { + return browser.tabs.create({ url, active: !background }); } - return browser.tabs.create({ url, active: !background }); + let tabs = await browser.tabs.query({ + active: true, currentWindow: true + }); + return browser.tabs.create({ + url, + openerTabId, + active: !background, + index: tabs[0].index + 1 + }); }; const openToTab = (url, tab) => { diff --git a/src/background/components/background.js b/src/background/components/background.js index 29124a6..c7a79a1 100644 --- a/src/background/components/background.js +++ b/src/background/components/background.js @@ -56,13 +56,12 @@ export default class BackgroundComponent { } } - broadcastSettingsChanged() { - return browser.tabs.query({}).then((tabs) => { - for (let tab of tabs) { - browser.tabs.sendMessage(tab.id, { - type: messages.SETTINGS_CHANGED, - }); - } - }); + async broadcastSettingsChanged() { + let tabs = await browser.tabs.query({}); + for (let tab of tabs) { + browser.tabs.sendMessage(tab.id, { + type: messages.SETTINGS_CHANGED, + }); + } } } diff --git a/src/background/components/indicator.js b/src/background/components/indicator.js index cceb119..1ded329 100644 --- a/src/background/components/indicator.js +++ b/src/background/components/indicator.js @@ -8,19 +8,17 @@ export default class IndicatorComponent { messages.onMessage(this.onMessage.bind(this)); browser.browserAction.onClicked.addListener(this.onClicked); - browser.tabs.onActivated.addListener((info) => { - return browser.tabs.query({ currentWindow: true }).then(() => { - return this.onTabActivated(info); - }); + browser.tabs.onActivated.addListener(async(info) => { + await browser.tabs.query({ currentWindow: true }); + return this.onTabActivated(info); }); } - onTabActivated(info) { - return browser.tabs.sendMessage(info.tabId, { + async onTabActivated(info) { + let { enabled } = await browser.tabs.sendMessage(info.tabId, { type: messages.ADDON_ENABLED_QUERY, - }).then((resp) => { - return this.updateIndicator(resp.enabled); }); + return this.updateIndicator(enabled); } onClicked(tab) { diff --git a/src/background/components/tab.js b/src/background/components/tab.js index b273546..6af3fd7 100644 --- a/src/background/components/tab.js +++ b/src/background/components/tab.js @@ -4,10 +4,9 @@ export default class TabComponent { constructor(store) { this.store = store; - browser.tabs.onActivated.addListener((info) => { - return browser.tabs.query({ currentWindow: true }).then(() => { - return this.onTabActivated(info); - }); + browser.tabs.onActivated.addListener(async(info) => { + await browser.tabs.query({ currentWindow: true }); + return this.onTabActivated(info); }); } diff --git a/src/background/index.js b/src/background/index.js index 3f1013c..02de53f 100644 --- a/src/background/index.js +++ b/src/background/index.js @@ -18,6 +18,15 @@ const store = createStore(reducers, (e, sender) => { } }); +const checkAndNotifyUpdated = async() => { + let updated = await versions.checkUpdated(); + if (!updated) { + return; + } + await versions.notify(); + await versions.commit(); +}; + /* eslint-disable no-unused-vars */ const backgroundComponent = new BackgroundComponent(store); const operationComponent = new OperationComponent(store); @@ -27,11 +36,4 @@ const indicatorComponent = new IndicatorComponent(store); store.dispatch(settingActions.load()); -versions.checkUpdated().then((updated) => { - if (!updated) { - return; - } - return versions.notify(); -}).then(() => { - return versions.commit(); -}); +checkAndNotifyUpdated(); diff --git a/src/background/shared/completions/bookmarks.js b/src/background/shared/completions/bookmarks.js index 1adb350..bd753af 100644 --- a/src/background/shared/completions/bookmarks.js +++ b/src/background/shared/completions/bookmarks.js @@ -1,15 +1,14 @@ -const getCompletions = (keywords) => { - return browser.bookmarks.search({ query: keywords }).then((items) => { - return items.filter((item) => { - let url = undefined; - try { - url = new URL(item.url); - } catch (e) { - return false; - } - return item.type === 'bookmark' && url.protocol !== 'place:'; - }).slice(0, 10); - }); +const getCompletions = async(keywords) => { + let items = await browser.bookmarks.search({ query: keywords }); + return items.filter((item) => { + let url = undefined; + try { + url = new URL(item.url); + } catch (e) { + return false; + } + return item.type === 'bookmark' && url.protocol !== 'place:'; + }).slice(0, 10); }; export { getCompletions }; diff --git a/src/background/shared/completions/histories.js b/src/background/shared/completions/histories.js index a7d3d47..2d35401 100644 --- a/src/background/shared/completions/histories.js +++ b/src/background/shared/completions/histories.js @@ -61,23 +61,22 @@ const reduceByOrigin = (items, min) => { return filtered; }; -const getCompletions = (keyword) => { - return browser.history.search({ +const getCompletions = async(keyword) => { + let historyItems = await browser.history.search({ text: keyword, startTime: 0, - }).then((historyItems) => { - return [historyItems.map(item => [item, new URL(item.url)])] - .map(filterEmptyTitle) - .map(filterHttp) - .map(filterClosedPath) - .map(items => reduceByPathname(items, 10)) - .map(items => reduceByOrigin(items, 10)) - .map(items => items - .sort((x, y) => x[0].visitCount < y[0].visitCount) - .slice(0, 10) - .map(item => item[0]) - )[0]; }); + return [historyItems.map(item => [item, new URL(item.url)])] + .map(filterEmptyTitle) + .map(filterHttp) + .map(filterClosedPath) + .map(items => reduceByPathname(items, 10)) + .map(items => reduceByOrigin(items, 10)) + .map(items => items + .sort((x, y) => x[0].visitCount < y[0].visitCount) + .slice(0, 10) + .map(item => item[0]) + )[0]; }; export { getCompletions }; diff --git a/src/background/shared/completions/index.js b/src/background/shared/completions/index.js index 728cee7..d5875fe 100644 --- a/src/background/shared/completions/index.js +++ b/src/background/shared/completions/index.js @@ -12,76 +12,66 @@ const getSearchCompletions = (command, keywords, searchConfig) => { return Promise.resolve(engineItems); }; -const getHistoryCompletions = (command, keywords) => { - return histories.getCompletions(keywords).then((pages) => { - return pages.map((page) => { - return { - caption: page.title, - content: command + ' ' + page.url, - url: page.url - }; - }); +const getHistoryCompletions = async(command, keywords) => { + let items = await histories.getCompletions(keywords); + return items.map((page) => { + return { + caption: page.title, + content: command + ' ' + page.url, + url: page.url + }; }); }; -const getBookmarksCompletions = (command, keywords) => { - return bookmarks.getCompletions(keywords).then((items) => { - return items.map((item) => { - return { - caption: item.title, - content: command + ' ' + item.url, - url: item.url, - }; - }); - }); +const getBookmarksCompletions = async(command, keywords) => { + let items = await bookmarks.getCompletions(keywords); + return items.map(item => ({ + caption: item.title, + content: command + ' ' + item.url, + url: item.url, + })); }; -const getOpenCompletions = (command, keywords, searchConfig) => { - return Promise.all([ - getSearchCompletions(command, keywords, searchConfig), - getHistoryCompletions(command, keywords), - getBookmarksCompletions(command, keywords), - ]).then(([engineItems, historyItems, bookmarkItems]) => { - let completions = []; - if (engineItems.length > 0) { - completions.push({ - name: 'Search Engines', - items: engineItems - }); - } - if (historyItems.length > 0) { - completions.push({ - name: 'History', - items: historyItems - }); - } - if (bookmarkItems.length > 0) { - completions.push({ - name: 'Bookmarks', - items: bookmarkItems - }); - } - return completions; - }); +const getOpenCompletions = async(command, keywords, searchConfig) => { + let engineItems = await getSearchCompletions(command, keywords, searchConfig); + let historyItems = await getHistoryCompletions(command, keywords); + let bookmarkItems = await getBookmarksCompletions(command, keywords); + let completions = []; + if (engineItems.length > 0) { + completions.push({ + name: 'Search Engines', + items: engineItems + }); + } + if (historyItems.length > 0) { + completions.push({ + name: 'History', + items: historyItems + }); + } + if (bookmarkItems.length > 0) { + completions.push({ + name: 'Bookmarks', + items: bookmarkItems + }); + } + return completions; }; -const getBufferCompletions = (command, keywords, excludePinned) => { - return tabs.getCompletions(keywords, excludePinned).then((got) => { - let items = got.map((tab) => { - return { - caption: tab.title, - content: command + ' ' + tab.title, - url: tab.url, - icon: tab.favIconUrl - }; - }); - return [ - { - name: 'Buffers', - items: items - } - ]; - }); +const getBufferCompletions = async(command, keywords, excludePinned) => { + let items = await tabs.getCompletions(keywords, excludePinned); + items = items.map(tab => ({ + caption: tab.title, + content: command + ' ' + tab.title, + url: tab.url, + icon: tab.favIconUrl + })); + return [ + { + name: 'Buffers', + items: items + } + ]; }; const getCompletions = (line, settings) => { diff --git a/src/background/shared/tabs.js b/src/background/shared/tabs.js index 5c67a9f..33a4fac 100644 --- a/src/background/shared/tabs.js +++ b/src/background/shared/tabs.js @@ -1,143 +1,127 @@ import * as tabCompletions from './completions/tabs'; -const closeTab = (id) => { - return browser.tabs.get(id).then((tab) => { - if (!tab.pinned) { - return browser.tabs.remove(id); - } - }); +const closeTab = async(id) => { + let tab = await browser.tabs.get(id); + if (!tab.pinned) { + return browser.tabs.remove(id); + } }; const closeTabForce = (id) => { return browser.tabs.remove(id); }; -const queryByKeyword = (keyword, excludePinned = false) => { - return browser.tabs.query({ currentWindow: true }).then((tabs) => { - return tabs.filter((t) => { - return t.url.toLowerCase().includes(keyword.toLowerCase()) || - t.title && t.title.toLowerCase().includes(keyword.toLowerCase()); - }).filter((t) => { - return !(excludePinned && t.pinned); - }); +const queryByKeyword = async(keyword, excludePinned = false) => { + let tabs = await browser.tabs.query({ currentWindow: true }); + return tabs.filter((t) => { + return t.url.toLowerCase().includes(keyword.toLowerCase()) || + t.title && t.title.toLowerCase().includes(keyword.toLowerCase()); + }).filter((t) => { + return !(excludePinned && t.pinned); }); }; -const closeTabByKeywords = (keyword) => { - return queryByKeyword(keyword, false).then((tabs) => { - if (tabs.length === 0) { - throw new Error('No matching buffer for ' + keyword); - } else if (tabs.length > 1) { - throw new Error('More than one match for ' + keyword); - } - browser.tabs.remove(tabs[0].id); - }); -}; - -const closeTabByKeywordsForce = (keyword) => { - return queryByKeyword(keyword, true).then((tabs) => { - if (tabs.length === 0) { - throw new Error('No matching buffer for ' + keyword); - } else if (tabs.length > 1) { - throw new Error('More than one match for ' + keyword); - } - browser.tabs.remove(tabs[0].id); - }); +const closeTabByKeywords = async(keyword) => { + let tabs = await queryByKeyword(keyword, false); + if (tabs.length === 0) { + throw new Error('No matching buffer for ' + keyword); + } else if (tabs.length > 1) { + throw new Error('More than one match for ' + keyword); + } + return browser.tabs.remove(tabs[0].id); }; -const closeTabsByKeywords = (keyword) => { - tabCompletions.getCompletions(keyword).then((tabs) => { - let tabs2 = tabs.filter(tab => !tab.pinned); - browser.tabs.remove(tabs2.map(tab => tab.id)); - }); +const closeTabByKeywordsForce = async(keyword) => { + let tabs = await queryByKeyword(keyword, true); + if (tabs.length === 0) { + throw new Error('No matching buffer for ' + keyword); + } else if (tabs.length > 1) { + throw new Error('More than one match for ' + keyword); + } + return browser.tabs.remove(tabs[0].id); }; -const closeTabsByKeywordsForce = (keyword) => { - tabCompletions.getCompletions(keyword).then((tabs) => { - browser.tabs.remove(tabs.map(tab => tab.id)); - }); +const closeTabsByKeywords = async(keyword) => { + let tabs = await tabCompletions.getCompletions(keyword); + tabs = tabs.filter(tab => !tab.pinned); + return browser.tabs.remove(tabs.map(tab => tab.id)); }; -const reopenTab = () => { - let window = null; - return browser.windows.getCurrent().then().then((w) => { - window = w; - return browser.sessions.getRecentlyClosed(); - }).then((sessions) => { - let session = sessions.find((s) => { - return s.tab && s.tab.windowId === window.id; - }); - if (!session) { - return; - } - if (session.tab) { - return browser.sessions.restore(session.tab.sessionId); - } - return browser.sessions.restore(session.window.sessionId); - }); +const closeTabsByKeywordsForce = async(keyword) => { + let tabs = await tabCompletions.getCompletions(keyword); + return browser.tabs.remove(tabs.map(tab => tab.id)); }; -const selectAt = (index) => { - return browser.tabs.query({ currentWindow: true }).then((tabs) => { - if (tabs.length < 2) { - return; - } - if (index < 0 || tabs.length <= index) { - throw new RangeError(`tab ${index + 1} does not exist`); - } - let id = tabs[index].id; - return browser.tabs.update(id, { active: true }); +const reopenTab = async() => { + let window = await browser.windows.getCurrent(); + let sessions = await browser.sessions.getRecentlyClosed(); + let session = sessions.find((s) => { + return s.tab && s.tab.windowId === window.id; }); + if (!session) { + return; + } + if (session.tab) { + return browser.sessions.restore(session.tab.sessionId); + } + return browser.sessions.restore(session.window.sessionId); +}; + +const selectAt = async(index) => { + let tabs = await browser.tabs.query({ currentWindow: true }); + if (tabs.length < 2) { + return; + } + if (index < 0 || tabs.length <= index) { + throw new RangeError(`tab ${index + 1} does not exist`); + } + let id = tabs[index].id; + return browser.tabs.update(id, { active: true }); }; -const selectByKeyword = (current, keyword) => { - return queryByKeyword(keyword).then((tabs) => { - if (tabs.length === 0) { - throw new RangeError('No matching buffer for ' + keyword); +const selectByKeyword = async(current, keyword) => { + let tabs = await queryByKeyword(keyword); + if (tabs.length === 0) { + throw new RangeError('No matching buffer for ' + keyword); + } + for (let tab of tabs) { + if (tab.index > current.index) { + return browser.tabs.update(tab.id, { active: true }); } - for (let tab of tabs) { - if (tab.index > current.index) { - return browser.tabs.update(tab.id, { active: true }); - } - } - return browser.tabs.update(tabs[0].id, { active: true }); - }); + } + return browser.tabs.update(tabs[0].id, { active: true }); }; -const selectPrevTab = (current, count) => { - return browser.tabs.query({ currentWindow: true }).then((tabs) => { - if (tabs.length < 2) { - return; - } - let select = (current - count + tabs.length) % tabs.length; - let id = tabs[select].id; - return browser.tabs.update(id, { active: true }); - }); +const selectPrevTab = async(current, count) => { + let tabs = await browser.tabs.query({ currentWindow: true }); + if (tabs.length < 2) { + return; + } + let select = (current - count + tabs.length) % tabs.length; + let id = tabs[select].id; + return browser.tabs.update(id, { active: true }); }; -const selectNextTab = (current, count) => { - return browser.tabs.query({ currentWindow: true }).then((tabs) => { - if (tabs.length < 2) { - return; - } - let select = (current + count) % tabs.length; - let id = tabs[select].id; - return browser.tabs.update(id, { active: true }); - }); +const selectNextTab = async(current, count) => { + let tabs = await browser.tabs.query({ currentWindow: true }); + if (tabs.length < 2) { + return; + } + let select = (current + count) % tabs.length; + let id = tabs[select].id; + return browser.tabs.update(id, { active: true }); }; -const selectFirstTab = () => { - return browser.tabs.query({ currentWindow: true }).then((tabs) => { - let id = tabs[0].id; - return browser.tabs.update(id, { active: true }); - }); +const selectFirstTab = async() => { + let tabs = await browser.tabs.query({ currentWindow: true }); + let id = tabs[0].id; + return browser.tabs.update(id, { active: true }); }; -const selectLastTab = () => { - return browser.tabs.query({ currentWindow: true }).then((tabs) => { - let id = tabs[tabs.length - 1].id; - return browser.tabs.update(id, { active: true }); - }); +const selectLastTab = async() => { + let tabs = await browser.tabs.query({ currentWindow: true }); + let id = tabs[tabs.length - 1].id; + return browser.tabs.update(id, { active: true }); }; const selectTab = (id) => { @@ -152,14 +136,11 @@ const reload = (current, cache) => { }; const updateTabPinned = (current, pinned) => { - return browser.tabs.query({ currentWindow: true, active: true }) - .then(() => { - return browser.tabs.update(current.id, { pinned: pinned }); - }); + return browser.tabs.update(current.id, { pinned }); }; const toggleTabPinned = (current) => { - updateTabPinned(current, !current.pinned); + return updateTabPinned(current, !current.pinned); }; const duplicate = (id) => { diff --git a/src/background/shared/zooms.js b/src/background/shared/zooms.js index e3e2aa6..17b28fa 100644 --- a/src/background/shared/zooms.js +++ b/src/background/shared/zooms.js @@ -9,26 +9,20 @@ const ZOOM_SETTINGS = [ 1.10, 1.25, 1.50, 1.75, 2.00, 2.50, 3.00 ]; -const zoomIn = (tabId = undefined) => { - return browser.tabs.getZoom(tabId).then((factor) => { - for (let f of ZOOM_SETTINGS) { - if (f > factor) { - browser.tabs.setZoom(tabId, f); - break; - } - } - }); +const zoomIn = async(tabId = undefined) => { + let current = await browser.tabs.getZoom(tabId); + let factor = ZOOM_SETTINGS.find(f => f > current); + if (factor) { + return browser.tabs.setZoom(tabId, factor); + } }; -const zoomOut = (tabId = undefined) => { - return browser.tabs.getZoom(tabId).then((factor) => { - for (let f of [].concat(ZOOM_SETTINGS).reverse()) { - if (f < factor) { - browser.tabs.setZoom(tabId, f); - break; - } - } - }); +const zoomOut = async(tabId = undefined) => { + let current = await browser.tabs.getZoom(tabId); + let factor = [].concat(ZOOM_SETTINGS).reverse().find(f => f < current); + if (factor) { + return browser.tabs.setZoom(tabId, factor); + } }; const neutral = (tabId = undefined) => { From 7f56a08f3ba5407e6c8cdec12dc59aa71aa06d03 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 17 Jun 2018 21:42:52 +0900 Subject: [PATCH 08/10] Use async/await on content script --- src/console/components/console.js | 7 ++-- src/content/actions/find.js | 46 ++++++++++++-------------- src/content/components/common/index.js | 13 ++++---- 3 files changed, 32 insertions(+), 34 deletions(-) diff --git a/src/console/components/console.js b/src/console/components/console.js index a9ae4ed..417c9f6 100644 --- a/src/console/components/console.js +++ b/src/console/components/console.js @@ -107,16 +107,15 @@ export default class ConsoleComponent { } } - onInput(e) { + async onInput(e) { this.store.dispatch(consoleActions.setConsoleText(e.target.value)); let source = e.target.value; - return browser.runtime.sendMessage({ + let completions = await browser.runtime.sendMessage({ type: messages.CONSOLE_QUERY_COMPLETIONS, text: source, - }).then((completions) => { - this.store.dispatch(consoleActions.setCompletions(source, completions)); }); + this.store.dispatch(consoleActions.setCompletions(source, completions)); } onInputShown(state) { diff --git a/src/content/actions/find.js b/src/content/actions/find.js index 249a8a9..b3d7e30 100644 --- a/src/content/actions/find.js +++ b/src/content/actions/find.js @@ -35,47 +35,45 @@ const find = (string, backwards) => { // NOTE: aWholeWord dows not implemented, and aSearchInFrames does not work // because of same origin policy + let found = window.find(string, caseSensitive, backwards, wrapScan); + if (found) { + return found; + } + window.getSelection().removeAllRanges(); return window.find(string, caseSensitive, backwards, wrapScan); }; -const findNext = (currentKeyword, reset, backwards) => { +const findNext = async(currentKeyword, reset, backwards) => { if (reset) { window.getSelection().removeAllRanges(); } - let promise = Promise.resolve(currentKeyword); + let keyword = currentKeyword; if (currentKeyword) { browser.runtime.sendMessage({ type: messages.FIND_SET_KEYWORD, keyword: currentKeyword, }); } else { - promise = browser.runtime.sendMessage({ + keyword = await browser.runtime.sendMessage({ type: messages.FIND_GET_KEYWORD, }); } + if (!keyword) { + return postNoPrevious(); + } + let found = find(keyword, backwards); + if (found) { + postPatternFound(keyword); + } else { + postPatternNotFound(keyword); + } - return promise.then((keyword) => { - if (!keyword) { - return postNoPrevious(); - } - let found = find(keyword, backwards); - if (!found) { - window.getSelection().removeAllRanges(); - found = find(keyword, backwards); - } - if (found) { - postPatternFound(keyword); - } else { - postPatternNotFound(keyword); - } - - return { - type: actions.FIND_SET_KEYWORD, - keyword, - found, - }; - }); + return { + type: actions.FIND_SET_KEYWORD, + keyword, + found, + }; }; const next = (currentKeyword, reset) => { diff --git a/src/content/components/common/index.js b/src/content/components/common/index.js index 9b7b083..6437011 100644 --- a/src/content/components/common/index.js +++ b/src/content/components/common/index.js @@ -44,15 +44,16 @@ export default class Common { } } - reloadSettings() { - browser.runtime.sendMessage({ - type: messages.SETTINGS_QUERY, - }).then((settings) => { + async reloadSettings() { + try { + let settings = await browser.runtime.sendMessage({ + type: messages.SETTINGS_QUERY, + }); this.store.dispatch(settingActions.set(settings)); - }).catch((e) => { + } catch (e) { // Sometime sendMessage fails when background script is not ready. console.warn(e); setTimeout(() => this.reloadSettings(), 500); - }); + } } } From 94d411234ada47bef2c8f4a3b0fc77904f0900a6 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 17 Jun 2018 21:56:54 +0900 Subject: [PATCH 09/10] Use await/async on settings --- src/settings/actions/setting.js | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/settings/actions/setting.js b/src/settings/actions/setting.js index 92c9f8a..1219ba5 100644 --- a/src/settings/actions/setting.js +++ b/src/settings/actions/setting.js @@ -4,20 +4,17 @@ import DefaultSettings from 'shared/settings/default'; import * as settingsStorage from 'shared/settings/storage'; import * as settingsValues from 'shared/settings/values'; -const load = () => { - return settingsStorage.loadRaw().then((settings) => { - return set(settings); - }); +const load = async() => { + let settings = await settingsStorage.loadRaw(); + return set(settings); }; -const save = (settings) => { - return settingsStorage.save(settings).then(() => { - return browser.runtime.sendMessage({ - type: messages.SETTINGS_RELOAD - }); - }).then(() => { - return set(settings); +const save = async(settings) => { + await settingsStorage.save(settings); + await browser.runtime.sendMessage({ + type: messages.SETTINGS_RELOAD }); + return set(settings); }; const set = (settings) => { From b74acf6f6aef4e4241ba62c72ed8ddb21adc751d Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 17 Jun 2018 22:02:32 +0900 Subject: [PATCH 10/10] Use await/async on shared directory --- src/shared/settings/storage.js | 42 ++++++++++++++++------------------ src/shared/versions/index.js | 13 +++++------ src/shared/versions/storage.js | 7 +++--- 3 files changed, 29 insertions(+), 33 deletions(-) diff --git a/src/shared/settings/storage.js b/src/shared/settings/storage.js index 9b8045d..87843ed 100644 --- a/src/shared/settings/storage.js +++ b/src/shared/settings/storage.js @@ -1,30 +1,28 @@ import DefaultSettings from './default'; import * as settingsValues from './values'; -const loadRaw = () => { - return browser.storage.local.get('settings').then(({ settings }) => { - if (!settings) { - return DefaultSettings; - } - return Object.assign({}, DefaultSettings, settings); - }); +const loadRaw = async() => { + let { settings } = await browser.storage.local.get('settings'); + if (!settings) { + return DefaultSettings; + } + return Object.assign({}, DefaultSettings, settings); }; -const loadValue = () => { - return loadRaw().then((settings) => { - let value = JSON.parse(DefaultSettings.json); - if (settings.source === 'json') { - value = settingsValues.valueFromJson(settings.json); - } else if (settings.source === 'form') { - value = settingsValues.valueFromForm(settings.form); - } - if (!value.properties) { - value.properties = {}; - } - return Object.assign({}, - settingsValues.valueFromJson(DefaultSettings.json), - value); - }); +const loadValue = async() => { + let settings = await loadRaw(); + let value = JSON.parse(DefaultSettings.json); + if (settings.source === 'json') { + value = settingsValues.valueFromJson(settings.json); + } else if (settings.source === 'form') { + value = settingsValues.valueFromForm(settings.form); + } + if (!value.properties) { + value.properties = {}; + } + return Object.assign({}, + settingsValues.valueFromJson(DefaultSettings.json), + value); }; const save = (settings) => { diff --git a/src/shared/versions/index.js b/src/shared/versions/index.js index ee9f3b5..ba3d183 100644 --- a/src/shared/versions/index.js +++ b/src/shared/versions/index.js @@ -13,13 +13,12 @@ const notificationClickListener = (id) => { browser.notifications.onClicked.removeListener(notificationClickListener); }; -const checkUpdated = () => { - return storage.load().then((prev) => { - if (!prev) { - return true; - } - return manifest.version !== prev; - }); +const checkUpdated = async() => { + let prev = await storage.load(); + if (!prev) { + return true; + } + return manifest.version !== prev; }; const notify = () => { diff --git a/src/shared/versions/storage.js b/src/shared/versions/storage.js index 37603c8..7883258 100644 --- a/src/shared/versions/storage.js +++ b/src/shared/versions/storage.js @@ -1,7 +1,6 @@ -const load = () => { - return browser.storage.local.get('version').then(({ version }) => { - return version; - }); +const load = async() => { + let { version } = await browser.storage.local.get('version'); + return version; }; const save = (version) => {