Skip to content

Commit bca6585

Browse files
committed
Add upper and lower tests
1 parent 63d55d1 commit bca6585

File tree

3 files changed

+114
-12
lines changed

3 files changed

+114
-12
lines changed

tests/pester/Syntax.Tests.ps1

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,14 @@ Describe "Syntax highlighting" {
66

77
Context "test-file.ps1" {
88

9-
$tokensFileName = "test-file.ps1.tokens"
109
$tokensFolder = Join-Path $sublimeRoot "Data\Packages\User\UnitTesting\tokens"
11-
$scopesFile = Join-Path $tokensFolder $tokensFileName
10+
$scopesFile = Join-Path $tokensFolder "test-file.ps1.tokens"
1211

1312
$testFile = Resolve-Path "$PSScriptRoot\..\samples\test-file.ps1"
1413

1514
if (-not (Test-Path $scopesFile)) {
16-
Write-Warning @'
17-
This Pester UT file consumes scopes generated by python unit test Test_TokenGenerator.testGetTokens .
18-
You need to run python tests first to make it work.
19-
'@
20-
return
15+
Write-Warning 'This Pester UT suite consumes scopes generated by python unit test Test_TokenGenerator. You need to run python tests first.'
16+
return
2117
}
2218

2319
# splitted in two lines, because of a bug in Sort-Object
@@ -32,6 +28,9 @@ You need to run python tests first to make it work.
3228
$psScopes | %{
3329
while ($stScopes[$stIndex].endOffset -le $_.startOffset) {
3430
$stIndex++
31+
if ($stIndex -ge $stScopes.Length) {
32+
break
33+
}
3534
}
3635

3736
$stScope = $stScopes[$stIndex]
@@ -65,5 +64,23 @@ You need to run python tests first to make it work.
6564
# TODO: These are bugs, make it 0
6665
$errorCounter | Should be @(0..4)
6766
}
67+
68+
It "produces same tokens for lower case" {
69+
$stLowScopes = Get-SublimeScopesFromFile (Join-Path $tokensFolder "test-file.ps1.lower.tokens" )
70+
$diff = Compare-Object $stScopes $stLowScopes
71+
if ($diff) {
72+
$diff | Write-DiffAsWarning
73+
}
74+
$diff | Should Be $null
75+
}
76+
77+
It "produces same tokens for upper case" {
78+
$stUpperScopes = Get-SublimeScopesFromFile (Join-Path $tokensFolder "test-file.ps1.upper.tokens" )
79+
$diff = Compare-Object $stScopes $stUpperScopes
80+
if ($diff) {
81+
$diff | Write-DiffAsWarning
82+
}
83+
$diff | Should Be $null
84+
}
6885
}
6986
}

tests/pester/SyntaxHelper.psm1

Lines changed: 76 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,19 @@ function Get-TokensFromFile
1313
return $tokens
1414
}
1515

16+
function Get-SublimeScopesFromFile
17+
{
18+
[CmdletBinding()]
19+
param(
20+
[Parameter(ValueFromPipeline)]
21+
[string] $filePath
22+
)
23+
24+
# splitted in two lines, because of a bug in Sort-Object
25+
$scopes = cat -Raw $filePath | ConvertFrom-Json
26+
$scopes = $scopes | sort -Property @('startOffset', 'endOffset')
27+
return $scopes
28+
}
1629

1730
function Get-TokensFromInput
1831
{
@@ -29,6 +42,53 @@ function Get-TokensFromInput
2942
return $tokens
3043
}
3144

45+
function Select-TokenByOffset
46+
{
47+
[CmdletBinding()]
48+
param(
49+
[Parameter(ValueFromPipeline)]
50+
[System.Management.Automation.Language.Token] $token,
51+
[int] $offset
52+
)
53+
54+
process
55+
{
56+
if (((Get-TokenStartOffset $token) -le $offset) -and ((Get-TokenEndOffset $token) -gt $offset)) {
57+
return $token
58+
}
59+
}
60+
}
61+
62+
function Get-TokenStartOffset
63+
{
64+
[CmdletBinding()]
65+
param(
66+
[Parameter(ValueFromPipeline)]
67+
[System.Management.Automation.Language.Token] $token
68+
)
69+
70+
process
71+
{
72+
# Adjust offsets for CRLF
73+
return $token.Extent.StartOffset - $token.Extent.StartLineNumber + 1
74+
}
75+
}
76+
77+
function Get-TokenEndOffset
78+
{
79+
[CmdletBinding()]
80+
param(
81+
[Parameter(ValueFromPipeline)]
82+
[System.Management.Automation.Language.Token] $token
83+
)
84+
85+
process
86+
{
87+
# Adjust offsets for CRLF
88+
return $token.Extent.EndOffset - $token.Extent.EndLineNumber + 1
89+
}
90+
}
91+
3292
function Convert-TokenToScope
3393
{
3494
[CmdletBinding()]
@@ -46,9 +106,8 @@ function Convert-TokenToScope
46106

47107
$h = @{
48108
text = $token.Text
49-
# Adjust offsets for CRLF
50-
startOffset = $token.Extent.StartOffset - $token.Extent.StartLineNumber + 1
51-
endOffset = $token.Extent.EndOffset - $token.Extent.EndLineNumber + 1
109+
startOffset = Get-TokenStartOffset $token
110+
endOffset = Get-TokenEndOffset $token
52111
kind = $token.Kind
53112
}
54113

@@ -96,4 +155,18 @@ function Test-ScopeDisclosure
96155
}
97156

98157
return $false
158+
}
159+
160+
function Write-DiffAsWarning
161+
{
162+
[CmdletBinding()]
163+
param(
164+
[Parameter(ValueFromPipeline)]
165+
$diff
166+
)
167+
168+
process
169+
{
170+
Write-Warning "$($diff.SideIndicator) | $($diff.InputObject)"
171+
}
99172
}

tests/py/syntax_def/test_token_gen.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,23 @@ def setUp(self):
1111
self.test_path = os.path.join(sublime.packages_path(), 'PowerShell', 'tests', 'samples', 'test-file.ps1')
1212

1313
def testGetTokens(self):
14-
1514
with open(self.test_path) as f:
1615
content = f.readlines()
1716
for line in content:
1817
self.append(line)
19-
2018
self.writeTokensToFile(self.getTokens(), "test-file.ps1.tokens")
19+
20+
def testGetLowerTokens(self):
21+
with open(self.test_path) as f:
22+
content = f.readlines()
23+
for line in content:
24+
self.append(line.lower())
25+
self.writeTokensToFile(self.getTokens(), "test-file.ps1.lower.tokens")
26+
27+
def testGetUpperTokens(self):
28+
with open(self.test_path) as f:
29+
content = f.readlines()
30+
for line in content:
31+
self.append(line.upper())
32+
self.writeTokensToFile(self.getTokens(), "test-file.ps1.upper.tokens")
2133

0 commit comments

Comments
 (0)