aboutsummaryrefslogtreecommitdiff
path: root/e2e/navigate.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'e2e/navigate.test.js')
-rw-r--r--e2e/navigate.test.js125
1 files changed, 114 insertions, 11 deletions
diff --git a/e2e/navigate.test.js b/e2e/navigate.test.js
index 089fa56..5d9365b 100644
--- a/e2e/navigate.test.js
+++ b/e2e/navigate.test.js
@@ -24,6 +24,15 @@ const newApp = () => {
</head>
</html">`);
});
+ app.get('/reload', (req, res) => {
+ res.status(200).send(`
+<html lang="en">
+ <head>
+ <script>window.location.hash = Date.now()</script>
+ </head>
+ <body style="width:10000px; height:10000px"></body>
+</html">`);
+ });
app.get('/*', (req, res) => {
res.send(`<!DOCTYPEhtml>
@@ -34,7 +43,7 @@ const newApp = () => {
return app;
};
-describe("zoom test", () => {
+describe("navigate test", () => {
const port = 12321;
let http;
@@ -45,8 +54,12 @@ describe("zoom test", () => {
before(async() => {
http = newApp().listen(port);
- firefox = await lanthan.firefox();
- await firefox.session.installAddon(path.join(__dirname, '..'));
+ firefox = await lanthan.firefox({
+ prefs: {
+ 'browser.startup.homepage': `http://127.0.0.1:${port}#home`,
+ }
+ });
+ await firefox.session.installAddonFromPath(path.join(__dirname, '..'));
session = firefox.session;
browser = firefox.browser;
});
@@ -58,15 +71,24 @@ describe("zoom test", () => {
http.close();
});
+ beforeEach(async() => {
+ let tabs = await browser.tabs.query({});
+ for (let tab of tabs.slice(1)) {
+ await browser.tabs.remove(tab.id);
+ }
+ })
+
it('should go to parent path without hash by gu', async () => {
await session.navigateTo(`http://127.0.0.1:${port}/a/b/c`);
let body = await session.findElementByCSS('body');
await body.sendKeys('g', 'u');
- let tab = (await browser.tabs.query({}))[0];
- let url = new URL(tab.url);
- assert.equal(url.pathname, `/a/b/`)
+ await eventually(async() => {
+ let tab = (await browser.tabs.query({}))[0];
+ let url = new URL(tab.url);
+ assert.equal(url.pathname, `/a/b/`)
+ });
});
it('should remove hash by gu', async () => {
@@ -75,10 +97,12 @@ describe("zoom test", () => {
await body.sendKeys('g', 'u');
- let tab = (await browser.tabs.query({}))[0];
- let url = new URL(tab.url);
- assert.equal(url.hash, '')
- assert.equal(url.pathname, `/a/b/c`)
+ await eventually(async() => {
+ let tab = (await browser.tabs.query({}))[0];
+ let url = new URL(tab.url);
+ assert.equal(url.hash, '')
+ assert.equal(url.pathname, `/a/b/c`)
+ });
});
it('should go to root path by gU', async () => {
@@ -162,6 +186,85 @@ describe("zoom test", () => {
assert.equal(url.pathname, '/pagenation-link/11');
});
});
-});
+ it('should go to home page into current tab by gh', async () => {
+ await session.navigateTo(`http://127.0.0.1:${port}`);
+ let body = await session.findElementByCSS('body');
+ await body.sendKeys('g', 'h');
+
+ await eventually(async() => {
+ let tab = (await browser.tabs.query({}))[0];
+ let url = new URL(tab.url);
+ assert.equal(url.hash, '#home');
+ });
+ });
+
+ it('should go to home page into current tab by gH', async () => {
+ await session.navigateTo(`http://127.0.0.1:${port}`);
+ let body = await session.findElementByCSS('body');
+ await body.sendKeys('g', Key.Shift, 'H');
+
+ await eventually(async() => {
+ let tabs = await browser.tabs.query({});
+ assert.equal(tabs.length, 2);
+ assert.equal(new URL(tabs[0].url).hash, '');
+ assert.equal(new URL(tabs[1].url).hash, '#home');
+ assert.equal(tabs[1].active, true);
+ });
+ });
+
+ it('should reload current tab by r', async () => {
+ await session.navigateTo(`http://127.0.0.1:${port}/reload`);
+ await session.executeScript(() => window.scrollTo(500, 500));
+ let before
+ await eventually(async() => {
+ let tab = (await browser.tabs.query({}))[0];
+ before = Number(new URL(tab.url).hash.split('#')[1]);
+ assert(before > 0);
+ });
+
+ let body = await session.findElementByCSS('body');
+ await body.sendKeys('r');
+
+ let after
+ await eventually(async() => {
+ let tab = (await browser.tabs.query({}))[0];
+ after = Number(new URL(tab.url).hash.split('#')[1]);
+ assert(after > before);
+ });
+ await eventually(async() => {
+ let pageYOffset = await session.executeScript(() => window.pageYOffset);
+ assert.equal(pageYOffset, 500);
+ });
+ });
+
+ it('should reload current tab without cache by R', async () => {
+ await session.navigateTo(`http://127.0.0.1:${port}/reload`);
+ await session.executeScript(() => window.scrollTo(500, 500));
+ let before
+ await eventually(async() => {
+ let tab = (await browser.tabs.query({}))[0];
+ before = Number(new URL(tab.url).hash.split('#')[1]);
+ assert(before > 0);
+ });
+
+ let body = await session.findElementByCSS('body');
+ await body.sendKeys(Key.Shift, 'R');
+
+ let after
+ await eventually(async() => {
+ let tab = (await browser.tabs.query({}))[0];
+ after = Number(new URL(tab.url).hash.split('#')[1]);
+ assert(after > before);
+ });
+
+ // assert that the page offset is reset to 0, and 'eventually' is timed-out.
+ await assert.rejects(async () => {
+ await eventually(async() => {
+ let pageYOffset = await session.executeScript(() => window.pageYOffset);
+ assert.equal(pageYOffset, 500);
+ });
+ });
+ });
+});