Skip to content

Commit 3353df0

Browse files
Razmo99JustinGrote
authored andcommitted
New Method and tests to check if a script ast contains dot sourcing
1 parent 4d8829a commit 3353df0

File tree

4 files changed

+106
-66
lines changed

4 files changed

+106
-66
lines changed

src/PowerShellEditorServices/Services/PowerShell/Refactoring/Utilities.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,16 @@ public static FunctionDefinitionAst GetFunctionDefByCommandAst(string OldName, i
106106
return CorrectDefinition;
107107
}
108108

109+
public static bool AssertContainsDotSourced(Ast ScriptAst){
110+
Ast dotsourced = ScriptAst.Find(ast =>{
111+
return ast is CommandAst commandAst && commandAst.InvocationOperator == TokenKind.Dot;
112+
},true);
113+
if (dotsourced != null)
114+
{
115+
return true;
116+
}
117+
return false;
118+
}
109119
public static Ast GetAst(int StartLineNumber, int StartColumnNumber, Ast Ast)
110120
{
111121
Ast token = null;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
function New-User {
2+
param (
3+
[string]$Username,
4+
[string]$password
5+
)
6+
write-host $username + $password
7+
8+
$splat= @{
9+
Username = "JohnDeer"
10+
Password = "SomePassword"
11+
}
12+
New-User @splat
13+
}
14+
15+
$UserDetailsSplat= @{
16+
Username = "JohnDoe"
17+
Password = "SomePassword"
18+
}
19+
New-User @UserDetailsSplat
20+
21+
New-User -Username "JohnDoe" -Password "SomePassword"
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
$sb = { $var = 30 }
2+
$shouldDotSource = Get-Random -Minimum 0 -Maximum 2
3+
if ($shouldDotSource) {
4+
. $sb
5+
} else {
6+
& $sb
7+
}

test/PowerShellEditorServices.Test/Refactoring/RefactorUtilitiesTests.cs

Lines changed: 68 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -43,131 +43,133 @@ public void Dispose()
4343
[Fact]
4444
public void GetVariableExpressionAst()
4545
{
46-
RenameSymbolParams request = new(){
47-
Column=11,
48-
Line=15,
49-
RenameTo="Renamed",
50-
FileName="TestDetection.ps1"
46+
RenameSymbolParams request = new()
47+
{
48+
Column = 11,
49+
Line = 15,
50+
RenameTo = "Renamed",
51+
FileName = "TestDetection.ps1"
5152
};
5253
ScriptFile scriptFile = GetTestScript(request.FileName);
5354

54-
Ast symbol = Utilities.GetAst(request.Line,request.Column,scriptFile.ScriptAst);
55-
Assert.Equal(15,symbol.Extent.StartLineNumber);
56-
Assert.Equal(1,symbol.Extent.StartColumnNumber);
55+
Ast symbol = Utilities.GetAst(request.Line, request.Column, scriptFile.ScriptAst);
56+
Assert.Equal(15, symbol.Extent.StartLineNumber);
57+
Assert.Equal(1, symbol.Extent.StartColumnNumber);
5758

5859
}
5960
[Fact]
6061
public void GetVariableExpressionStartAst()
6162
{
62-
RenameSymbolParams request = new(){
63-
Column=1,
64-
Line=15,
65-
RenameTo="Renamed",
66-
FileName="TestDetection.ps1"
63+
RenameSymbolParams request = new()
64+
{
65+
Column = 1,
66+
Line = 15,
67+
RenameTo = "Renamed",
68+
FileName = "TestDetection.ps1"
6769
};
6870
ScriptFile scriptFile = GetTestScript(request.FileName);
6971

70-
Ast symbol = Utilities.GetAst(request.Line,request.Column,scriptFile.ScriptAst);
71-
Assert.Equal(15,symbol.Extent.StartLineNumber);
72-
Assert.Equal(1,symbol.Extent.StartColumnNumber);
72+
Ast symbol = Utilities.GetAst(request.Line, request.Column, scriptFile.ScriptAst);
73+
Assert.Equal(15, symbol.Extent.StartLineNumber);
74+
Assert.Equal(1, symbol.Extent.StartColumnNumber);
7375

7476
}
7577
[Fact]
7678
public void GetVariableWithinParameterAst()
7779
{
78-
RenameSymbolParams request = new(){
79-
Column=21,
80-
Line=3,
81-
RenameTo="Renamed",
82-
FileName="TestDetection.ps1"
80+
RenameSymbolParams request = new()
81+
{
82+
Column = 21,
83+
Line = 3,
84+
RenameTo = "Renamed",
85+
FileName = "TestDetection.ps1"
8386
};
8487
ScriptFile scriptFile = GetTestScript(request.FileName);
8588

86-
Ast symbol = Utilities.GetAst(request.Line,request.Column,scriptFile.ScriptAst);
87-
Assert.Equal(3,symbol.Extent.StartLineNumber);
88-
Assert.Equal(17,symbol.Extent.StartColumnNumber);
89+
Ast symbol = Utilities.GetAst(request.Line, request.Column, scriptFile.ScriptAst);
90+
Assert.Equal(3, symbol.Extent.StartLineNumber);
91+
Assert.Equal(17, symbol.Extent.StartColumnNumber);
8992

9093
}
9194
[Fact]
9295
public void GetHashTableKey()
9396
{
94-
RenameSymbolParams request = new(){
95-
Column=9,
96-
Line=16,
97-
RenameTo="Renamed",
98-
FileName="TestDetection.ps1"
97+
RenameSymbolParams request = new()
98+
{
99+
Column = 9,
100+
Line = 16,
101+
RenameTo = "Renamed",
102+
FileName = "TestDetection.ps1"
99103
};
100104
ScriptFile scriptFile = GetTestScript(request.FileName);
101105

102-
Ast symbol = Utilities.GetAst(request.Line,request.Column,scriptFile.ScriptAst);
103-
Assert.Equal(16,symbol.Extent.StartLineNumber);
104-
Assert.Equal(5,symbol.Extent.StartColumnNumber);
106+
Ast symbol = Utilities.GetAst(request.Line, request.Column, scriptFile.ScriptAst);
107+
Assert.Equal(16, symbol.Extent.StartLineNumber);
108+
Assert.Equal(5, symbol.Extent.StartColumnNumber);
105109

106110
}
107111
[Fact]
108112
public void GetVariableWithinCommandAst()
109113
{
110-
RenameSymbolParams request = new(){
111-
Column=29,
112-
Line=6,
113-
RenameTo="Renamed",
114-
FileName="TestDetection.ps1"
114+
RenameSymbolParams request = new()
115+
{
116+
Column = 29,
117+
Line = 6,
118+
RenameTo = "Renamed",
119+
FileName = "TestDetection.ps1"
115120
};
116121
ScriptFile scriptFile = GetTestScript(request.FileName);
117122

118-
Ast symbol = Utilities.GetAst(request.Line,request.Column,scriptFile.ScriptAst);
119-
Assert.Equal(6,symbol.Extent.StartLineNumber);
120-
Assert.Equal(28,symbol.Extent.StartColumnNumber);
123+
Ast symbol = Utilities.GetAst(request.Line, request.Column, scriptFile.ScriptAst);
124+
Assert.Equal(6, symbol.Extent.StartLineNumber);
125+
Assert.Equal(28, symbol.Extent.StartColumnNumber);
121126

122127
}
123128
[Fact]
124129
public void GetCommandParameterAst()
125130
{
126-
RenameSymbolParams request = new(){
127-
Column=12,
128-
Line=21,
129-
RenameTo="Renamed",
130-
FileName="TestDetection.ps1"
131-
};
132-
ScriptFile scriptFile = GetTestScript(request.FileName);
133-
134-
Ast symbol = Utilities.GetAst(request.Line,request.Column,scriptFile.ScriptAst);
135-
Assert.Equal(21,symbol.Extent.StartLineNumber);
136-
Assert.Equal(10,symbol.Extent.StartColumnNumber);
137-
138-
}
139-
[Fact]
140-
public void GetFunctionDefinitionAst()
141-
{
142-
RenameSymbolParams request = new(){
143-
Column=12,
144-
Line=1,
145-
RenameTo="Renamed",
146-
FileName="TestDetection.ps1"
131+
RenameSymbolParams request = new()
132+
{
133+
Column = 12,
134+
Line = 21,
135+
RenameTo = "Renamed",
136+
FileName = "TestDetection.ps1"
147137
};
148138
ScriptFile scriptFile = GetTestScript(request.FileName);
149139

150-
Ast symbol = Utilities.GetAst(request.Line,request.Column,scriptFile.ScriptAst);
151-
Assert.Equal(1,symbol.Extent.StartLineNumber);
152-
Assert.Equal(1,symbol.Extent.StartColumnNumber);
140+
Ast symbol = Utilities.GetAst(request.Line, request.Column, scriptFile.ScriptAst);
141+
Assert.Equal(21, symbol.Extent.StartLineNumber);
142+
Assert.Equal(10, symbol.Extent.StartColumnNumber);
153143

154144
}
155145
[Fact]
156146
public void GetFunctionDefinitionAst()
157147
{
158148
RenameSymbolParams request = new()
159149
{
160-
Column = 16,
150+
Column = 12,
161151
Line = 1,
162152
RenameTo = "Renamed",
163153
FileName = "TestDetection.ps1"
164154
};
165155
ScriptFile scriptFile = GetTestScript(request.FileName);
166156

167157
Ast symbol = Utilities.GetAst(request.Line, request.Column, scriptFile.ScriptAst);
168-
Assert.IsType<FunctionDefinitionAst>(symbol);
169158
Assert.Equal(1, symbol.Extent.StartLineNumber);
170159
Assert.Equal(1, symbol.Extent.StartColumnNumber);
160+
161+
}
162+
[Fact]
163+
public void AssertContainsDotSourcingTrue()
164+
{
165+
ScriptFile scriptFile = GetTestScript("TestDotSourcingTrue.ps1");
166+
Assert.True(Utilities.AssertContainsDotSourced(scriptFile.ScriptAst));
167+
}
168+
[Fact]
169+
public void AssertContainsDotSourcingFalse()
170+
{
171+
ScriptFile scriptFile = GetTestScript("TestDotSourcingFalse.ps1");
172+
Assert.False(Utilities.AssertContainsDotSourced(scriptFile.ScriptAst));
171173
}
172174
}
173175
}

0 commit comments

Comments
 (0)