1 // SemiTwist D Tools 2 // Tests: Command Line Parser Test 3 // Written in the D programming language. 4 5 /++ 6 Author: 7 $(WEB www.semitwist.com, Nick Sabalausky) 8 9 This has been tested to work with DMD 2.058 through 2.062 10 +/ 11 12 module semitwist.apps.tests.cmdparsertest.main; 13 14 import std.stdio; 15 16 import semitwist.util.all; 17 import semitwist.cmdlineparser; 18 19 void main(string[] args) 20 { 21 bool help; 22 bool detailHelp; 23 bool myBool; 24 bool myFlag; 25 bool myFlagX=true; 26 string myStr; 27 string myStrX="default"; 28 bool _odd98_name; 29 30 int myInt; 31 string required="hni"; 32 string[] switchless; 33 34 string myEnum; 35 36 auto cmd = new CmdLineParser(); 37 mixin(defineArg!(cmd, "help", help, ArgFlag.Optional, "Displays a help summary and exits" )); 38 mixin(defineArg!(cmd, "detail", detailHelp, ArgFlag.Optional, "Displays a detailed help message and exits" )); 39 mixin(defineArg!(cmd, "myBool", myBool, ArgFlag.Optional, "My Boolean" )); 40 mixin(defineArg!(cmd, "myFlag", myFlag, ArgFlag.Optional, "My Flag" )); 41 mixin(defineArg!(cmd, "myFlagX", myFlagX, ArgFlag.Optional, "My Flag X" )); 42 mixin(defineArg!(cmd, "myStr", myStr, ArgFlag.Optional, "My String" )); 43 mixin(defineArg!(cmd, "myStrX", myStrX, ArgFlag.Optional|ArgFlag.ToLower, "My Case-Insensitive String X")); 44 mixin(defineArg!(cmd, "_odd98_name", _odd98_name, ArgFlag.Optional, "Odd name" )); 45 mixin(defineArg!(cmd, "myInt", myInt, ArgFlag.Optional, "My Int")); 46 mixin(defineArg!(cmd, "r", required, ArgFlag.Required, "This is required, and internal name differs")); 47 mixin(defineArg!(cmd, "", switchless, ArgFlag.Optional, "Switchless Multiple" )); 48 mixin(defineArg!(cmd, "myEnum", myEnum, ArgFlag.Optional, `My Enum ("tea" or "coffee")` )); 49 50 mixin(setArgAllowableValues!("myEnum", "tea", "coffee")); 51 //mixin(setArgAllowableValues!("myInt", 3, 7)); 52 53 cmd.parse(args); 54 if(detailHelp) 55 { 56 writeln(cmd.getDetailedUsage()); 57 write(cmd.errorMsg); 58 return; 59 } 60 if(!cmd.success || help) 61 { 62 writeln(cmd.getUsage(18)); 63 write(cmd.errorMsg); 64 return; 65 } 66 writeln(); 67 68 mixin(traceVal!( 69 "myBool ", 70 "myFlag ", 71 "myFlagX", 72 "myStr ", 73 "myStrX ", 74 "_odd98_name", 75 "myInt ", 76 "required ", 77 "switchless ", 78 "myEnum " 79 )); 80 }