158 lines
4.5 KiB
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 |