$ErrorActionPreference = "Stop" function Set-WasmToolchainEnv { param() $clang = $env:CC if (-not $clang -or -not (Test-Path $clang)) { $defaultClang = "C:\\Program Files\\LLVM\\bin\\clang.exe" if (Test-Path $defaultClang) { $clang = $defaultClang } else { $cmd = Get-Command clang.exe -ErrorAction SilentlyContinue if ($cmd) { $clang = $cmd.Path } } } if (-not $clang) { throw "Clang introuvable. Installez LLVM/Clang et relancez." } $env:CC = $clang $llvmBin = Split-Path $clang -Parent $env:AR = Join-Path $llvmBin "llvm-ar.exe" $env:NM = Join-Path $llvmBin "llvm-nm.exe" $env:TARGET_CC = $env:CC $env:CC_wasm32_unknown_unknown = $env:CC $env:AR_wasm32_unknown_unknown = $env:AR $env:NM_wasm32_unknown_unknown = $env:NM [System.Environment]::SetEnvironmentVariable('CC_wasm32-unknown-unknown', $env:CC, 'Process') [System.Environment]::SetEnvironmentVariable('AR_wasm32-unknown-unknown', $env:AR, 'Process') [System.Environment]::SetEnvironmentVariable('NM_wasm32-unknown-unknown', $env:NM, 'Process') } function Invoke-WasmPackTests { param( [switch]$Chrome, [switch]$Firefox, [switch]$Node ) if ($Chrome) { wasm-pack test --headless --chrome } if ($Firefox) { wasm-pack test --headless --firefox } if ($Node) { wasm-pack test --node } } $runnerSet = $false function Ensure-WasmBindgenRunner { param() $runner = Join-Path "$env:USERPROFILE\.cargo\bin" "wasm-bindgen-test-runner.exe" if (-not (Test-Path $runner)) { Write-Host "Installing wasm-bindgen-test-cli..." -ForegroundColor Yellow cargo install wasm-bindgen-test-cli --locked --force | Out-Null } if (Test-Path $runner) { $script:runnerSet = $true $env:WASM_BINDGEN_TEST_RUNNER = $runner } else { Write-Warning "wasm-bindgen-test-runner introuvable après installation. PATH: $env:PATH" } } $scriptsDir = Split-Path -Parent $MyInvocation.MyCommand.Path $repoRoot = Split-Path -Parent $scriptsDir Push-Location $repoRoot try { Set-WasmToolchainEnv Ensure-WasmBindgenRunner cargo clean --target wasm32-unknown-unknown | Out-Null try { Invoke-WasmPackTests -Chrome -Firefox } catch { Write-Warning "Tests headless navigateur échoués, tentative avec Node." Invoke-WasmPackTests -Node } } finally { Pop-Location }