nip/tests/test_build_system_simple.nim

158 lines
4.5 KiB
Nim

## tests/test_build_system_simple.nim
## Simple unit tests for the Nimplate build system
##
## Tests basic build system functionality without complex dependencies
import std/[unittest, os, strutils, tables]
import ../src/nimpak/build_system
suite "Simple Build System Tests":
setup:
# Create temporary test directory
let testDir = getTempDir() / "nip_test_build_simple"
createDir(testDir)
teardown:
# Clean up test directory
let testDir = getTempDir() / "nip_test_build_simple"
if dirExists(testDir):
removeDir(testDir)
test "Build environment creation":
let sourceDir = getTempDir() / "test_source"
createDir(sourceDir)
let env = newBuildEnvironment(sourceDir, isolated = true)
check env.sourceDir == sourceDir
check env.isolated == true
check env.environment.hasKey("PREFIX")
check env.environment.hasKey("MAKEFLAGS")
check env.workDir.contains("nimpak_build_")
test "Build hash calculation":
let sourceDir = getTempDir() / "test_source"
createDir(sourceDir)
# Create a simple build template manually
let buildTmpl = BuildTemplate(
system: CMake,
configureArgs: @["-DCMAKE_BUILD_TYPE=Release"],
buildArgs: @["--parallel"],
installArgs: @["--prefix", "/usr"]
)
let hash1 = calculateBuildHash(sourceDir, buildTmpl)
let hash2 = calculateBuildHash(sourceDir, buildTmpl)
check hash1 == hash2 # Same source and template should produce same hash
check hash1.startsWith("build-")
test "Build cache detection":
let cacheDir = getTempDir() / "build_cache_detection"
# Clean up any existing cache directory
if dirExists(cacheDir):
removeDir(cacheDir)
createDir(cacheDir)
let buildHash = "test-build-hash-unique"
# Initially not cached
check isBuildCached(buildHash, cacheDir) == false
# Create cache file
let cacheFile = cacheDir / buildHash & ".cache"
writeFile(cacheFile, "cached build result")
# Now should be cached
check isBuildCached(buildHash, cacheDir) == true
test "Build environment isolation setup":
let sourceDir = getTempDir() / "test_source"
var env = newBuildEnvironment(sourceDir, isolated = true)
setupSandbox(env)
check env.environment.hasKey("SANDBOX")
check env.environment["SANDBOX"] == "true"
check env.environment.hasKey("HOME")
check env.environment.hasKey("TMPDIR")
test "Nimplate executor creation":
let sourceDir = getTempDir() / "test_source"
createDir(sourceDir)
# Create a simple build template manually
let buildTmpl = BuildTemplate(
system: CMake,
configureArgs: @["-DCMAKE_BUILD_TYPE=Release"],
buildArgs: @["--parallel"],
installArgs: @["--prefix", "/usr"]
)
let executor = newNimplateExecutor(buildTmpl, sourceDir)
check executor.buildTemplate.system == CMake
check executor.cacheEnabled == true
check executor.sandboxed == true
check executor.environment.sourceDir == sourceDir
test "Build result structure":
# Test BuildResult type
var buildResult = BuildResult(
success: true,
buildTime: 1.5,
outputSize: 1024,
buildLog: "Build completed successfully",
artifacts: @["/path/to/binary"],
phase: PhaseInstall,
exitCode: 0
)
check buildResult.success == true
check buildResult.buildTime == 1.5
check buildResult.outputSize == 1024
check buildResult.phase == PhaseInstall
check buildResult.artifacts.len == 1
test "Build environment cleanup":
let sourceDir = getTempDir() / "test_source"
createDir(sourceDir)
let env = newBuildEnvironment(sourceDir, isolated = true)
let workDir = env.workDir
# Work directory should exist
check dirExists(workDir)
# Clean up
cleanupBuildEnvironment(env)
# Work directory should be removed (if isolated)
# Note: This might not work in all test environments due to permissions
# check not dirExists(workDir)
test "Build cache save and load":
let cacheDir = getTempDir() / "build_cache_test"
let buildHash = "test-hash-123"
let buildResult = BuildResult(
success: true,
buildTime: 2.0,
buildLog: "Test build log",
phase: PhaseInstall
)
# Save to cache
saveBuildCache(buildResult, buildHash, cacheDir)
# Check cache exists
check isBuildCached(buildHash, cacheDir) == true
when isMainModule:
echo "🧪 Running Simple Build System Tests..."
echo "Testing basic Nimplate functionality..."
# This will run all the test suites
discard