@@ -113,25 +113,76 @@ cli_commands! {
113113 version,
114114}
115115
116- /// This macro creates a wrapper for an existing script.
117- #[ macro_export]
118- macro_rules! script_wrapper {
119- ( $mod: ident = $doc: literal => $script: literal ) => {
120- pastey:: paste! {
121- mod $mod {
122- #[ doc = $doc]
123- #[ derive( clap:: Args , Debug ) ]
124- #[ command( ) ]
125- pub ( super ) struct Cli {
126- args: Vec <String >,
127- }
116+ #[ cfg( test) ]
117+ mod tests {
118+ use clap:: { CommandFactory as _, error:: ErrorKind } ;
128119
129- impl Cli {
130- pub ( super ) fn exec( self ) -> anyhow:: Result <( ) > {
131- $crate:: app:: exec( concat!( "scripts/" , $script) , self . args, true )
132- }
133- }
120+ use super :: Cli ;
121+
122+ const SCRIPT_COMMANDS : & [ ( & str , & str ) ] = & [
123+ ( "check" , "docs" ) ,
124+ ( "package" , "archive" ) ,
125+ ( "package" , "deb" ) ,
126+ ( "package" , "msi" ) ,
127+ ( "package" , "rpm" ) ,
128+ ( "release" , "docker" ) ,
129+ ( "release" , "s3" ) ,
130+ ] ;
131+
132+ #[ test]
133+ fn script_commands_forward_arguments ( ) {
134+ let cases: & [ ( & [ & str ] , & [ & str ] ) ] = & [
135+ ( & [ ] , & [ ] ) ,
136+ ( & [ "0.58.0" ] , & [ "0.58.0" ] ) ,
137+ (
138+ & [ "--chart-version" , "0.46.0" ] ,
139+ & [ "--chart-version" , "0.46.0" ] ,
140+ ) ,
141+ ( & [ "--chart-version=0.46.0" ] , & [ "--chart-version=0.46.0" ] ) ,
142+ (
143+ & [ "-x" , "path with spaces" , "-1" ] ,
144+ & [ "-x" , "path with spaces" , "-1" ] ,
145+ ) ,
146+ ( & [ "value" , "--help" , "-v" ] , & [ "value" , "--help" , "-v" ] ) ,
147+ ( & [ "--" , "--help" ] , & [ "--help" ] ) ,
148+ (
149+ & [ "--" , "--chart-version" , "0.46.0" ] ,
150+ & [ "--chart-version" , "0.46.0" ] ,
151+ ) ,
152+ ] ;
153+
154+ for & ( group, command) in SCRIPT_COMMANDS {
155+ for & ( args, expected) in cases {
156+ let matches = Cli :: command ( )
157+ . try_get_matches_from (
158+ [ "vdev" , group, command]
159+ . into_iter ( )
160+ . chain ( args. iter ( ) . copied ( ) ) ,
161+ )
162+ . unwrap_or_else ( |error| panic ! ( "{group} {command} {args:?}: {error}" ) ) ;
163+ let script = matches
164+ . subcommand_matches ( group)
165+ . unwrap ( )
166+ . subcommand_matches ( command)
167+ . unwrap ( ) ;
168+ let forwarded: Vec < _ > = script
169+ . get_many :: < String > ( "args" )
170+ . into_iter ( )
171+ . flatten ( )
172+ . map ( String :: as_str)
173+ . collect ( ) ;
174+ assert_eq ! ( forwarded, expected, "{group} {command} {args:?}" ) ;
134175 }
135176 }
136- } ;
177+ }
178+
179+ #[ test]
180+ fn script_commands_keep_vdev_help ( ) {
181+ for & ( group, command) in SCRIPT_COMMANDS {
182+ let error = Cli :: command ( )
183+ . try_get_matches_from ( [ "vdev" , group, command, "--help" ] )
184+ . unwrap_err ( ) ;
185+ assert_eq ! ( error. kind( ) , ErrorKind :: DisplayHelp , "{group} {command}" ) ;
186+ }
187+ }
137188}
0 commit comments