@@ -13,38 +13,52 @@ func testArguments(t *testing.T) Arguments {
1313
1414	return  Arguments {
1515		"DATABASE_URL" : {
16+ 			Name :         "DATABASE_URL" ,
1617			Description :  "Database connection URL" ,
1718			Required :     true ,
19+ 			Example :      "postgresql://localhost:5432/mydb" ,
1820			VariableType : VariableTypeEnv ,
1921		},
2022		"API_KEY" : {
23+ 			Name :         "API_KEY" ,
2124			Description :  "API key for external service" ,
2225			Required :     true ,
26+ 			Example :      "sk-1234567890abcdef" ,
2327			VariableType : VariableTypeEnv ,
2428		},
2529		"DEBUG_MODE" : {
30+ 			Name :         "DEBUG_MODE" ,
2631			Description :  "Enable debug mode" ,
2732			Required :     false ,
33+ 			Example :      "true" ,
2834			VariableType : VariableTypeEnv ,
2935		},
3036		"OPTIONAL_CONFIG" : {
37+ 			Name :         "OPTIONAL_CONFIG" ,
3138			Description :  "" ,
3239			Required :     false ,
40+ 			Example :      "" ,
3341			VariableType : VariableTypeEnv ,
3442		},
3543		"--port" : {
44+ 			Name :         "--port" ,
3645			Description :  "Port to listen on" ,
3746			Required :     true ,
47+ 			Example :      "8080" ,
3848			VariableType : VariableTypeArg ,
3949		},
4050		"--verbose" : {
51+ 			Name :         "--verbose" ,
4152			Description :  "Enable verbose output" ,
4253			Required :     false ,
54+ 			Example :      "true" ,
4355			VariableType : VariableTypeArg ,
4456		},
4557		"--config" : {
58+ 			Name :         "--config" ,
4659			Description :  "" ,
4760			Required :     true ,
61+ 			Example :      "/path/to/config.json" ,
4862			VariableType : VariableTypeArg ,
4963		},
5064	}
@@ -457,3 +471,149 @@ func TestFilterArguments_EdgeEases(t *testing.T) {
457471		})
458472	}
459473}
474+ 
475+ func  TestArgumentMetadata_NameAndExample (t  * testing.T ) {
476+ 	t .Parallel ()
477+ 
478+ 	tests  :=  []struct  {
479+ 		name      string 
480+ 		metadata  ArgumentMetadata 
481+ 		expected  ArgumentMetadata 
482+ 	}{
483+ 		{
484+ 			name : "all fields set" ,
485+ 			metadata : ArgumentMetadata {
486+ 				Name :         "TEST_VAR" ,
487+ 				Description :  "Test variable" ,
488+ 				Required :     true ,
489+ 				Example :      "example_value" ,
490+ 				VariableType : VariableTypeEnv ,
491+ 			},
492+ 			expected : ArgumentMetadata {
493+ 				Name :         "TEST_VAR" ,
494+ 				Description :  "Test variable" ,
495+ 				Required :     true ,
496+ 				Example :      "example_value" ,
497+ 				VariableType : VariableTypeEnv ,
498+ 			},
499+ 		},
500+ 		{
501+ 			name : "empty name and example" ,
502+ 			metadata : ArgumentMetadata {
503+ 				Name :         "" ,
504+ 				Description :  "Test variable" ,
505+ 				Required :     false ,
506+ 				Example :      "" ,
507+ 				VariableType : VariableTypeArg ,
508+ 			},
509+ 			expected : ArgumentMetadata {
510+ 				Name :         "" ,
511+ 				Description :  "Test variable" ,
512+ 				Required :     false ,
513+ 				Example :      "" ,
514+ 				VariableType : VariableTypeArg ,
515+ 			},
516+ 		},
517+ 		{
518+ 			name : "positional argument with position" ,
519+ 			metadata : ArgumentMetadata {
520+ 				Name :         "POS_ARG" ,
521+ 				Description :  "Positional argument" ,
522+ 				Required :     true ,
523+ 				Example :      "/path/to/file" ,
524+ 				VariableType : VariableTypePositionalArg ,
525+ 				Position :     & []int {1 }[0 ],
526+ 			},
527+ 			expected : ArgumentMetadata {
528+ 				Name :         "POS_ARG" ,
529+ 				Description :  "Positional argument" ,
530+ 				Required :     true ,
531+ 				Example :      "/path/to/file" ,
532+ 				VariableType : VariableTypePositionalArg ,
533+ 				Position :     & []int {1 }[0 ],
534+ 			},
535+ 		},
536+ 	}
537+ 
538+ 	for  _ , tc  :=  range  tests  {
539+ 		t .Run (tc .name , func (t  * testing.T ) {
540+ 			t .Parallel ()
541+ 
542+ 			require .Equal (t , tc .expected .Name , tc .metadata .Name )
543+ 			require .Equal (t , tc .expected .Example , tc .metadata .Example )
544+ 			require .Equal (t , tc .expected .Description , tc .metadata .Description )
545+ 			require .Equal (t , tc .expected .Required , tc .metadata .Required )
546+ 			require .Equal (t , tc .expected .VariableType , tc .metadata .VariableType )
547+ 			if  tc .expected .Position  !=  nil  {
548+ 				require .NotNil (t , tc .metadata .Position )
549+ 				require .Equal (t , * tc .expected .Position , * tc .metadata .Position )
550+ 			} else  {
551+ 				require .Nil (t , tc .metadata .Position )
552+ 			}
553+ 		})
554+ 	}
555+ }
556+ 
557+ func  TestArguments_Ordered_NameSetting (t  * testing.T ) {
558+ 	t .Parallel ()
559+ 
560+ 	args  :=  Arguments {
561+ 		"ENV_VAR" : {
562+ 			Description :  "Environment variable" ,
563+ 			Required :     true ,
564+ 			Example :      "env_example" ,
565+ 			VariableType : VariableTypeEnv ,
566+ 		},
567+ 		"POS_ARG" : {
568+ 			Description :  "Positional argument" ,
569+ 			Required :     true ,
570+ 			Example :      "pos_example" ,
571+ 			VariableType : VariableTypePositionalArg ,
572+ 			Position :     & []int {1 }[0 ],
573+ 		},
574+ 		"--flag" : {
575+ 			Description :  "Command flag" ,
576+ 			Required :     false ,
577+ 			Example :      "flag_example" ,
578+ 			VariableType : VariableTypeArg ,
579+ 		},
580+ 	}
581+ 
582+ 	ordered  :=  args .Ordered ()
583+ 	require .Len (t , ordered , 3 )
584+ 
585+ 	for  _ , arg  :=  range  ordered  {
586+ 		require .NotEmpty (t , arg .Name , "Name should be set on ordered arguments" )
587+ 
588+ 		switch  arg .Name  {
589+ 		case  "POS_ARG" :
590+ 			require .Equal (t , "pos_example" , arg .Example )
591+ 			require .Equal (t , VariableTypePositionalArg , arg .VariableType )
592+ 			require .NotNil (t , arg .Position )
593+ 			require .Equal (t , 1 , * arg .Position )
594+ 		case  "ENV_VAR" :
595+ 			require .Equal (t , "env_example" , arg .Example )
596+ 			require .Equal (t , VariableTypeEnv , arg .VariableType )
597+ 		case  "--flag" :
598+ 			require .Equal (t , "flag_example" , arg .Example )
599+ 			require .Equal (t , VariableTypeArg , arg .VariableType )
600+ 		default :
601+ 			t .Errorf ("Unexpected argument name: %s" , arg .Name )
602+ 		}
603+ 	}
604+ 
605+ 	require .Equal (t , "POS_ARG" , ordered [0 ].Name , "Positional argument should be first" )
606+ 
607+ 	require .Contains (
608+ 		t ,
609+ 		[]string {"--flag" , "ENV_VAR" },
610+ 		ordered [1 ].Name ,
611+ 		"Non-positional should be in alphabetical order" ,
612+ 	)
613+ 	require .Contains (
614+ 		t ,
615+ 		[]string {"--flag" , "ENV_VAR" },
616+ 		ordered [2 ].Name ,
617+ 		"Non-positional should be in alphabetical order" ,
618+ 	)
619+ }
0 commit comments