

























@@ -3,6 +3,7 @@ import {
33POSIX_INLINE_COMMAND_FLAGS,
44POWERSHELL_INLINE_COMMAND_FLAGS,
55resolveInlineCommandMatch,
6+resolvePowerShellInlineCommandMatch,
67} from "./shell-inline-command.js";
7889describe("resolveInlineCommandMatch", () => {
@@ -31,6 +32,30 @@ describe("resolveInlineCommandMatch", () => {
3132flags: POWERSHELL_INLINE_COMMAND_FLAGS,
3233expected: { command: "script.ps1", valueTokenIndex: 2 },
3334},
35+{
36+name: "extracts the next token for PowerShell -ec",
37+argv: ["pwsh", "-ec", "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA"],
38+flags: POWERSHELL_INLINE_COMMAND_FLAGS,
39+expected: { command: "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA", valueTokenIndex: 2 },
40+},
41+{
42+name: "extracts the next token for PowerShell -EC",
43+argv: ["pwsh", "-EC", "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA"],
44+flags: POWERSHELL_INLINE_COMMAND_FLAGS,
45+expected: { command: "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA", valueTokenIndex: 2 },
46+},
47+{
48+name: "extracts the next token for PowerShell encoded-command prefixes",
49+argv: ["pwsh", "-en", "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA"],
50+flags: POWERSHELL_INLINE_COMMAND_FLAGS,
51+expected: { command: "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA", valueTokenIndex: 2 },
52+},
53+{
54+name: "extracts the next token for PowerShell slash switch forms",
55+argv: ["pwsh", "/ec", "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA"],
56+flags: POWERSHELL_INLINE_COMMAND_FLAGS,
57+expected: { command: "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA", valueTokenIndex: 2 },
58+},
3459{
3560name: "supports combined -c forms when enabled",
3661argv: ["sh", "-cecho hi"],
@@ -83,4 +108,81 @@ describe("resolveInlineCommandMatch", () => {
83108valueTokenIndex: null,
84109});
85110});
111+112+it.each([
113+{
114+name: "stops at an omitted PowerShell script file before script args",
115+argv: ["pwsh", "script.ps1", "-en", "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA"],
116+expected: { command: null, valueTokenIndex: null },
117+},
118+{
119+name: "skips PowerShell option values before encoded-command prefixes",
120+argv: [
121+"pwsh",
122+"-WorkingDirectory",
123+"/tmp/project",
124+"-en",
125+"VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA",
126+],
127+expected: { command: "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA", valueTokenIndex: 4 },
128+},
129+{
130+name: "skips abbreviated PowerShell window style values before slash encoded command",
131+argv: ["pwsh", "-win", "hidden", "/ec", "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA"],
132+expected: { command: "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA", valueTokenIndex: 4 },
133+},
134+{
135+name: "skips abbreviated PowerShell working directory values before slash encoded command",
136+argv: [
137+"pwsh",
138+"-WorkingDir",
139+"/tmp/project",
140+"/ec",
141+"VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA",
142+],
143+expected: { command: "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA", valueTokenIndex: 4 },
144+},
145+{
146+name: "skips PowerShell input format alias values before encoded-command prefixes",
147+argv: ["pwsh", "-if", "XML", "-EncodedCommand", "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA"],
148+expected: { command: "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA", valueTokenIndex: 4 },
149+},
150+{
151+name: "skips slash PowerShell input format alias values before slash encoded command",
152+argv: ["pwsh", "/if", "XML", "/ec", "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA"],
153+expected: { command: "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA", valueTokenIndex: 4 },
154+},
155+{
156+name: "skips PowerShell configuration name values before encoded-command prefixes",
157+argv: ["pwsh", "-config", "SomeConfig", "-ec", "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA"],
158+expected: { command: "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA", valueTokenIndex: 4 },
159+},
160+{
161+name: "skips PowerShell custom pipe name values before encoded-command prefixes",
162+argv: ["pwsh", "-cus", "pipe-name", "-ec", "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA"],
163+expected: { command: "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA", valueTokenIndex: 4 },
164+},
165+{
166+name: "extracts the command tail for PowerShell command-with-args",
167+argv: ["pwsh", "-cwa", "Write-Output", "hi"],
168+expected: { command: "Write-Output hi", valueTokenIndex: 2 },
169+},
170+{
171+name: "extracts PowerShell slash switch forms before script file binding",
172+argv: ["pwsh", "/ec", "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA"],
173+expected: { command: "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA", valueTokenIndex: 2 },
174+},
175+{
176+name: "keeps scanning after PowerShell slash switches",
177+argv: ["pwsh", "/NoProfile", "/ec", "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA"],
178+expected: { command: "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA", valueTokenIndex: 3 },
179+},
180+{
181+name: "stops at slash paths before PowerShell script args",
182+argv: ["/usr/bin/pwsh", "/tmp/script.ps1", "/ec", "VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIABoAGkA"],
183+expected: { command: null, valueTokenIndex: null },
184+},
185+])("$name", ({ argv, expected }) => {
186+expect(resolvePowerShellInlineCommandMatch(argv)).toEqual(expected);
187+});
86188});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。