@tui-sandbox/library 7.7.1 → 8.0.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/CHANGELOG.md +16 -0
- package/dist/browser/assets/{index-DpW-bZpc.js → index-_30KjjEK.js} +6 -6
- package/dist/browser/index.html +1 -1
- package/dist/src/browser/neovim-client.d.ts +7 -4
- package/dist/src/browser/neovim-client.js +13 -10
- package/dist/src/server/cypress-support/contents.js +57 -36
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/browser/neovim-client.ts +22 -19
- package/src/server/cypress-support/contents.ts +57 -36
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-_30KjjEK.js"></script>
|
|
7
7
|
<link rel="stylesheet" crossorigin href="/assets/index-D6fBrqAi.css">
|
|
8
8
|
</head>
|
|
9
9
|
<body>
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import type { BlockingCommandClientInput, ExCommandClientInput, LuaCodeClientInput } from "../server/server.js";
|
|
2
2
|
import type { BlockingShellCommandOutput, RunExCommandOutput, RunLuaCodeOutput, StartNeovimGenericArguments, TestDirectory } from "../server/types.js";
|
|
3
|
+
export type GenericNeovimBrowserApi = {
|
|
4
|
+
runBlockingShellCommand(input: BlockingCommandClientInput): Promise<BlockingShellCommandOutput>;
|
|
5
|
+
runLuaCode(input: LuaCodeClientInput): Promise<RunLuaCodeOutput>;
|
|
6
|
+
runExCommand(input: ExCommandClientInput): Promise<RunExCommandOutput>;
|
|
7
|
+
dir: TestDirectory;
|
|
8
|
+
};
|
|
3
9
|
declare global {
|
|
4
10
|
interface Window {
|
|
5
|
-
startNeovim(startArguments?: StartNeovimGenericArguments): Promise<
|
|
6
|
-
runBlockingShellCommand(input: BlockingCommandClientInput): Promise<BlockingShellCommandOutput>;
|
|
7
|
-
runLuaCode(input: LuaCodeClientInput): Promise<RunLuaCodeOutput>;
|
|
8
|
-
runExCommand(input: ExCommandClientInput): Promise<RunExCommandOutput>;
|
|
11
|
+
startNeovim(startArguments?: StartNeovimGenericArguments): Promise<GenericNeovimBrowserApi>;
|
|
9
12
|
}
|
|
10
13
|
}
|
|
@@ -11,14 +11,17 @@ window.startNeovim = async function (startArgs) {
|
|
|
11
11
|
filename: startArgs?.filename ?? "initial-file.txt",
|
|
12
12
|
startupScriptModifications: startArgs?.startupScriptModifications ?? [],
|
|
13
13
|
});
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
14
|
+
const neovimBrowserApi = {
|
|
15
|
+
runBlockingShellCommand(input) {
|
|
16
|
+
return client.runBlockingShellCommand(input);
|
|
17
|
+
},
|
|
18
|
+
runLuaCode(input) {
|
|
19
|
+
return client.runLuaCode(input);
|
|
20
|
+
},
|
|
21
|
+
runExCommand(input) {
|
|
22
|
+
return client.runExCommand(input);
|
|
23
|
+
},
|
|
24
|
+
dir: testDirectory,
|
|
25
|
+
};
|
|
26
|
+
return neovimBrowserApi;
|
|
24
27
|
};
|
|
@@ -21,17 +21,30 @@ import type {
|
|
|
21
21
|
TestDirectory,
|
|
22
22
|
} from "@tui-sandbox/library/dist/src/server/types"
|
|
23
23
|
import type { OverrideProperties } from "type-fest"
|
|
24
|
+
import type { GenericNeovimBrowserApi } from "../../../library/src/browser/neovim-client.ts"
|
|
24
25
|
import type { MyTestDirectory, MyTestDirectoryFile } from "../../MyTestDirectory"
|
|
25
26
|
|
|
26
|
-
|
|
27
|
+
/** The api that can be used in tests after a Neovim instance has been started. */
|
|
28
|
+
export type NeovimContext = {
|
|
29
|
+
/** Types text into the terminal, making the terminal application receive
|
|
30
|
+
* the keystrokes as input. Requires neovim to be running. */
|
|
31
|
+
typeIntoTerminal(text: string, options?: Partial<Cypress.TypeOptions>): void
|
|
27
32
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
/** Runs a shell command in a blocking manner, waiting for the command to
|
|
34
|
+
* finish before returning. Requires neovim to be running. */
|
|
35
|
+
runBlockingShellCommand(input: BlockingCommandClientInput): Cypress.Chainable<BlockingShellCommandOutput>
|
|
36
|
+
|
|
37
|
+
/** Runs a shell command in a blocking manner, waiting for the command to
|
|
38
|
+
* finish before returning. Requires neovim to be running. */
|
|
39
|
+
runLuaCode(input: LuaCodeClientInput): Cypress.Chainable<RunLuaCodeOutput>
|
|
40
|
+
|
|
41
|
+
/** Run an ex command in neovim.
|
|
42
|
+
* @example "echo expand('%:.')" current file, relative to the cwd
|
|
43
|
+
*/
|
|
44
|
+
runExCommand(input: ExCommandClientInput): Cypress.Chainable<RunExCommandOutput>
|
|
45
|
+
|
|
46
|
+
/** The test directory, providing type-safe access to its file and directory structure */
|
|
47
|
+
dir: TestDirectory<MyTestDirectory>
|
|
35
48
|
}
|
|
36
49
|
|
|
37
50
|
/** Arguments for starting the neovim server. They are built based on your test
|
|
@@ -40,21 +53,41 @@ type MyStartNeovimServerArguments = OverrideProperties<
|
|
|
40
53
|
StartNeovimGenericArguments,
|
|
41
54
|
{
|
|
42
55
|
filename?: MyTestDirectoryFile | { openInVerticalSplits: MyTestDirectoryFile[] }
|
|
43
|
-
// NOTE: right now you need to make sure the config-modifications directory exists in your test directory
|
|
44
56
|
startupScriptModifications?: Array<keyof MyTestDirectory["config-modifications"]["contents"]>
|
|
45
57
|
}
|
|
46
58
|
>
|
|
47
59
|
|
|
48
60
|
Cypress.Commands.add("startNeovim", (startArguments?: MyStartNeovimServerArguments) => {
|
|
49
61
|
cy.window().then(async win => {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
62
|
+
const underlyingNeovim: GenericNeovimBrowserApi = await win.startNeovim(
|
|
63
|
+
startArguments as StartNeovimGenericArguments
|
|
64
|
+
)
|
|
65
|
+
testNeovim = underlyingNeovim
|
|
66
|
+
|
|
67
|
+
// wrap everything so that Cypress can await all the commands
|
|
68
|
+
Cypress.Commands.addAll({
|
|
69
|
+
nvim_runBlockingShellCommand: underlyingNeovim.runBlockingShellCommand,
|
|
70
|
+
nvim_runExCommand: underlyingNeovim.runExCommand,
|
|
71
|
+
nvim_runLuaCode: underlyingNeovim.runLuaCode,
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
const api: NeovimContext = {
|
|
75
|
+
runBlockingShellCommand(input) {
|
|
76
|
+
return cy.nvim_runBlockingShellCommand(input)
|
|
77
|
+
},
|
|
78
|
+
runExCommand(input) {
|
|
79
|
+
return cy.nvim_runExCommand(input)
|
|
80
|
+
},
|
|
81
|
+
runLuaCode(input) {
|
|
82
|
+
return cy.nvim_runLuaCode(input)
|
|
83
|
+
},
|
|
84
|
+
typeIntoTerminal(text, options) {
|
|
85
|
+
cy.typeIntoTerminal(text, options)
|
|
86
|
+
},
|
|
87
|
+
dir: underlyingNeovim.dir as TestDirectory<MyTestDirectory>,
|
|
88
|
+
}
|
|
54
89
|
|
|
55
|
-
|
|
56
|
-
cy.window().then(async win => {
|
|
57
|
-
return await win.runBlockingShellCommand(input)
|
|
90
|
+
return api
|
|
58
91
|
})
|
|
59
92
|
})
|
|
60
93
|
|
|
@@ -64,19 +97,7 @@ Cypress.Commands.add("typeIntoTerminal", (text: string, options?: Partial<Cypres
|
|
|
64
97
|
cy.get("textarea").focus().type(text, options)
|
|
65
98
|
})
|
|
66
99
|
|
|
67
|
-
|
|
68
|
-
cy.window().then(async win => {
|
|
69
|
-
return await win.runLuaCode(input)
|
|
70
|
-
})
|
|
71
|
-
})
|
|
72
|
-
|
|
73
|
-
Cypress.Commands.add("runExCommand", (input: ExCommandClientInput) => {
|
|
74
|
-
cy.window().then(async win => {
|
|
75
|
-
return await win.runExCommand(input)
|
|
76
|
-
})
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
let testWindow: Window | undefined
|
|
100
|
+
let testNeovim: GenericNeovimBrowserApi | undefined
|
|
80
101
|
|
|
81
102
|
before(function () {
|
|
82
103
|
// disable Cypress's default behavior of logging all XMLHttpRequests and
|
|
@@ -96,31 +117,31 @@ declare global {
|
|
|
96
117
|
|
|
97
118
|
/** Runs a shell command in a blocking manner, waiting for the command to
|
|
98
119
|
* finish before returning. Requires neovim to be running. */
|
|
99
|
-
|
|
120
|
+
nvim_runBlockingShellCommand(input: BlockingCommandClientInput): Chainable<BlockingShellCommandOutput>
|
|
100
121
|
|
|
101
|
-
|
|
122
|
+
nvim_runLuaCode(input: LuaCodeClientInput): Chainable<RunLuaCodeOutput>
|
|
102
123
|
|
|
103
124
|
/** Run an ex command in neovim.
|
|
104
125
|
* @example "echo expand('%:.')" current file, relative to the cwd
|
|
105
126
|
*/
|
|
106
|
-
|
|
127
|
+
nvim_runExCommand(input: ExCommandClientInput): Chainable<RunExCommandOutput>
|
|
107
128
|
}
|
|
108
129
|
}
|
|
109
130
|
}
|
|
110
131
|
|
|
111
132
|
afterEach(async () => {
|
|
112
|
-
if (!
|
|
133
|
+
if (!testNeovim) return
|
|
113
134
|
|
|
114
135
|
let timeoutId: NodeJS.Timeout | undefined = undefined
|
|
115
136
|
const timeout = new Promise<void>((_, reject) => {
|
|
116
137
|
timeoutId = setTimeout(() => {
|
|
117
|
-
Cypress.log({ name: "timeout when waiting for :messages to finish. Neovim might be stuck." })
|
|
118
|
-
reject(new Error("timeout when waiting for :messages to finish. Neovim might be stuck."))
|
|
138
|
+
Cypress.log({ name: "timeout when waiting for :messages to finish. Neovim might be stuck or showing a message." })
|
|
139
|
+
reject(new Error("timeout when waiting for :messages to finish. Neovim might be stuck or showing a message."))
|
|
119
140
|
}, 5_000)
|
|
120
141
|
})
|
|
121
142
|
|
|
122
143
|
try {
|
|
123
|
-
await Promise.race([timeout,
|
|
144
|
+
await Promise.race([timeout, testNeovim.runExCommand({ command: "messages" })])
|
|
124
145
|
} finally {
|
|
125
146
|
clearTimeout(timeoutId) // Ensure the timeout is cleared
|
|
126
147
|
}
|