import * as path from "path";
import * as assert from "assert";
import TestServer from "./lib/TestServer";
import eventually from "./eventually";
import { Builder, Lanthan } from "lanthan";
import { WebDriver, Key } from "selenium-webdriver";
import Page from "./lib/Page";
import SettingRepository from "./lib/SettingRepository";
import Settings from "../src/shared/settings/Settings";
describe("follow properties test", () => {
const server = new TestServer().receiveContent(
"/",
`
link1
link2
link3
link4
link5
`
);
let lanthan: Lanthan;
let webdriver: WebDriver;
let browser: any;
let page: Page;
beforeAll(async () => {
lanthan = await Builder.forBrowser("firefox")
.spyAddon(path.join(__dirname, ".."))
.build();
webdriver = lanthan.getWebDriver();
browser = lanthan.getWebExtBrowser();
await new SettingRepository(browser).saveJSON(
Settings.fromJSON({
keymaps: {
":": { type: "command.show" },
f: { type: "follow.start", newTab: false },
F: { type: "follow.start", newTab: true, background: false },
"": { type: "follow.start", newTab: true, background: true },
},
properties: {
hintchars: "jk",
},
})
);
await server.start();
});
afterAll(async () => {
await server.stop();
if (lanthan) {
await lanthan.quit();
}
});
beforeEach(async () => {
page = await Page.navigateTo(webdriver, server.url());
});
afterEach(async () => {
const tabs = await browser.tabs.query({});
for (const tab of tabs.slice(1)) {
await browser.tabs.remove(tab.id);
}
});
it("should show hints with hintchars by settings", async () => {
await page.sendKeys("f");
let hints = await page.waitAndGetHints();
assert.strictEqual(hints.length, 5);
assert.strictEqual(hints[0].text, "J");
assert.strictEqual(hints[1].text, "K");
assert.strictEqual(hints[2].text, "JJ");
assert.strictEqual(hints[3].text, "JK");
assert.strictEqual(hints[4].text, "KJ");
await page.sendKeys("j");
hints = await page.waitAndGetHints();
assert.strictEqual(hints[0].displayed, true);
assert.strictEqual(hints[1].displayed, false);
assert.strictEqual(hints[2].displayed, true);
assert.strictEqual(hints[3].displayed, true);
assert.strictEqual(hints[4].displayed, false);
});
it("should open tab in background by background:false", async () => {
await page.sendKeys(Key.SHIFT, "f");
await page.waitAndGetHints();
await page.sendKeys("jj");
await eventually(async () => {
const tabs = await browser.tabs.query({});
assert.strictEqual(tabs[0].active, false);
assert.strictEqual(tabs[1].active, true);
});
});
it("should open tab in background by background:true", async () => {
await page.sendKeys(Key.CONTROL, "f");
await page.waitAndGetHints();
await page.sendKeys("jj");
await eventually(async () => {
const tabs = await browser.tabs.query({});
assert.strictEqual(tabs[0].active, true);
assert.strictEqual(tabs[1].active, false);
});
});
it("should show hints with hintchars by settings", async () => {
const console = await page.showConsole();
await console.execCommand("set hintchars=abc");
await (webdriver.switchTo() as any).parentFrame();
await page.sendKeys("f");
let hints = await page.waitAndGetHints();
assert.strictEqual(hints.length, 5);
assert.strictEqual(hints[0].text, "A");
assert.strictEqual(hints[1].text, "B");
assert.strictEqual(hints[2].text, "C");
assert.strictEqual(hints[3].text, "AA");
assert.strictEqual(hints[4].text, "AB");
await page.sendKeys("a");
hints = await page.waitAndGetHints();
assert.strictEqual(hints[0].displayed, true);
assert.strictEqual(hints[1].displayed, false);
assert.strictEqual(hints[2].displayed, false);
assert.strictEqual(hints[3].displayed, true);
assert.strictEqual(hints[4].displayed, true);
});
});