@@ -60,6 +60,49 @@ func TestDownloadByteExactToAutoName(t *testing.T) {
6060 }
6161}
6262
63+ func TestDownloadToDirectoryTarget (t * testing.T ) {
64+ body := []byte {0x89 , 'P' , 'N' , 'G' , 0xff } // no trailing newline
65+ srv := downloadServer (t , body , 0 )
66+ defer srv .Close ()
67+
68+ dir := t .TempDir ()
69+ errOut := & strings.Builder {}
70+ o := baseDownloadOpts (srv .URL , & strings.Builder {}, errOut )
71+ o .output = dir
72+ if err := runDownload (context .Background (), o ); err != nil {
73+ t .Fatalf ("runDownload: %v" , err )
74+ }
75+ got , err := os .ReadFile (filepath .Join (dir , "pic.png" ))
76+ if err != nil {
77+ t .Fatalf ("read saved file: %v" , err )
78+ }
79+ if string (got ) != string (body ) {
80+ t .Fatalf ("saved bytes = %v, want %v" , got , body )
81+ }
82+ if ! strings .Contains (errOut .String (), "Saved" ) {
83+ t .Errorf ("missing Saved note: %q" , errOut .String ())
84+ }
85+
86+ // A trailing path separator resolves the same way, even for a path that
87+ // does not yet exist.
88+ dir2 := filepath .Join (t .TempDir (), "sub" ) + string (os .PathSeparator )
89+ o2 := baseDownloadOpts (srv .URL , & strings.Builder {}, & strings.Builder {})
90+ o2 .output = dir2
91+ if err := os .MkdirAll (dir2 , 0o755 ); err != nil {
92+ t .Fatal (err )
93+ }
94+ if err := runDownload (context .Background (), o2 ); err != nil {
95+ t .Fatalf ("runDownload (trailing separator): %v" , err )
96+ }
97+ got2 , err := os .ReadFile (filepath .Join (dir2 , "pic.png" ))
98+ if err != nil {
99+ t .Fatalf ("read saved file (trailing separator): %v" , err )
100+ }
101+ if string (got2 ) != string (body ) {
102+ t .Fatalf ("saved bytes (trailing separator) = %v, want %v" , got2 , body )
103+ }
104+ }
105+
63106func TestDownloadToStdout (t * testing.T ) {
64107 body := []byte ("RAWBYTES" )
65108 srv := downloadServer (t , body , 0 )
0 commit comments