test/test_args.go (view raw)
1package main
2
3import (
4 "fmt"
5 "os"
6)
7
8func main() {
9 fmt.Println("Testing command-line arguments...")
10
11 allPassed := true
12
13 // Test 1: No arguments shows error
14 fmt.Print("Test 1: No arguments shows error... ")
15 output, err := runMdget()
16 if !assertError("No arguments", err, true) {
17 allPassed = false
18 } else if !assertContains("No arguments error message", output, "Error: URL is required") {
19 allPassed = false
20 } else {
21 fmt.Println("✅")
22 }
23
24 // Test 2: Help flag shows help
25 fmt.Print("Test 2: Help flag shows help... ")
26 output, err = runMdget("--help")
27 if !assertError("Help flag", err, false) {
28 allPassed = false
29 } else if !assertContains("Help text", output, "Fetch a URL and convert its HTML content to Markdown.") {
30 allPassed = false
31 } else {
32 fmt.Println("✅")
33 }
34
35 // Test 3: Version flag shows version
36 fmt.Print("Test 3: Version flag shows version... ")
37 output, err = runMdget("--version")
38 if !assertError("Version flag", err, false) {
39 allPassed = false
40 } else if !assertContains("Version text", output, "mdget v0.1.0") {
41 allPassed = false
42 } else {
43 fmt.Println("✅")
44 }
45
46 // Test 4: URL with http prefix (should work)
47 fmt.Print("Test 4: URL with http prefix (should fail with no network)... ")
48 output, err = runMdget("http://localhost:99999/invalid")
49 // This should fail because the URL is invalid, not because of argument parsing
50 if err == nil {
51 fmt.Println("⚠️ (expected network error but got success)")
52 } else {
53 // Should fail with network error, not argument error
54 if !assertContains("Network error", output, "Error fetching URL") {
55 allPassed = false
56 } else {
57 fmt.Println("✅ (failed as expected with network error)")
58 }
59 }
60
61 // Test 5: URL without http prefix gets https
62 fmt.Print("Test 5: URL without http prefix gets https... ")
63 output, err = runMdget("localhost:99999/invalid")
64 if err == nil {
65 fmt.Println("⚠️ (expected network error but got success)")
66 } else {
67 // Should fail with network error
68 if !assertContains("Network error with auto-https", output, "Error fetching URL") {
69 allPassed = false
70 } else {
71 fmt.Println("✅ (failed as expected with network error)")
72 }
73 }
74
75 // Test 6: Output flag parsing
76 fmt.Print("Test 6: Output flag parsing... ")
77 output, err = runMdget("--output", "/tmp/nonexistent/test.md", "http://localhost:99999/invalid")
78 if err == nil {
79 fmt.Println("⚠️ (expected error but got success)")
80 allPassed = false
81 } else {
82 // Should fail with either file creation error or network error
83 if !assertContains("Output flag error", output, "Error") {
84 allPassed = false
85 } else {
86 fmt.Println("✅ (failed as expected)")
87 }
88 }
89
90 // Test 7: Timeout flag parsing
91 fmt.Print("Test 7: Timeout flag parsing... ")
92 output, err = runMdget("--timeout", "10", "http://localhost:99999/invalid")
93 if err == nil {
94 fmt.Println("⚠️ (expected error but got success)")
95 allPassed = false
96 } else {
97 if !assertContains("Timeout flag error", output, "Error fetching URL") {
98 allPassed = false
99 } else {
100 fmt.Println("✅ (failed as expected with network error)")
101 }
102 }
103
104 // Test 8: User-Agent flag parsing
105 fmt.Print("Test 8: User-Agent flag parsing... ")
106 output, err = runMdget("--user-agent", "TestAgent/1.0", "http://localhost:99999/invalid")
107 if err == nil {
108 fmt.Println("⚠️ (expected error but got success)")
109 allPassed = false
110 } else {
111 if !assertContains("User-Agent flag error", output, "Error fetching URL") {
112 allPassed = false
113 } else {
114 fmt.Println("✅ (failed as expected with network error)")
115 }
116 }
117
118 if allPassed {
119 fmt.Println("\n✅ All command-line argument tests passed!")
120 os.Exit(0)
121 } else {
122 fmt.Println("\n❌ Some command-line argument tests failed!")
123 os.Exit(1)
124 }
125}