@@ -284,3 +284,127 @@ func TestMain(m *testing.M) {
284284	closer .Close ()
285285	os .Exit (m .Run ())
286286}
287+ 
288+ func  TestConsoleOutput (t  * testing.T ) {
289+ 	runner  :=  ContainerDiffRunner {
290+ 		t :          t ,
291+ 		binaryPath : "../out/container-diff" ,
292+ 	}
293+ 
294+ 	tests  :=  []struct  {
295+ 		description     string 
296+ 		subCommand      string 
297+ 		extraFlag       string 
298+ 		expectedOutput  []string 
299+ 		producesError   bool 
300+ 	}{
301+ 		{
302+ 			description : "analysis --help" ,
303+ 			subCommand :  "analyze" ,
304+ 			extraFlag :   "--help" ,
305+ 			expectedOutput : []string {
306+ 				"Analyzes an image using the specifed analyzers as indicated via --type flag(s)." ,
307+ 				"For details on how to specify images, run: container-diff help" ,
308+ 				"container-diff" ,
309+ 				"-c, --cache-dir string" ,
310+ 				"-j, --json" ,
311+ 				"-w, --output string" ,
312+ 				"-t, --type multiValueFlag" ,
313+ 			},
314+ 		},
315+ 		{
316+ 			description : "analysis help" ,
317+ 			subCommand :  "analyze" ,
318+ 			extraFlag :   "help" ,
319+ 			expectedOutput : []string {
320+ 				"Analyzes an image using the specifed analyzers as indicated via --type flag(s)." ,
321+ 				"For details on how to specify images, run: container-diff help" ,
322+ 				"container-diff" ,
323+ 				"-c, --cache-dir string" ,
324+ 				"-j, --json" ,
325+ 				"-w, --output string" ,
326+ 				"-t, --type multiValueFlag" ,
327+ 			},
328+ 		},
329+ 		{
330+ 			description : "container-diff --help" ,
331+ 			subCommand :  "--help" ,
332+ 			extraFlag :   "" ,
333+ 			expectedOutput : []string {
334+ 				"container-diff is a CLI tool for analyzing and comparing container images." ,
335+ 				"Images can be specified from either a local Docker daemon, or from a remote registry." ,
336+ 				"analyze" ,
337+ 				"diff" ,
338+ 				"--format string" ,
339+ 				"--skip-tls-verify-registry multiValueFlag" ,
340+ 				"-v, --verbosity string" ,
341+ 			},
342+ 		},
343+ 		{
344+ 			description : "container-diff help" ,
345+ 			subCommand :  "help" ,
346+ 			extraFlag :   "" ,
347+ 			expectedOutput : []string {
348+ 				"container-diff is a CLI tool for analyzing and comparing container images." ,
349+ 				"Images can be specified from either a local Docker daemon, or from a remote registry." ,
350+ 				"analyze" ,
351+ 				"diff" ,
352+ 				"--format string" ,
353+ 				"--skip-tls-verify-registry multiValueFlag" ,
354+ 				"-v, --verbosity string" ,
355+ 			},
356+ 		},
357+ 		{
358+ 			description : "container-diff diff --help" ,
359+ 			subCommand :  "diff" ,
360+ 			extraFlag :   "--help" ,
361+ 			expectedOutput : []string {
362+ 				"Compares two images using the specifed analyzers as indicated via --type flag(s)." ,
363+ 				"For details on how to specify images, run: container-diff help" ,
364+ 				"container-diff diff image1 image2 [flags]" ,
365+ 				"-c, --cache-dir string" ,
366+ 				"-j, --json" ,
367+ 				"-w, --output string" ,
368+ 				"--skip-tls-verify-registry multiValueFlag" ,
369+ 			},
370+ 		},
371+ 		{
372+ 			description : "container-diff diff --help" ,
373+ 			subCommand :  "diff" ,
374+ 			extraFlag :   "help" ,
375+ 			expectedOutput : []string {
376+ 				"Error: 'diff' requires two images as arguments: container-diff diff [image1] [image2]" ,
377+ 				"container-diff diff image1 image2 [flags]" ,
378+ 				"-c, --cache-dir string" ,
379+ 				"-j, --json" ,
380+ 				"-w, --output string" ,
381+ 				"--skip-tls-verify-registry multiValueFlag" ,
382+ 			},
383+ 			producesError : true ,
384+ 		},
385+ 	}
386+ 	for  _ , test  :=  range  tests  {
387+ 		t .Run (test .description , func (t  * testing.T ) {
388+ 			t .Parallel ()
389+ 			args  :=  []string {test .subCommand }
390+ 			if  test .extraFlag  !=  ""  {
391+ 				args  =  append (args , test .extraFlag )
392+ 			}
393+ 			actual , stderr , err  :=  runner .Run (args ... )
394+ 			if  err  !=  nil  {
395+ 				if  test .producesError  {
396+ 					actual  =  err .Error ()
397+ 				} else  {
398+ 					t .Fatalf ("Error running command: %s. Stderr: %s" , err , stderr )
399+ 				}
400+ 			}
401+ 			actual  =  strings .TrimSpace (actual )
402+ 			for  _ , expectedLine  :=  range  test .expectedOutput  {
403+ 				if  ! strings .Contains (actual , expectedLine ) {
404+ 					t .Errorf ("Error actual output does not contain expected line.  \n \n Expected: %s\n \n  Actual: %s\n \n , Stderr: %s" , expectedLine , actual , stderr )
405+ 				}
406+ 			}
407+ 
408+ 		})
409+ 	}
410+ }
0 commit comments