Files
ccs/tests/native/windows/edge-cases.ps1
T
kaitranntt 66e93fcae1 refactor(tests): Phase 3 - Move native tests to new structure
- Copy Unix and Windows tests to native/ directories
- Update Unix tests to source shared helpers
- Remove Section 10 (npm tests) from native tests
- Update final results to use shared helper functions
2025-11-05 11:16:16 -05:00

321 lines
13 KiB
PowerShell

# CCS Comprehensive Edge Case Testing
# Tests all edge cases and scenarios to ensure robustness
$ErrorActionPreference = "Continue"
$PassCount = 0
$FailCount = 0
$TotalTests = 0
function Test-Case {
param(
[string]$Name,
[scriptblock]$Test,
[string]$ExpectedBehavior
)
$script:TotalTests++
Write-Host ""
Write-Host "[$script:TotalTests] $Name" -ForegroundColor Cyan
Write-Host " Expected: $ExpectedBehavior" -ForegroundColor Gray
try {
$result = & $Test
if ($result) {
Write-Host " Result: PASS" -ForegroundColor Green
$script:PassCount++
return $true
} else {
Write-Host " Result: FAIL" -ForegroundColor Red
$script:FailCount++
return $false
}
} catch {
Write-Host " Result: ERROR - $_" -ForegroundColor Red
$script:FailCount++
return $false
}
}
Write-Host "========================================" -ForegroundColor Yellow
Write-Host "CCS COMPREHENSIVE EDGE CASE TESTING" -ForegroundColor Yellow
Write-Host "========================================" -ForegroundColor Yellow
Write-Host ""
# Clean installation
Write-Host "Preparing clean environment..." -ForegroundColor Cyan
if (Test-Path "C:\Users\kaidu\.ccs") {
Remove-Item "C:\Users\kaidu\.ccs" -Recurse -Force -ErrorAction SilentlyContinue
}
if (Test-Path "C:\Users\kaidu\ccs-test") {
Remove-Item "C:\Users\kaidu\ccs-test" -Recurse -Force -ErrorAction SilentlyContinue
}
# Extract and install
New-Item -ItemType Directory -Path "C:\Users\kaidu\ccs-test" | Out-Null
tar -xzf C:\Users\kaidu\ccs-final-v5.tar.gz -C C:\Users\kaidu\ccs-test 2>&1 | Out-Null
Set-Location C:\Users\kaidu\ccs-test
& powershell -ExecutionPolicy Bypass -File .\installers\install.ps1 2>&1 | Out-Null
$CcsPath = "C:\Users\kaidu\.ccs\ccs.ps1"
if (-not (Test-Path $CcsPath)) {
Write-Host "FATAL: Installation failed, ccs.ps1 not found" -ForegroundColor Red
exit 1
}
Write-Host "Installation complete, starting tests..." -ForegroundColor Green
Write-Host ""
# ============================================================================
# SECTION 1: VERSION COMMANDS
# ============================================================================
Write-Host "===== SECTION 1: VERSION COMMANDS =====" -ForegroundColor Yellow
Test-Case "Version flag --version" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath --version 2>&1 | Out-String
return $output -match "2\.1\.1|CCS"
} "Shows CCS version 2.1.1"
Test-Case "Version flag -v" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath -v 2>&1 | Out-String
return $output -match "2\.1\.1|CCS"
} "Shows CCS version 2.1.1"
Test-Case "Version command (word)" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath version 2>&1 | Out-String
return $output -match "2\.1\.1|CCS"
} "Shows CCS version 2.1.1"
# ============================================================================
# SECTION 2: HELP COMMANDS
# ============================================================================
Write-Host ""
Write-Host "===== SECTION 2: HELP COMMANDS =====" -ForegroundColor Yellow
Test-Case "Help flag --help" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath --help 2>&1 | Out-String
return $output -match "Usage|Claude"
} "Shows help without profile error"
Test-Case "Help flag -h" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath -h 2>&1 | Out-String
return $output -match "Usage|Claude"
} "Shows help without profile error"
# ============================================================================
# SECTION 3: ARGUMENT PARSING - THE CRITICAL FIX
# ============================================================================
Write-Host ""
Write-Host "===== SECTION 3: ARGUMENT PARSING (CRITICAL FIX) =====" -ForegroundColor Yellow
Test-Case "Single flag: -c" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath -c 2>&1 | Out-String
return -not ($output -match "Profile.*'-c'.*not found")
} "Does NOT show 'Profile -c not found' error"
Test-Case "Single flag: --verbose" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath --verbose 2>&1 | Out-String
return -not ($output -match "Profile.*'--verbose'.*not found")
} "Does NOT show 'Profile --verbose not found' error"
Test-Case "Single flag: -p" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath -p "test" 2>&1 | Out-String
return -not ($output -match "Profile.*'-p'.*not found")
} "Does NOT show 'Profile -p not found' error"
Test-Case "Single flag: --debug" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath --debug 2>&1 | Out-String
return -not ($output -match "Profile.*'--debug'.*not found")
} "Does NOT show profile error"
Test-Case "Multiple flags: -c --verbose" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath -c --verbose 2>&1 | Out-String
return -not ($output -match "Profile.*not found")
} "Accepts multiple flags without profile error"
Test-Case "Flag with value: -p 'test prompt'" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath -p "test prompt" 2>&1 | Out-String
return -not ($output -match "Profile.*'-p'.*not found")
} "Handles flag with quoted value"
# ============================================================================
# SECTION 4: PROFILE COMMANDS
# ============================================================================
Write-Host ""
Write-Host "===== SECTION 4: PROFILE COMMANDS =====" -ForegroundColor Yellow
Test-Case "Default profile (no args)" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath 2>&1 | Out-String
return -not ($output -match "Profile.*not found")
} "Uses default profile without error"
Test-Case "GLM profile" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath glm 2>&1 | Out-String
return -not ($output -match "Profile.*'glm'.*not found")
} "GLM profile exists and loads"
Test-Case "Profile with flag: glm -c" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath glm -c 2>&1 | Out-String
return -not ($output -match "Profile.*not found")
} "Profile + flag combination works"
Test-Case "Profile with multiple flags: glm -c --verbose" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath glm -c --verbose 2>&1 | Out-String
return -not ($output -match "Profile.*not found")
} "Profile + multiple flags works"
# ============================================================================
# SECTION 5: ERROR HANDLING
# ============================================================================
Write-Host ""
Write-Host "===== SECTION 5: ERROR HANDLING =====" -ForegroundColor Yellow
Test-Case "Invalid profile name" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath nonexistent-profile 2>&1 | Out-String
return $output -match "Profile[\s\S]*not found[\s\S]*Available profiles"
} "Shows helpful error for invalid profile"
Test-Case "Invalid profile with special chars" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath "test@profile" 2>&1 | Out-String
return $output -match "Invalid profile name|not found"
} "Rejects invalid characters in profile name"
Test-Case "Empty string as profile" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath "" 2>&1 | Out-String
return -not ($output -match "Profile.*''.*not found")
} "Handles empty string gracefully"
# ============================================================================
# SECTION 6: EDGE CASES
# ============================================================================
Write-Host ""
Write-Host "===== SECTION 6: EDGE CASES =====" -ForegroundColor Yellow
Test-Case "Flag starting with double dash: --test-flag" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath --test-flag 2>&1 | Out-String
return -not ($output -match "Profile.*'--test-flag'.*not found")
} "Handles double-dash flags correctly"
Test-Case "Short flag alone: -d" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath -d 2>&1 | Out-String
return -not ($output -match "Profile.*'-d'.*not found")
} "Handles short flags correctly"
Test-Case "Mixed flags and arguments" {
# PowerShell -File parameter binding will consume -p as ProfileOrFlag parameter
# So we test with flags that don't conflict: --verbose -c (both start with -)
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath --verbose -c 2>&1 | Out-String
return -not ($output -match "Profile.*not found")
} "Handles complex flag combinations"
Test-Case "Profile 'default' explicitly" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath default 2>&1 | Out-String
return -not ($output -match "Profile.*'default'.*not found")
} "Explicit default profile works"
Test-Case "Flag with equals: --model=gpt4" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath --model=test 2>&1 | Out-String
return -not ($output -match "Profile.*'--model=test'.*not found")
} "Handles flags with equals syntax"
Test-Case "Negative number (looks like flag): -1" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath -1 2>&1 | Out-String
return -not ($output -match "Profile.*'-1'.*not found")
} "Handles numeric flags"
# ============================================================================
# SECTION 7: CONFIGURATION VALIDATION
# ============================================================================
Write-Host ""
Write-Host "===== SECTION 7: CONFIGURATION VALIDATION =====" -ForegroundColor Yellow
Test-Case "Config file exists" {
return Test-Path "C:\Users\kaidu\.ccs\config.json"
} "config.json was created"
Test-Case "Config file is valid JSON" {
try {
$config = Get-Content "C:\Users\kaidu\.ccs\config.json" -Raw | ConvertFrom-Json
return $config.profiles -ne $null
} catch {
return $false
}
} "config.json is valid JSON with profiles"
Test-Case "GLM profile file exists" {
return Test-Path "C:\Users\kaidu\.ccs\glm.settings.json"
} "glm.settings.json exists"
Test-Case "GLM settings is valid JSON" {
try {
$settings = Get-Content "C:\Users\kaidu\.ccs\glm.settings.json" -Raw | ConvertFrom-Json
return $settings -ne $null
} catch {
return $false
}
} "glm.settings.json is valid JSON"
# ============================================================================
# SECTION 8: REAL USAGE SIMULATION
# ============================================================================
Write-Host ""
Write-Host "===== SECTION 8: REAL USAGE SIMULATION =====" -ForegroundColor Yellow
Test-Case "Simulate: continue conversation" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath -c 2>&1 | Select-Object -First 10 | Out-String
# Should not show profile error, may show other errors (expected if Claude not configured)
return -not ($output -match "Profile.*'-c'.*not found")
} "Real usage: ccs -c (continue) works"
Test-Case "Simulate: GLM with prompt" {
$job = Start-Job -ScriptBlock {
param($CcsPath)
& powershell -ExecutionPolicy Bypass -File $CcsPath glm -p "2+2" 2>&1
} -ArgumentList $CcsPath
$completed = Wait-Job $job -Timeout 5
$result = Receive-Job $job 2>&1 | Out-String
Remove-Job $job -Force
# Should not show profile error
return -not ($result -match "Profile.*not found")
} "Real usage: ccs glm -p works"
Test-Case "Simulate: verbose mode" {
$output = & powershell -ExecutionPolicy Bypass -File $CcsPath --verbose 2>&1 | Select-Object -First 5 | Out-String
return -not ($output -match "Profile.*'--verbose'.*not found")
} "Real usage: ccs --verbose works"
# ============================================================================
# FINAL RESULTS
# ============================================================================
Write-Host ""
Write-Host "========================================" -ForegroundColor Yellow
Write-Host "TEST RESULTS SUMMARY" -ForegroundColor Yellow
Write-Host "========================================" -ForegroundColor Yellow
Write-Host ""
Write-Host "Total Tests: $TotalTests" -ForegroundColor Cyan
Write-Host "Passed: $PassCount" -ForegroundColor Green
Write-Host "Failed: $FailCount" -ForegroundColor $(if ($FailCount -eq 0) { "Green" } else { "Red" })
Write-Host ""
$SuccessRate = [math]::Round(($PassCount / $TotalTests) * 100, 2)
Write-Host "Success Rate: $SuccessRate%" -ForegroundColor $(if ($SuccessRate -ge 90) { "Green" } elseif ($SuccessRate -ge 70) { "Yellow" } else { "Red" })
Write-Host ""
if ($FailCount -eq 0) {
Write-Host "========================================" -ForegroundColor Green
Write-Host "ALL TESTS PASSED!" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Green
Write-Host ""
Write-Host "CCS is ready for production use!" -ForegroundColor Green
exit 0
} else {
Write-Host "========================================" -ForegroundColor Yellow
Write-Host "SOME TESTS FAILED" -ForegroundColor Yellow
Write-Host "========================================" -ForegroundColor Yellow
Write-Host ""
Write-Host "Review failed tests above for details" -ForegroundColor Yellow
exit 1
}