## 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