package main import ( "fmt" "os" ) func main() { fmt.Println("Testing command-line arguments...") allPassed := true // Test 1: No arguments shows error fmt.Print("Test 1: No arguments shows error... ") output, err := runMdget() if !assertError("No arguments", err, true) { allPassed = false } else if !assertContains("No arguments error message", output, "Error: URL is required") { allPassed = false } else { fmt.Println("✅") } // Test 2: Help flag shows help fmt.Print("Test 2: Help flag shows help... ") output, err = runMdget("--help") if !assertError("Help flag", err, false) { allPassed = false } else if !assertContains("Help text", output, "Fetch a URL and convert its HTML content to Markdown.") { allPassed = false } else { fmt.Println("✅") } // Test 3: Version flag shows version fmt.Print("Test 3: Version flag shows version... ") output, err = runMdget("--version") if !assertError("Version flag", err, false) { allPassed = false } else if !assertContains("Version text", output, "mdget v0.1.0") { allPassed = false } else { fmt.Println("✅") } // Test 4: URL with http prefix (should work) fmt.Print("Test 4: URL with http prefix (should fail with no network)... ") output, err = runMdget("http://localhost:99999/invalid") // This should fail because the URL is invalid, not because of argument parsing if err == nil { fmt.Println("⚠️ (expected network error but got success)") } else { // Should fail with network error, not argument error if !assertContains("Network error", output, "Error fetching URL") { allPassed = false } else { fmt.Println("✅ (failed as expected with network error)") } } // Test 5: URL without http prefix gets https fmt.Print("Test 5: URL without http prefix gets https... ") output, err = runMdget("localhost:99999/invalid") if err == nil { fmt.Println("⚠️ (expected network error but got success)") } else { // Should fail with network error if !assertContains("Network error with auto-https", output, "Error fetching URL") { allPassed = false } else { fmt.Println("✅ (failed as expected with network error)") } } // Test 6: Output flag parsing fmt.Print("Test 6: Output flag parsing... ") output, err = runMdget("--output", "/tmp/nonexistent/test.md", "http://localhost:99999/invalid") if err == nil { fmt.Println("⚠️ (expected error but got success)") allPassed = false } else { // Should fail with either file creation error or network error if !assertContains("Output flag error", output, "Error") { allPassed = false } else { fmt.Println("✅ (failed as expected)") } } // Test 7: Timeout flag parsing fmt.Print("Test 7: Timeout flag parsing... ") output, err = runMdget("--timeout", "10", "http://localhost:99999/invalid") if err == nil { fmt.Println("⚠️ (expected error but got success)") allPassed = false } else { if !assertContains("Timeout flag error", output, "Error fetching URL") { allPassed = false } else { fmt.Println("✅ (failed as expected with network error)") } } // Test 8: User-Agent flag parsing fmt.Print("Test 8: User-Agent flag parsing... ") output, err = runMdget("--user-agent", "TestAgent/1.0", "http://localhost:99999/invalid") if err == nil { fmt.Println("⚠️ (expected error but got success)") allPassed = false } else { if !assertContains("User-Agent flag error", output, "Error fetching URL") { allPassed = false } else { fmt.Println("✅ (failed as expected with network error)") } } if allPassed { fmt.Println("\n✅ All command-line argument tests passed!") os.Exit(0) } else { fmt.Println("\n❌ Some command-line argument tests failed!") os.Exit(1) } }