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 }