nip/tests/test_multiplatform.nim

237 lines
4.9 KiB
Nim

## test_multiplatform.nim
## Multi-platform compatibility tests
import std/[unittest, os, strutils, osproc]
type
Platform = object
os: string
arch: string
detected: bool
proc detectPlatform(): Platform =
## Detect current platform
result.os = hostOS
result.arch = hostCPU
result.detected = true
proc isLinux(): bool =
hostOS == "linux"
proc isBSD(): bool =
hostOS in ["freebsd", "openbsd", "netbsd", "dragonfly"]
proc isMacOS(): bool =
hostOS == "macosx"
proc isX86_64(): bool =
hostCPU in ["amd64", "x86_64"]
proc isARM64(): bool =
hostCPU in ["arm64", "aarch64"]
suite "Platform Detection":
test "Detect current platform":
let platform = detectPlatform()
check:
platform.detected == true
platform.os.len > 0
platform.arch.len > 0
echo " Detected: ", platform.os, "/", platform.arch
test "OS detection":
check:
isLinux() or isBSD() or isMacOS()
test "Architecture detection":
check:
isX86_64() or isARM64()
suite "File System Compatibility":
test "XDG directories":
let home = getHomeDir()
check:
home.len > 0
dirExists(home)
test "Temp directory":
let temp = getTempDir()
check:
temp.len > 0
dirExists(temp)
test "Create and remove directory":
let testDir = getTempDir() / "nip-multiplatform-test"
createDir(testDir)
check:
dirExists(testDir)
removeDir(testDir)
check:
not dirExists(testDir)
test "File operations":
let testFile = getTempDir() / "nip-test-file.txt"
writeFile(testFile, "test content")
check:
fileExists(testFile)
readFile(testFile) == "test content"
removeFile(testFile)
check:
not fileExists(testFile)
suite "Process Execution":
test "Execute simple command":
when defined(posix):
let output = execProcess("echo 'test'")
check:
output.contains("test")
test "Command with arguments":
when defined(posix):
let output = execProcess("printf '%s' 'hello'")
check:
output.contains("hello")
test "Environment variables":
putEnv("NIP_TEST_VAR", "test_value")
let value = getEnv("NIP_TEST_VAR")
check:
value == "test_value"
suite "Path Handling":
test "Path separator":
when defined(windows):
check:
DirSep == '\\'
else:
check:
DirSep == '/'
test "Path joining":
let path = "dir1" / "dir2" / "file.txt"
when defined(windows):
check:
path.contains("\\")
else:
check:
path.contains("/")
test "Absolute path":
let home = getHomeDir()
check:
isAbsolute(home)
suite "Binary Compatibility":
test "Nim runtime available":
check:
true # If we're running, Nim runtime works
test "Standard library available":
# Test that standard library functions work
let testStr = "a,b,c"
let parts = testStr.split(',')
check:
parts.len == 3
suite "Network Compatibility":
test "DNS resolution":
# Skip if no network
try:
when defined(posix):
let output = execProcess("ping -c 1 8.8.8.8 2>&1")
# Just check command executed, don't require success
check:
output.len > 0
except:
skip()
suite "Compression Support":
test "Gzip available":
when defined(posix):
try:
let output = execProcess("gzip --version 2>&1")
check:
output.contains("gzip") or output.len > 0
except:
skip()
test "Tar available":
when defined(posix):
try:
let output = execProcess("tar --version 2>&1")
check:
output.contains("tar") or output.len > 0
except:
skip()
suite "Git Compatibility":
test "Git available":
try:
let output = execProcess("git --version 2>&1")
check:
output.contains("git version")
except:
skip()
test "Git config":
try:
let output = execProcess("git config --list 2>&1")
check:
output.len >= 0 # May be empty, that's ok
except:
skip()
suite "Curl Compatibility":
test "Curl available":
try:
let output = execProcess("curl --version 2>&1")
check:
output.contains("curl") or output.len > 0
except:
skip()
suite "Platform-Specific Features":
test "Linux-specific":
when defined(linux):
check:
fileExists("/proc/version")
test "BSD-specific":
when defined(bsd):
check:
dirExists("/usr/local")
test "macOS-specific":
when defined(macosx):
check:
dirExists("/Applications")
echo ""
echo "✅ Multi-platform tests completed"
echo " Platform: ", hostOS, "/", hostCPU
when defined(linux):
echo " OS: Linux"
when defined(bsd):
echo " OS: BSD"
when defined(macosx):
echo " OS: macOS"
when defined(windows):
echo " OS: Windows"
when isX86_64():
echo " Arch: x86_64"
when isARM64():
echo " Arch: ARM64"