diff --git a/autoload/firenvim.vim b/autoload/firenvim.vim index eeb833c9..6a122c6b 100644 --- a/autoload/firenvim.vim +++ b/autoload/firenvim.vim @@ -217,7 +217,7 @@ function! s:get_executable_content(data_dir, prolog) abort return "@echo off\r\n" . \ "cd \"" . a:data_dir . "\"\r\n" . \ a:prolog . "\r\n" . - \ "\"" . s:get_progpath() . "\" --headless -c \"call firenvim#run()\"\r\n" + \ "\"" . s:get_progpath() . "\" --headless --cmd \"let g:started_by_firenvim = v:true\" -c \"call firenvim#run()\"\r\n" endif return "#!/bin/sh\n" . \ 'cd ' . a:data_dir . "\n" . diff --git a/tests/_common.ts b/tests/_common.ts index 42f460c6..550dc38c 100644 --- a/tests/_common.ts +++ b/tests/_common.ts @@ -104,6 +104,36 @@ export async function testModifiers(driver: any) { await driver.wait(async () => ["\u0011", "\u0001"].includes(await input.getAttribute("value"))); } +export async function testGStartedByFirenvim(driver: any) { + await loadLocalPage(driver, "simple.html"); + console.log("Locating textarea…"); + const input = await driver.wait(Until.elementLocated(By.id("content-input"))); + await driver.executeScript("arguments[0].scrollIntoView(true);", input); + console.log("Clicking on input…"); + await driver.actions().click(input).perform(); + console.log("Waiting for span to be created…"); + const span = await driver.wait(Until.elementLocated(By.css("body > span:nth-child(2)"))); + await driver.sleep(500); + console.log("Typing a=g:started_by_firenvim:wq…"); + await sendKeys(driver, ["a"]) + await driver.actions() + .keyDown(webdriver.Key.CONTROL) + .keyDown("r") + .keyUp("r") + .keyUp(webdriver.Key.CONTROL) + .perform(); + await sendKeys(driver, "=g:started_by_firenvim".split("") + .concat([webdriver.Key.ENTER]) + .concat([webdriver.Key.ESCAPE]) + .concat(":wq!".split("")) + .concat(webdriver.Key.ENTER)); + await driver.sleep(500); + console.log("Waiting for span to be removed from page…"); + await driver.wait(Until.stalenessOf(span)); + console.log("Waiting for value update…"); + await driver.wait(async () => (await input.getAttribute("value")) === "true"); +} + export async function testCodemirror(driver: any) { await loadLocalPage(driver, "codemirror.html"); console.log("Looking for codemirror div…"); diff --git a/tests/chrome.ts b/tests/chrome.ts index d3f0aa97..f3f4cfa3 100644 --- a/tests/chrome.ts +++ b/tests/chrome.ts @@ -14,6 +14,7 @@ import { testAce, testCodemirror, testDynamicTextareas, + testGStartedByFirenvim, testGuifont, testInputFocus, testInputFocusedAfterLeave, @@ -79,6 +80,7 @@ describe("Chrome", () => { nonHeadlessTest()("Firenvim works on dynamically created elements", () => testDynamicTextareas(driver)); nonHeadlessTest()("Firenvim works on dynamically created nested elements", () => testNestedDynamicTextareas(driver)); nonHeadlessTest()("Firenvim works with large buffers", () => testLargeBuffers(driver)); + nonHeadlessTest().only("g:started_by_firenvim exists", () => testGStartedByFirenvim(driver)); nonHeadlessTest()("Guifont works", () => testGuifont(driver)); nonHeadlessTest()("Input is focused after leaving frame", () => testInputFocusedAfterLeave(driver)); nonHeadlessTest()("InputFocus works", () => testInputFocus(driver)); diff --git a/tests/firefox.ts b/tests/firefox.ts index 3e81b208..836c6bcf 100644 --- a/tests/firefox.ts +++ b/tests/firefox.ts @@ -15,6 +15,7 @@ import { testAce, testCodemirror, testDynamicTextareas, + testGStartedByFirenvim, testGuifont, testInputFocus, testInputFocusedAfterLeave, @@ -81,6 +82,7 @@ describe("Firefox", () => { test("Firenvim works on dynamically created elements", () => testDynamicTextareas(driver)); test("Firenvim works on dynamically created nested elements", () => testNestedDynamicTextareas(driver)); test("Firenvim works with large buffers", () => testLargeBuffers(driver)); + test("g:started_by_firenvim exists", () => testGStartedByFirenvim(driver)); test("Guifont works", () => testGuifont(driver)); test("Input is focused after leaving frame", () => testInputFocusedAfterLeave(driver)); test("InputFocus works", () => testInputFocus(driver));