blob: b89495456406caa4980f3b8fdddf9b933ba2c3cf [file] [log] [blame]
# This test installs emsdk and activates the latest toolchain using `--system` or `--permanent` flags,
# and checks if parts of PATH are lost or overwritten. Set $env:SYSTEM_FLAG and $env:PERMANENT_FLAG to test each.
# If no flag is provided the process/shell values are tested. See the CI file for an example.
refreshenv
$repo_root = [System.IO.Path]::GetDirectoryName((resolve-path "$PSScriptRoot"))
$PATH_USER_BEFORE = [System.Environment]::GetEnvironmentVariable("PATH", "User")
$PATH_MACHINE_BEFORE = [System.Environment]::GetEnvironmentVariable("PATH", "Machine")
$PATH_Process_BEFORE = [System.Environment]::GetEnvironmentVariable("PATH", "Process")
try {
& "$repo_root/emsdk.ps1" install latest
$esc = '--%'
& "$repo_root/emsdk.ps1" activate latest $esc $env:PERMANENT_FLAG $env:SYSTEM_FLAG
$PATH_USER = [System.Environment]::GetEnvironmentVariable("PATH", "User")
$PATH_MACHINE = [System.Environment]::GetEnvironmentVariable("PATH", "Machine")
$PATH_Process = [System.Environment]::GetEnvironmentVariable("PATH", "Process")
if ($env:SYSTEM_FLAG) {
echo "--system test............................."
$path_before_arr = $PATH_MACHINE_BEFORE.Split(';')
$path_arr = $PATH_MACHINE.Split(';')
}
elseif ($env:PERMANENT_FLAG) {
echo "--permanent test.........................."
$path_before_arr = $PATH_USER_BEFORE.Split(';')
$path_arr = $PATH_USER.Split(';')
} else {
echo "no flag test (shell/process).............."
$path_before_arr = $PATH_Process_BEFORE.Split(';')
$path_arr = $PATH_Process.Split(';')
}
$EMSDK_Path = $path_arr | Where-Object { $_ -like "$repo_root*" }
$EMSDK_NODE_Path = $path_arr | Where-Object { $_ -like "$repo_root\node*" }
$EMSDK_PYTHON_Path = $path_arr | Where-Object { $_ -like "$repo_root\python*" }
$EMSDK_JAVA_Path = $path_arr | Where-Object { $_ -like "$repo_root\java*" }
$EMSDK_UPSTREAM_Path = $path_arr | Where-Object { $_ -like "$repo_root\upstream\emscripten*" }
$number_of_items = $path_arr.count
[System.Collections.ArrayList]$rest_of_path = @()
Foreach ($item in $path_arr) {
if (
($item -like "$repo_root*") -or
($item -like "$repo_root\node*") -or
($item -like "$repo_root\python*") -or
($item -like "$repo_root\java*") -or
($item -like "$repo_root\upstream\emscripten*")
) {
echo "$item is on the PATH"
}
else {
$rest_of_path.add($item) | Out-Null
}
}
# compare the PATHs before activation and after activation
if (Compare-Object -ReferenceObject $path_before_arr -DifferenceObject $rest_of_path ) {
echo "Old path is ............................."
echo $path_before_arr
echo "Current rest of path is ................."
echo $rest_of_path
throw "some parts of PATH are removed"
}
# Compare the other untouched PATH
if ($env:SYSTEM_FLAG) {
if (Compare-Object -ReferenceObject $PATH_USER_BEFORE.Split(';') -DifferenceObject $PATH_USER.Split(';') ) {
echo "Old user path is ...................."
echo $PATH_USER_BEFORE
echo "Current user path is ................"
echo $PATH_USER
throw "User PATH are changed while --system had been provided"
}
}
elseif ($env:PERMANENT_FLAG) {
if (Compare-Object -ReferenceObject $PATH_MACHINE_BEFORE.Split(';') -DifferenceObject $PATH_MACHINE.Split(';') ) {
echo "Old machine path is.................."
echo $PATH_MACHINE_BEFORE
echo "Current machine path is.............."
echo $PATH_MACHINE
throw "MACHINE PATH are changed while --system was not provided"
}
} else {
if (
(Compare-Object -ReferenceObject $PATH_MACHINE_BEFORE.Split(';') -DifferenceObject $PATH_MACHINE.Split(';')) -or
(Compare-Object -ReferenceObject $PATH_MACHINE_BEFORE.Split(';') -DifferenceObject $PATH_MACHINE.Split(';'))
) {
echo "Old machine path is.................."
echo $PATH_MACHINE_BEFORE
echo "Current machine path is.............."
echo $PATH_MACHINE
echo "Old user path is ...................."
echo $PATH_USER_BEFORE
echo "Current user path is ................"
echo $PATH_USER
throw "MACHINE/USER PATH are changed while no flag was provided"
}
}
}
finally {
# Recover pre-split PATH
refreshenv
[Environment]::SetEnvironmentVariable("Path", $PATH_USER_BEFORE, "User")
try {
[Environment]::SetEnvironmentVariable("Path", $PATH_MACHINE_BEFORE, "Machine")
}
catch {}
[Environment]::SetEnvironmentVariable("Path", $PATH_Process_BEFORE, "Process")
# Recover pre activation env variables
[Environment]::SetEnvironmentVariable("EMSDK", $null, "User")
[Environment]::SetEnvironmentVariable("EM_CONFIG", $null, "User")
[Environment]::SetEnvironmentVariable("EMSDK_NODE", $null, "User")
[Environment]::SetEnvironmentVariable("EMSDK_PYTHON", $null, "User")
[Environment]::SetEnvironmentVariable("JAVA_HOME", $null, "User")
try {
[Environment]::SetEnvironmentVariable("EMSDK", $null, "Machine")
[Environment]::SetEnvironmentVariable("EM_CONFIG", $null, "Machine")
[Environment]::SetEnvironmentVariable("EMSDK_NODE", $null, "Machine")
[Environment]::SetEnvironmentVariable("EMSDK_PYTHON", $null, "Machine")
[Environment]::SetEnvironmentVariable("JAVA_HOME", $null, "Machine")
} catch {}
[Environment]::SetEnvironmentVariable("EMSDK", $null, "Process")
[Environment]::SetEnvironmentVariable("EM_CONFIG", $null, "Process")
[Environment]::SetEnvironmentVariable("EMSDK_NODE", $null, "Process")
[Environment]::SetEnvironmentVariable("EMSDK_PYTHON", $null, "Process")
[Environment]::SetEnvironmentVariable("JAVA_HOME", $null, "Process")
refreshenv
}