@tui-sandbox/library 12.3.2 → 12.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/assets/{index-DZMdP7t7.js → index-CBAsIfwR.js} +4 -4
- package/dist/browser/index.html +1 -1
- package/dist/src/client/drawTextBox.d.ts +2 -0
- package/dist/src/client/drawTextBox.js +17 -0
- package/dist/src/client/drawTextBox.js.map +1 -0
- package/dist/src/client/drawTextBox.test.d.ts +1 -0
- package/dist/src/client/drawTextBox.test.js +32 -0
- package/dist/src/client/drawTextBox.test.js.map +1 -0
- package/dist/src/client/index.d.ts +1 -0
- package/dist/src/client/index.js +1 -0
- package/dist/src/client/index.js.map +1 -1
- package/dist/src/server/cypress-support/contents.js +5 -271
- package/dist/src/server/cypress-support/contents.js.map +1 -1
- package/dist/src/server/dirtree/index.js +2 -2
- package/dist/src/server/dirtree/index.js.map +1 -1
- package/dist/src/server/utilities/DisposableSingleApplication.test.js +1 -1
- package/dist/src/server/utilities/DisposableSingleApplication.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -9
- package/src/server/cypress-support/tui-sandbox-template.ts +344 -0
package/dist/browser/index.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<title>tui-sandbox integration tests</title>
|
|
6
|
-
<script type="module" crossorigin src="/assets/index-
|
|
6
|
+
<script type="module" crossorigin src="/assets/index-CBAsIfwR.js"></script>
|
|
7
7
|
<link rel="stylesheet" crossorigin href="/assets/index-DeHrVVje.css">
|
|
8
8
|
</head>
|
|
9
9
|
<body>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Draw a Unicode box around text content with a title in the top border. */
|
|
2
|
+
export const drawTextBox = (title, content, minWidth = 88) => {
|
|
3
|
+
const header = ` ${title} `;
|
|
4
|
+
const contentLines = content.split("\n");
|
|
5
|
+
// The box must be wide enough for the header and all content lines
|
|
6
|
+
const maxContentWidth = Math.max(...contentLines.map(line => line.length));
|
|
7
|
+
const width = Math.max(minWidth, maxContentWidth + 4, header.length + 2);
|
|
8
|
+
const innerWidth = width - 2;
|
|
9
|
+
const topBorder = `┌${header}${"─".repeat(innerWidth - header.length)}┐`;
|
|
10
|
+
const bottomBorder = `└${"─".repeat(innerWidth)}┘`;
|
|
11
|
+
const lines = contentLines.map(line => {
|
|
12
|
+
const padded = line.padEnd(innerWidth - 2);
|
|
13
|
+
return `│ ${padded} │`;
|
|
14
|
+
});
|
|
15
|
+
return `${topBorder}\n${lines.join("\n")}\n${bottomBorder}`;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=drawTextBox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawTextBox.js","sourceRoot":"","sources":["../../../src/client/drawTextBox.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,OAAe,EAAE,QAAQ,GAAG,EAAE,EAAU,EAAE;IACnF,MAAM,MAAM,GAAG,IAAI,KAAK,GAAG,CAAA;IAC3B,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAExC,mEAAmE;IACnE,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAExE,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAA;IAC5B,MAAM,SAAS,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA;IACxE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAA;IAClD,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;QAC1C,OAAO,KAAK,MAAM,IAAI,CAAA;IACxB,CAAC,CAAC,CAAA;IACF,OAAO,GAAG,SAAS,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,YAAY,EAAE,CAAA;AAC7D,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { drawTextBox } from "./drawTextBox.js";
|
|
3
|
+
describe("drawTextBox", () => {
|
|
4
|
+
it("draws a box around terminal content", () => {
|
|
5
|
+
const content = [
|
|
6
|
+
"",
|
|
7
|
+
"The default interactive shell is now zsh.",
|
|
8
|
+
"To update your account to use zsh, please run `chsh -s /bin/zsh`.",
|
|
9
|
+
"For more details, please visit https://support.apple.com/kb/HT208050.",
|
|
10
|
+
"myprompt ~ ➜",
|
|
11
|
+
].join("\n");
|
|
12
|
+
expect(drawTextBox("Terminal content at failure", content)).toMatchInlineSnapshot(`
|
|
13
|
+
"┌ Terminal content at failure ─────────────────────────────────────────────────────────┐
|
|
14
|
+
│ │
|
|
15
|
+
│ The default interactive shell is now zsh. │
|
|
16
|
+
│ To update your account to use zsh, please run \`chsh -s /bin/zsh\`. │
|
|
17
|
+
│ For more details, please visit https://support.apple.com/kb/HT208050. │
|
|
18
|
+
│ myprompt ~ ➜ │
|
|
19
|
+
└──────────────────────────────────────────────────────────────────────────────────────┘"
|
|
20
|
+
`);
|
|
21
|
+
});
|
|
22
|
+
it("expands the box when content is wider than the default width", () => {
|
|
23
|
+
const longLine = "testdirs/dir-HME0bB/initial-file.txt 1,1 All";
|
|
24
|
+
const content = ["If you see this text, Neovim is ready!", "~", longLine].join("\n");
|
|
25
|
+
const result = drawTextBox("Terminal content at failure", content);
|
|
26
|
+
const lines = result.split("\n");
|
|
27
|
+
// All lines should be the same visual width
|
|
28
|
+
const lengths = lines.map(line => line.length);
|
|
29
|
+
expect(new Set(lengths).size).toBe(1);
|
|
30
|
+
});
|
|
31
|
+
}); // describe
|
|
32
|
+
//# sourceMappingURL=drawTextBox.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawTextBox.test.js","sourceRoot":"","sources":["../../../src/client/drawTextBox.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,OAAO,GAAG;YACd,EAAE;YACF,2CAA2C;YAC3C,mEAAmE;YACnE,uEAAuE;YACvE,cAAc;SACf,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,CAAC,WAAW,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;GAQnF,CAAC,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,QAAQ,GACZ,gIAAgI,CAAA;QAClI,MAAM,OAAO,GAAG,CAAC,wCAAwC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEpF,MAAM,MAAM,GAAG,WAAW,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAA;QAClE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAEhC,4CAA4C;QAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC9C,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA,CAAC,WAAW"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export type { InMemoryClipboard } from "./clipboard.js";
|
|
2
2
|
export { rgbify } from "./color-utilities.js";
|
|
3
3
|
export { textIsVisibleWithBackgroundColor, textIsVisibleWithColor } from "./cypress-assertions.js";
|
|
4
|
+
export { drawTextBox } from "./drawTextBox.js";
|
|
4
5
|
export type { MyNeovimConfigModification } from "./neovim/MyNeovimConfigModification.ts";
|
package/dist/src/client/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// This is the public client api. Semantic versioning will be applied to this.
|
|
2
2
|
export { rgbify } from "./color-utilities.js";
|
|
3
3
|
export { textIsVisibleWithBackgroundColor, textIsVisibleWithColor } from "./cypress-assertions.js";
|
|
4
|
+
export { drawTextBox } from "./drawTextBox.js";
|
|
4
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAG9E,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,gCAAgC,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAG9E,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,gCAAgC,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -1,278 +1,12 @@
|
|
|
1
|
+
import { readFileSync } from "fs";
|
|
2
|
+
import { createRequire } from "module";
|
|
1
3
|
import { format, resolveConfig } from "prettier";
|
|
2
4
|
import { fileURLToPath } from "url";
|
|
3
5
|
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
const require = createRequire(import.meta.url);
|
|
4
7
|
export async function createCypressSupportFileContents() {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
let text = `/// <reference types="cypress" />
|
|
8
|
-
//
|
|
9
|
-
// This file is autogenerated by tui-sandbox. Do not edit it directly.
|
|
10
|
-
//
|
|
11
|
-
import type {
|
|
12
|
-
BrowserTerminalSettings,
|
|
13
|
-
GenericNeovimBrowserApi,
|
|
14
|
-
GenericTerminalBrowserApi,
|
|
15
|
-
} from "@tui-sandbox/library/browser/neovim-client.js"
|
|
16
|
-
import type { MyNeovimConfigModification } from "@tui-sandbox/library/client"
|
|
17
|
-
import type {
|
|
18
|
-
AllKeys,
|
|
19
|
-
BlockingCommandClientInput,
|
|
20
|
-
BlockingShellCommandOutput,
|
|
21
|
-
ExCommandClientInput,
|
|
22
|
-
LuaCodeClientInput,
|
|
23
|
-
PollLuaCodeClientInput,
|
|
24
|
-
RunExCommandOutput,
|
|
25
|
-
RunLuaCodeOutput,
|
|
26
|
-
RunLuaFileClientInput,
|
|
27
|
-
StartNeovimGenericArguments,
|
|
28
|
-
StartTerminalGenericArguments,
|
|
29
|
-
TestDirectory,
|
|
30
|
-
} from "@tui-sandbox/library/server"
|
|
31
|
-
import type { OverrideProperties } from "type-fest"
|
|
32
|
-
import type { MyNeovimAppName, MyTestDirectory, MyTestDirectoryFile } from "../../MyTestDirectory"
|
|
33
|
-
|
|
34
|
-
export type TerminalTestApplicationContext = {
|
|
35
|
-
/** Types text into the terminal, making the terminal application receive the
|
|
36
|
-
* keystrokes as input. Requires the application to be running. */
|
|
37
|
-
typeIntoTerminal(text: string, options?: Partial<Cypress.TypeOptions>): void
|
|
38
|
-
|
|
39
|
-
/** Runs a shell command in a blocking manner, waiting for the command to
|
|
40
|
-
* finish before returning. Requires the terminal to be running. */
|
|
41
|
-
runBlockingShellCommand(input: MyBlockingCommandClientInput): Cypress.Chainable<BlockingShellCommandOutput>
|
|
42
|
-
|
|
43
|
-
/** The test directory, providing type-safe access to its file and directory structure */
|
|
44
|
-
dir: TestDirectory<MyTestDirectory>
|
|
45
|
-
|
|
46
|
-
/** Access to the clipboard of the terminal */
|
|
47
|
-
clipboard: {
|
|
48
|
-
system(): Cypress.Chainable<string>
|
|
49
|
-
primary(): Cypress.Chainable<string>
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
title: {
|
|
53
|
-
current(): Cypress.Chainable<string>
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/** The api that can be used in tests after a Neovim instance has been started. */
|
|
58
|
-
export type NeovimContext = {
|
|
59
|
-
/** Types text into the terminal, making the terminal application receive
|
|
60
|
-
* the keystrokes as input. Requires neovim to be running. */
|
|
61
|
-
typeIntoTerminal(text: string, options?: Partial<Cypress.TypeOptions>): void
|
|
62
|
-
|
|
63
|
-
/** Runs a shell command in a blocking manner, waiting for the command to
|
|
64
|
-
* finish before returning. Requires neovim to be running. */
|
|
65
|
-
runBlockingShellCommand(input: MyBlockingCommandClientInput): Cypress.Chainable<BlockingShellCommandOutput>
|
|
66
|
-
|
|
67
|
-
/** Runs a shell command in a blocking manner, waiting for the command to
|
|
68
|
-
* finish before returning. Requires neovim to be running. */
|
|
69
|
-
runLuaCode(input: LuaCodeClientInput): Cypress.Chainable<RunLuaCodeOutput>
|
|
70
|
-
|
|
71
|
-
/** Runs a Lua file in neovim after it has started. Can be used to keep
|
|
72
|
-
* complex lua logic in a separate file, still being able to run it after
|
|
73
|
-
* startup. This way additional tools like lua LSP servers, linters, etc. can
|
|
74
|
-
* be used to ensure the code is correct.
|
|
75
|
-
*/
|
|
76
|
-
doFile(input: MyRunLuaFileClientInput): Cypress.Chainable<RunExCommandOutput>
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Like runLuaCode, but waits until the given code (maybe using lua's return
|
|
80
|
-
* assert()) does not raise an error, and returns the first successful result.
|
|
81
|
-
*
|
|
82
|
-
* Useful for waiting until Neovim's internal state has changed in a way that
|
|
83
|
-
* means the test can continue executing. This can avoid timing issues that are
|
|
84
|
-
* otherwise hard to catch.
|
|
85
|
-
*/
|
|
86
|
-
waitForLuaCode(input: PollLuaCodeClientInput): Cypress.Chainable<RunLuaCodeOutput>
|
|
87
|
-
|
|
88
|
-
/** Run an ex command in neovim.
|
|
89
|
-
* @example "echo expand('%:.')" current file, relative to the cwd
|
|
90
|
-
*/
|
|
91
|
-
runExCommand(input: ExCommandClientInput): Cypress.Chainable<RunExCommandOutput>
|
|
92
|
-
|
|
93
|
-
/** The test directory, providing type-safe access to its file and directory structure */
|
|
94
|
-
dir: TestDirectory<MyTestDirectory>
|
|
95
|
-
|
|
96
|
-
/** Access to the clipboard of the terminal */
|
|
97
|
-
clipboard: {
|
|
98
|
-
system(): Cypress.Chainable<string>
|
|
99
|
-
primary(): Cypress.Chainable<string>
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
title: {
|
|
103
|
-
current(): Cypress.Chainable<string>
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/** Arguments for starting the neovim server. They are built based on your test
|
|
108
|
-
* environment in a type safe manner. */
|
|
109
|
-
export type MyStartNeovimServerArguments = OverrideProperties<
|
|
110
|
-
StartNeovimGenericArguments,
|
|
111
|
-
{
|
|
112
|
-
NVIM_APPNAME?: MyNeovimAppName
|
|
113
|
-
filename?: MyTestDirectoryFile | { openInVerticalSplits: MyTestDirectoryFile[] }
|
|
114
|
-
startupScriptModifications?: Array<MyNeovimConfigModification<MyTestDirectoryFile>>
|
|
115
|
-
}
|
|
116
|
-
>
|
|
117
|
-
|
|
118
|
-
export type MyRunLuaFileClientInput = OverrideProperties<RunLuaFileClientInput, { luaFile: MyTestDirectoryFile }>
|
|
119
|
-
|
|
120
|
-
Cypress.Commands.add("startNeovim", (startArguments?: MyStartNeovimServerArguments) => {
|
|
121
|
-
cy.window().then(async win => {
|
|
122
|
-
const underlyingNeovim: GenericNeovimBrowserApi = await win.startNeovim(
|
|
123
|
-
startArguments as StartNeovimGenericArguments
|
|
124
|
-
)
|
|
125
|
-
testNeovim = underlyingNeovim
|
|
126
|
-
|
|
127
|
-
// wrap everything so that Cypress can await all the commands
|
|
128
|
-
Cypress.Commands.addAll({
|
|
129
|
-
nvim_runBlockingShellCommand: underlyingNeovim.runBlockingShellCommand,
|
|
130
|
-
nvim_runExCommand: underlyingNeovim.runExCommand,
|
|
131
|
-
nvim_runLuaCode: underlyingNeovim.runLuaCode,
|
|
132
|
-
nvim_waitForLuaCode: underlyingNeovim.waitForLuaCode,
|
|
133
|
-
nvim_doFile: underlyingNeovim.doFile,
|
|
134
|
-
})
|
|
135
|
-
|
|
136
|
-
const api: NeovimContext = {
|
|
137
|
-
runBlockingShellCommand(input) {
|
|
138
|
-
return cy.nvim_runBlockingShellCommand(input)
|
|
139
|
-
},
|
|
140
|
-
runExCommand(input) {
|
|
141
|
-
return cy.nvim_runExCommand(input)
|
|
142
|
-
},
|
|
143
|
-
runLuaCode(input) {
|
|
144
|
-
return cy.nvim_runLuaCode(input)
|
|
145
|
-
},
|
|
146
|
-
doFile(input) {
|
|
147
|
-
return cy.nvim_doFile(input)
|
|
148
|
-
},
|
|
149
|
-
waitForLuaCode(input) {
|
|
150
|
-
return cy.nvim_waitForLuaCode(input)
|
|
151
|
-
},
|
|
152
|
-
typeIntoTerminal(text, options) {
|
|
153
|
-
cy.typeIntoTerminal(text, options)
|
|
154
|
-
},
|
|
155
|
-
dir: underlyingNeovim.dir as TestDirectory<MyTestDirectory>,
|
|
156
|
-
|
|
157
|
-
clipboard: {
|
|
158
|
-
primary() {
|
|
159
|
-
return cy.then(() => underlyingNeovim.clipboard.primary())
|
|
160
|
-
},
|
|
161
|
-
system() {
|
|
162
|
-
return cy.then(() => underlyingNeovim.clipboard.system())
|
|
163
|
-
},
|
|
164
|
-
},
|
|
165
|
-
|
|
166
|
-
title: {
|
|
167
|
-
current: () => cy.then(() => underlyingNeovim.title.get()),
|
|
168
|
-
},
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
return api
|
|
172
|
-
})
|
|
173
|
-
})
|
|
174
|
-
|
|
175
|
-
Cypress.Commands.add("nvim_isRunning", () => {
|
|
176
|
-
return cy.window().then(async _ => {
|
|
177
|
-
return !!testNeovim
|
|
178
|
-
})
|
|
179
|
-
})
|
|
180
|
-
|
|
181
|
-
Cypress.Commands.add("startTerminalApplication", (args: StartTerminalGenericArguments & BrowserTerminalSettings) => {
|
|
182
|
-
cy.window().then(async win => {
|
|
183
|
-
const terminal: GenericTerminalBrowserApi = await win.startTerminalApplication({
|
|
184
|
-
serverSettings: {
|
|
185
|
-
commandToRun: args.commandToRun,
|
|
186
|
-
additionalEnvironmentVariables: args.additionalEnvironmentVariables,
|
|
187
|
-
} satisfies AllKeys<StartTerminalGenericArguments>,
|
|
188
|
-
browserSettings: {
|
|
189
|
-
configureTerminal: args.configureTerminal,
|
|
190
|
-
} satisfies AllKeys<BrowserTerminalSettings>,
|
|
191
|
-
})
|
|
192
|
-
|
|
193
|
-
Cypress.Commands.addAll({
|
|
194
|
-
terminal_runBlockingShellCommand: terminal.runBlockingShellCommand,
|
|
195
|
-
})
|
|
196
|
-
|
|
197
|
-
const api: TerminalTestApplicationContext = {
|
|
198
|
-
dir: terminal.dir as TestDirectory<MyTestDirectory>,
|
|
199
|
-
runBlockingShellCommand(input) {
|
|
200
|
-
return cy.terminal_runBlockingShellCommand(input)
|
|
201
|
-
},
|
|
202
|
-
typeIntoTerminal(text, options) {
|
|
203
|
-
cy.typeIntoTerminal(text, options)
|
|
204
|
-
},
|
|
205
|
-
clipboard: {
|
|
206
|
-
primary: () => cy.then(() => terminal.clipboard.primary()),
|
|
207
|
-
system: () => cy.then(() => terminal.clipboard.system()),
|
|
208
|
-
},
|
|
209
|
-
title: {
|
|
210
|
-
current: () => cy.then(() => terminal.title.get()),
|
|
211
|
-
},
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
return api
|
|
215
|
-
})
|
|
216
|
-
})
|
|
217
|
-
|
|
218
|
-
Cypress.Commands.add("typeIntoTerminal", (text: string, options?: Partial<Cypress.TypeOptions>) => {
|
|
219
|
-
// the syntax for keys is described here:
|
|
220
|
-
// https://docs.cypress.io/api/commands/type
|
|
221
|
-
cy.get("textarea").focus().type(text, options)
|
|
222
|
-
})
|
|
223
|
-
|
|
224
|
-
let testNeovim: GenericNeovimBrowserApi | undefined
|
|
225
|
-
|
|
226
|
-
before(function () {
|
|
227
|
-
// disable Cypress's default behavior of logging all XMLHttpRequests and
|
|
228
|
-
// fetches to the Command Log
|
|
229
|
-
// https://gist.github.com/simenbrekken/3d2248f9e50c1143bf9dbe02e67f5399?permalink_comment_id=4615046#gistcomment-4615046
|
|
230
|
-
cy.intercept({ resourceType: /xhr|fetch/ }, { log: false })
|
|
231
|
-
})
|
|
232
|
-
|
|
233
|
-
export type MyBlockingCommandClientInput = OverrideProperties<
|
|
234
|
-
BlockingCommandClientInput,
|
|
235
|
-
{ cwdRelative?: MyTestDirectoryFile | undefined }
|
|
236
|
-
>
|
|
237
|
-
|
|
238
|
-
declare global {
|
|
239
|
-
namespace Cypress {
|
|
240
|
-
interface Chainable {
|
|
241
|
-
startNeovim(args?: MyStartNeovimServerArguments): Chainable<NeovimContext>
|
|
242
|
-
startTerminalApplication(
|
|
243
|
-
args: StartTerminalGenericArguments & BrowserTerminalSettings
|
|
244
|
-
): Chainable<TerminalTestApplicationContext>
|
|
245
|
-
|
|
246
|
-
/** Types text into the terminal, making the terminal application receive
|
|
247
|
-
* the keystrokes as input. Requires neovim to be running. */
|
|
248
|
-
typeIntoTerminal(text: string, options?: Partial<Cypress.TypeOptions>): Chainable<void>
|
|
249
|
-
|
|
250
|
-
/** Runs a shell command in a blocking manner, waiting for the command to
|
|
251
|
-
* finish before returning. Requires neovim to be running. */
|
|
252
|
-
nvim_runBlockingShellCommand(input: MyBlockingCommandClientInput): Chainable<BlockingShellCommandOutput>
|
|
253
|
-
|
|
254
|
-
nvim_runLuaCode(input: LuaCodeClientInput): Chainable<RunLuaCodeOutput>
|
|
255
|
-
nvim_doFile(input: MyRunLuaFileClientInput): Chainable<RunExCommandOutput>
|
|
256
|
-
nvim_waitForLuaCode(input: PollLuaCodeClientInput): Chainable<RunLuaCodeOutput>
|
|
257
|
-
|
|
258
|
-
/** Run an ex command in neovim.
|
|
259
|
-
* @example "echo expand('%:.')" current file, relative to the cwd
|
|
260
|
-
*/
|
|
261
|
-
nvim_runExCommand(input: ExCommandClientInput): Chainable<RunExCommandOutput>
|
|
262
|
-
|
|
263
|
-
/** Returns true if neovim is running. Useful to conditionally run
|
|
264
|
-
* afterEach actions based on whether it's running. */
|
|
265
|
-
nvim_isRunning(): Chainable<boolean>
|
|
266
|
-
|
|
267
|
-
terminal_runBlockingShellCommand(input: MyBlockingCommandClientInput): Chainable<BlockingShellCommandOutput>
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
afterEach(async () => {
|
|
273
|
-
testNeovim = undefined
|
|
274
|
-
})
|
|
275
|
-
`;
|
|
8
|
+
const templatePath = require.resolve("#tui-sandbox-template");
|
|
9
|
+
let text = readFileSync(templatePath, "utf-8");
|
|
276
10
|
const options = await resolveConfig(__filename);
|
|
277
11
|
text = await format(text, { ...options, parser: "typescript" });
|
|
278
12
|
return text;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contents.js","sourceRoot":"","sources":["../../../../src/server/cypress-support/contents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAEnC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"contents.js","sourceRoot":"","sources":["../../../../src/server/cypress-support/contents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAEnC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAE9C,MAAM,CAAC,KAAK,UAAU,gCAAgC;IACpD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAA;IAC7D,IAAI,IAAI,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAE9C,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,CAAA;IAC/C,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAA;IAE/D,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -15,9 +15,9 @@ export function getDirectoryTree(path) {
|
|
|
15
15
|
hash: false,
|
|
16
16
|
size: false,
|
|
17
17
|
sizeInBytes: false,
|
|
18
|
-
}, file => {
|
|
18
|
+
}, (file) => {
|
|
19
19
|
allFiles.push(file);
|
|
20
|
-
}, dir => {
|
|
20
|
+
}, (dir) => {
|
|
21
21
|
allFiles.push(dir);
|
|
22
22
|
}); // https://github.com/euberdeveloper/dree/pull/51
|
|
23
23
|
return { dree: result ?? undefined, allFiles };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/dirtree/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,MAAM,GAAG,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAA;AAG3C;yEACyE;AACzE,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,QAAQ,GAAW,EAAE,CAAA;IAC3B,MAAM,MAAM,GAAG,IAAI,CACjB,IAAI,EACJ;QACE,OAAO,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC/B,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,KAAK;KACnB,EACD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/dirtree/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,7 +50,7 @@ describe("DisposableSingleApplication", () => {
|
|
|
50
50
|
const app = new TestDisposableSingleApplication();
|
|
51
51
|
await app.startNextAndKillCurrent(async () => fakeApp);
|
|
52
52
|
fakeApp.untilExit = Promise.reject(new Error("fake error"));
|
|
53
|
-
await expect(app.untilExit()).rejects.
|
|
53
|
+
await expect(app.untilExit()).rejects.toThrow(new Error("fake error"));
|
|
54
54
|
});
|
|
55
55
|
});
|
|
56
56
|
describe("disposing", () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DisposableSingleApplication.test.js","sourceRoot":"","sources":["../../../../src/server/utilities/DisposableSingleApplication.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"DisposableSingleApplication.test.js","sourceRoot":"","sources":["../../../../src/server/utilities/DisposableSingleApplication.test.ts"],"names":[],"mappings":"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"}
|