Skip to content

Commit

Permalink
Extract testing, use npm exec instead of npx
Browse files Browse the repository at this point in the history
  • Loading branch information
danieljurek authored and azure-sdk committed Sep 20, 2024
1 parent 4fc5c4a commit ea60624
Show file tree
Hide file tree
Showing 4 changed files with 199 additions and 192 deletions.
197 changes: 7 additions & 190 deletions eng/common/scripts/check-spelling-in-changed-files.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -57,199 +57,14 @@ Param (
[switch] $ExitWithError,

[Parameter()]
[switch] $Test
[string]$SourceCommittish = "${env:SYSTEM_PULLREQUEST_SOURCECOMMITID}",

[Parameter()]
[string]$TargetCommittish = ("origin/${env:SYSTEM_PULLREQUEST_TARGETBRANCH}" -replace "refs/heads/")
)

Set-StrictMode -Version 3.0

function TestSpellChecker() {
Test-Exit0WhenAllFilesExcluded
ResetTest
Test-Exit1WhenIncludedFileHasSpellingError
ResetTest
Test-Exit0WhenIncludedFileHasNoSpellingError
ResetTest
Test-Exit1WhenChangedFileAlreadyHasSpellingError
ResetTest
Test-Exit0WhenUnalteredFileHasSpellingError
ResetTest
Test-Exit0WhenSpellingErrorsAndNoExitWithError
}

function Test-Exit0WhenAllFilesExcluded() {
# Arrange
"sepleing errrrrorrrrr" > ./excluded/excluded-file.txt
git add -A
git commit -m "One change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./" `
-ExitWithError

# Assert
if ($LASTEXITCODE -ne 0) {
throw "`$LASTEXITCODE != 0"
}
}

function Test-Exit1WhenIncludedFileHasSpellingError() {
# Arrange
"sepleing errrrrorrrrr" > ./included/included-file.txt
git add -A
git commit -m "One change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./" `
-ExitWithError

# Assert
if ($LASTEXITCODE -ne 1) {
throw "`$LASTEXITCODE != 1"
}
}

function Test-Exit0WhenIncludedFileHasNoSpellingError() {
# Arrange
"correct spelling" > ./included/included-file.txt
git add -A
git commit -m "One change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./" `
-ExitWithError

# Assert
if ($LASTEXITCODE -ne 0) {
throw "`$LASTEXITCODE != 0"
}
}

function Test-Exit1WhenChangedFileAlreadyHasSpellingError() {
# Arrange
"sepleing errrrrorrrrr" > ./included/included-file.txt
git add -A
git commit -m "First change"

"A statement without spelling errors" >> ./included/included-file.txt
git add -A
git commit -m "Second change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./" `
-ExitWithError

# Assert
if ($LASTEXITCODE -ne 1) {
throw "`$LASTEXITCODE != 1"
}
}

function Test-Exit0WhenUnalteredFileHasSpellingError() {
# Arrange
"sepleing errrrrorrrrr" > ./included/included-file-1.txt
git add -A
git commit -m "One change"

"A statement without spelling errors" > ./included/included-file-2.txt
git add -A
git commit -m "Second change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./" `
-ExitWithError

# Assert
if ($LASTEXITCODE -ne 0) {
throw "`$LASTEXITCODE != 0"
}
}

function Test-Exit0WhenSpellingErrorsAndNoExitWithError() {
# Arrange
"sepleing errrrrorrrrr" > ./included/included-file-1.txt
git add -A
git commit -m "One change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./"

# Assert
if ($LASTEXITCODE -ne 0) {
throw "`$LASTEXITCODE != 0"
}
}

function SetupTest($workingDirectory) {
Write-Host "Create test temp dir: $workingDirectory"
New-Item -ItemType Directory -Force -Path $workingDirectory | Out-Null

Push-Location $workingDirectory | Out-Null
git init

New-Item -ItemType Directory -Force -Path "./excluded"
New-Item -ItemType Directory -Force -Path "./included"
New-Item -ItemType Directory -Force -Path "./.vscode"

"Placeholder" > "./excluded/placeholder.txt"
"Placeholder" > "./included/placeholder.txt"

$configJsonContent = @"
{
"version": "0.1",
"language": "en",
"ignorePaths": [
".vscode/cspell.json",
"excluded/**"
]
}
"@
$configJsonContent > "./.vscode/cspell.json"

git add -A
git commit -m "Init"
}

function ResetTest() {
# Empty out the working tree
git checkout .
git clean -xdf

$revCount = git rev-list --count HEAD
if ($revCount -gt 1) {
# Reset N-1 changes so there is only the initial commit
$revisionsToReset = $revCount - 1
git reset --hard HEAD~$revisionsToReset
}
}

function TeardownTest($workingDirectory) {
Pop-Location | Out-Null
Write-Host "Remove test temp dir: $workingDirectory"
Remove-Item -Path $workingDirectory -Recurse -Force | Out-Null
}

if ($Test) {
$workingDirectory = Join-Path ([System.IO.Path]::GetTempPath()) ([System.IO.Path]::GetRandomFileName())

SetupTest $workingDirectory
TestSpellChecker
TeardownTest $workingDirectory
Write-Host "Test complete"
exit 0
}

$ErrorActionPreference = "Continue"
. $PSScriptRoot/common.ps1

Expand All @@ -266,7 +81,9 @@ if (!(Test-Path $CspellConfigPath)) {
# Lists names of files that were in some way changed between the
# current branch and default target branch. Excludes files that were deleted to
# prevent errors in Resolve-Path
$changedFilesList = Get-ChangedFiles
$changedFilesList = Get-ChangedFiles `
-SourceCommittish $SourceCommittish `
-TargetCommittish $TargetCommittish

$changedFiles = @()
foreach ($file in $changedFilesList) {
Expand Down
176 changes: 176 additions & 0 deletions eng/common/scripts/check-spelling-in-changed-files.tests.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
Describe 'Spell checking' {
BeforeAll {
$workingDirectory = Join-Path ([System.IO.Path]::GetTempPath()) ([System.IO.Path]::GetRandomFileName())

Write-Host "Create test temp dir: $workingDirectory"
New-Item -ItemType Directory -Force -Path $workingDirectory | Out-Null

Push-Location $workingDirectory | Out-Null
git init

New-Item -ItemType Directory -Force -Path "./excluded"
New-Item -ItemType Directory -Force -Path "./included"
New-Item -ItemType Directory -Force -Path "./.vscode"

"Placeholder" > "./excluded/placeholder.txt"
"Placeholder" > "./included/placeholder.txt"

$configJsonContent = @"
{
"version": "0.2",
"language": "en",
"ignorePaths": [
".vscode/cspell.json",
"excluded/**"
]
}
"@
$configJsonContent > "./.vscode/cspell.json"

git add -A
git commit -m "Init"
}

AfterAll {
Pop-Location | Out-Null
Write-Host "Remove test temp dir: $workingDirectory"
Remove-Item -Path $workingDirectory -Recurse -Force | Out-Null
}

BeforeEach {
$initCommit = git rev-parse HEAD
}

AfterEach {
# Empty out the working tree
git checkout .
git clean -xdf

$revCount = git rev-list --count HEAD
if ($revCount -gt 1) {
# Reset N-1 changes so there is only the initial commit
$revisionsToReset = $revCount - 1
git reset --hard HEAD~$revisionsToReset
}
}


It 'Exits 0 when all files are excluded' {
# Arrange
"sepleing errrrrorrrrr" > ./excluded/excluded-file.txt
git add -A
git commit -m "One change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./" `
-ExitWithError `
-SourceCommittish (git rev-parse HEAD) `
-TargetCommittish $initCommit

# Assert
$LASTEXITCODE | Should -Be 0
}

It 'Exits 1 when included file has spelling error' {
# Arrange
"sepleing errrrrorrrrr" > ./included/included-file.txt
git add -A
git commit -m "One change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./" `
-ExitWithError `
-SourceCommittish (git rev-parse HEAD) `
-TargetCommittish $initCommit

# Assert
$LASTEXITCODE | Should -Be 1
}

It 'Exits 0 when included file has no spelling error' {
# Arrange
"correct spelling" > ./included/included-file.txt
git add -A
git commit -m "One change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./" `
-ExitWithError `
-SourceCommittish (git rev-parse HEAD) `
-TargetCommittish $initCommit

# Assert
$LASTEXITCODE | Should -Be 0
}

It 'Exits 1 when changed file already has spelling error' {
# Arrange
"sepleing errrrrorrrrr" > ./included/included-file.txt
git add -A
git commit -m "First change"

"A statement without spelling errors" >> ./included/included-file.txt
git add -A
git commit -m "Second change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./" `
-ExitWithError `
-SourceCommittish (git rev-parse HEAD) `
-TargetCommittish $initCommit

# Assert
$LASTEXITCODE | Should -Be 1
}

It 'Exits 0 when unaltered file has spelling error' {
# Arrange
"sepleing errrrrorrrrr" > ./included/included-file-1.txt
git add -A
git commit -m "One change"

# Use baseCommit instead of initCommit to simulate a scenario where the
# file with the spelling error is already checked in.
$baseCommit = git rev-parse HEAD

"A statement without spelling errors" > ./included/included-file-2.txt
git add -A
git commit -m "Second change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./" `
-ExitWithError `
-SourceCommittish (git rev-parse HEAD) `
-TargetCommittish $baseCommit

# Assert
$LASTEXITCODE | Should -Be 0
}

It 'Exits 0 when spelling errors and no ExitWithError' {
# Arrange
"sepleing errrrrorrrrr" > ./included/included-file-1.txt
git add -A
git commit -m "One change"

# Act
&"$PSScriptRoot/check-spelling-in-changed-files.ps1" `
-CspellConfigPath "./.vscode/cspell.json" `
-SpellCheckRoot "./" `
-SourceCommittish (git rev-parse HEAD) `
-TargetCommittish $initCommit

# Assert
$LASTEXITCODE | Should -Be 0
}
}
Loading

0 comments on commit ea60624

Please sign in to comment.