From c9a0bf87d0ba81beb1b958c374a40c4b69f4192b Mon Sep 17 00:00:00 2001
From: Shin'ya Ueoka <ueokande@i-beam.org>
Date: Sat, 6 Apr 2019 21:37:29 +0900
Subject: Add mark e2e tests

---
 e2e-lanthan/mark.test.js | 121 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 121 insertions(+)
 create mode 100644 e2e-lanthan/mark.test.js

diff --git a/e2e-lanthan/mark.test.js b/e2e-lanthan/mark.test.js
new file mode 100644
index 0000000..abcef03
--- /dev/null
+++ b/e2e-lanthan/mark.test.js
@@ -0,0 +1,121 @@
+const express = require('express');
+const lanthan = require('lanthan');
+const path = require('path');
+const assert = require('power-assert');
+const eventually = require('./eventually');
+
+const Key = lanthan.Key;
+
+const newApp = () => {
+  let app = express();
+  app.get('/', (req, res) => {
+    res.send(`<!DOCTYPEhtml>
+<html lang="en">
+  <body style="width:10000px; height:10000px"></body>
+</html">`);
+  });
+  return app;
+};
+
+describe("mark test", () => {
+
+  const port = 12321;
+  let http;
+  let firefox;
+  let session;
+  let browser;
+
+  before(async() => {
+    http = newApp().listen(port);
+
+    firefox = await lanthan.firefox();
+    await firefox.session.installAddon(path.join(__dirname, '..'));
+    session = firefox.session;
+    browser = firefox.browser;
+  });
+
+  after(async() => {
+    if (firefox) {
+      await firefox.close();
+    }
+    http.close();
+  });
+
+  it('should set a local mark and jump to it', async () => {
+    await session.navigateTo(`http://127.0.0.1:${port}`);
+    let body = await session.findElementByCSS('body');
+
+    await session.executeScript(() => window.scrollTo(200, 200));
+    await body.sendKeys('m', 'a');
+    await session.executeScript(() => window.scrollTo(500, 500));
+    await body.sendKeys('\'', 'a');
+
+    await eventually(async() => {
+      let pageXOffset = await session.executeScript(() => window.pageXOffset);
+      let pageYOffset = await session.executeScript(() => window.pageYOffset);
+      assert.equal(pageXOffset, 200);
+      assert.equal(pageYOffset, 200);
+    });
+  });
+
+  it('should set a global mark and jump to it', async () => {
+    await session.navigateTo(`http://127.0.0.1:${port}#first`);
+    let body = await session.findElementByCSS('body');
+
+    await session.executeScript(() => window.scrollTo(200, 200));
+    await body.sendKeys('m', 'A');
+    await session.executeScript(() => window.scrollTo(500, 500));
+    await body.sendKeys('\'', 'A');
+
+    await eventually(async() => {
+      let pageXOffset = await session.executeScript(() => window.pageXOffset);
+      let pageYOffset = await session.executeScript(() => window.pageYOffset);
+      assert.equal(pageXOffset, 200);
+      assert.equal(pageYOffset, 200);
+    });
+
+    await browser.tabs.create({ url: `http://127.0.0.1:${port}#second` });
+    body = await session.findElementByCSS('body');
+    await body.sendKeys('\'', 'A');
+
+    await eventually(async() => {
+      let tab = (await browser.tabs.query({ active: true }))[0];
+      let url = new URL(tab.url);
+      assert.equal(url.hash, '#first');
+
+      let pageXOffset = await session.executeScript(() => window.pageXOffset);
+      let pageYOffset = await session.executeScript(() => window.pageYOffset);
+      assert.equal(pageXOffset, 200);
+      assert.equal(pageYOffset, 200);
+    });
+  });
+
+  it('set a global mark and creates new tab from gone', async () => {
+    await session.navigateTo(`http://127.0.0.1:${port}#first`);
+    await session.executeScript(() => window.scrollTo(500, 500));
+    let body = await session.findElementByCSS('body');
+    await body.sendKeys('m', 'A');
+
+    let tab = (await browser.tabs.query({ active: true }))[0];
+    await browser.tabs.create({ url: `http://127.0.0.1:${port}#second` });
+    await browser.tabs.remove(tab.id);
+
+    let handles;
+    await eventually(async() => {
+      handles = await session.getWindowHandles();
+      assert.equal(handles.length, 2);
+    });
+    await session.switchToWindow(handles[0]);
+    await session.navigateTo(`http://127.0.0.1:${port}#second`);
+    body = await session.findElementByCSS('body');
+    await body.sendKeys('\'', 'A');
+
+    await eventually(async() => {
+      let tab = (await browser.tabs.query({ active: true }))[0];
+      let url = new URL(tab.url);
+      assert.equal(url.hash, '#first');
+    });
+  });
+});
+
+
-- 
cgit v1.2.3