## Test graft command with USE flags import src/nimpak/[config, use_flags] import src/nimpak/cli/graft_commands_enhanced import std/[strformat] echo "🧪 Testing Graft Command with USE Flags" echo "========================================" echo "" # Test 1: Parse USE flags from command line echo "Test 1: Parsing USE flags" echo "-------------------------" let useFlagsStr = "+wayland -X +lto +gtk" echo fmt"Input: {useFlagsStr}" try: let flags = parseUseFlagLine(useFlagsStr) echo "Parsed successfully:" for flag in flags: echo fmt" {formatUseFlag(flag)}" except UseFlagParseError as e: echo fmt"Error: {e.msg}" echo "" # Test 2: Get effective USE flags for a package echo "Test 2: Effective USE flags resolution" echo "---------------------------------------" var testConfig = defaultConfig() # Add some global flags testConfig.globalUseFlags = parseUseFlagLine("+lto +ipv6 +ssl") # Add package-specific flags testConfig.packageConfigs["firefox"] = PackageConfig( name: "firefox", useFlags: parseUseFlagLine("+wayland -X"), compilerFlags: CompilerFlags() ) echo "Global flags: " & formatUseFlags(testConfig.globalUseFlags) echo "Package flags: " & formatUseFlags(testConfig.packageConfigs["firefox"].useFlags) let effectiveFlags = getEffectiveUseFlags(testConfig, "firefox") echo "Effective: " & formatUseFlags(effectiveFlags) echo "" # Test 3: Merge with CLI flags echo "Test 3: Merging CLI flags" echo "-------------------------" let cliFlags = parseUseFlagLine("+lto +gtk -ssl") echo "CLI flags: " & formatUseFlags(cliFlags) let mergedFlags = mergeUseFlags(effectiveFlags, cliFlags) echo "After merge: " & formatUseFlags(mergedFlags) echo "" # Test 4: Generate variant hash echo "Test 4: Variant hash generation" echo "--------------------------------" let variantHash = useFlagsToHash(mergedFlags) echo fmt"Variant hash: {variantHash}" echo "" echo "This would create: /Programs/Firefox/120.0-{variantHash}/" echo "" # Test 5: Validate USE flags echo "Test 5: USE flag validation" echo "---------------------------" var testFlags = parseUseFlagLine("+systemd +dinit") # Conflicting init systems for i in 0..