optiflag 0.6

Sign up to get free protection for your applications and to get access to all the features.
data/optiflag.gemspec ADDED
@@ -0,0 +1,13 @@
1
+ require 'rake'
2
+ Gem::Specification.new do |spec|
3
+ spec.name = "optiflag"
4
+ spec.version = "0.6"
5
+ spec.summary = "Optiflag is yet-another library for handling command-line options in an arbitrary Ruby program."
6
+ spec.author = "Daniel Eklund"
7
+ spec.email = "doeklund@gmail.com"
8
+ spec.homepage = "http://rubyforge.org/projects/optiflag/"
9
+ spec.files = FileList['**/*'].to_a
10
+ spec.test_files = FileList['test/tc*'].to_a - ["test/tc_flagall.rb"]
11
+ spec.has_rdoc = true
12
+ spec.rubyforge_project = 'optiflag'
13
+ end
@@ -0,0 +1,42 @@
1
+ require 'optiflag.rb'
2
+ require 'test/unit'
3
+
4
+ module HelpArgs extend OptiFlag::Flagset
5
+ usage_flag "h","?","help"
6
+ flag "dir"
7
+ end
8
+
9
+ class TC_AdvancedHelpArgs < Test::Unit::TestCase
10
+
11
+ def test_help_requested
12
+ command_lines =
13
+ ["-dir thedire -? dir",
14
+ "-dir thedire -h dir",
15
+ "-dir thedire -help dir"]
16
+ command_lines.each do |cl|
17
+ argv = cl.split
18
+ args = HelpArgs::parse(argv)
19
+ assert(args.help_requested?,
20
+ "A help flag was added to the command-line. Please register its existence.")
21
+ assert_equal("dir",args.help_requested_on,
22
+ "Advanced help is supposed to be requested on 'dir'")
23
+ assert_equal("thedire",args.flag_value.dir,
24
+ "thedire is the proper value of the dir flag")
25
+ end
26
+ end
27
+ def test_no_help_requested
28
+ command_lines =
29
+ ["-dir thedire",
30
+ "-dir thedire -he",
31
+ "-dir thedire -hElp"]
32
+ command_lines.each do |cl|
33
+ argv = cl.split
34
+ args = HelpArgs::parse(argv)
35
+ assert_equal("thedire",args.flag_value.dir,
36
+ "thedire is the proper value of the dir flag")
37
+
38
+ assert(! args.help_requested?,
39
+ "There are no help flags on the command line")
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,30 @@
1
+ require 'optiflag.rb'
2
+ require 'test/unit'
3
+
4
+ module AlternateArgs extend OptiFlag::Flagset
5
+ flag "directory" do
6
+ alternate_forms %w{d dir D DIR DIRECTORY}
7
+ end
8
+ end
9
+
10
+
11
+
12
+ class TC_AlternateArgs < Test::Unit::TestCase
13
+
14
+
15
+ def test_alternate_forms
16
+ command_lines =
17
+ ["-d FLOTSAM","-dir FLOTSAM",
18
+ "--directory FLOTSAM",
19
+ "-DIR FLOTSAM","-DIRECTORY FLOTSAM",
20
+ "-directory FLOTSAM","-D FLOTSAM"]
21
+ command_lines.each do |command_line|
22
+ args = AlternateArgs::parse(command_line.split)
23
+ assert_equal("FLOTSAM",args.flag_value.directory,
24
+ "Directory not properly set")
25
+ assert(! args.errors?,
26
+ "No errors should have occurred")
27
+ end
28
+ end
29
+
30
+ end
@@ -0,0 +1,103 @@
1
+ require 'optiflag.rb'
2
+ require 'test/unit'
3
+
4
+
5
+ module CharArgs extend OptiFlag::Flagset
6
+ character_flag :l, :p_group
7
+ character_flag :s, :p_group
8
+ character_flag :a, :p_group
9
+ optional_switch_flag "clear"
10
+ character_flag :x do
11
+ description "Extract"
12
+ end
13
+ character_flag :v
14
+ character_flag :f
15
+ flag "dir"
16
+ keyword "bobby"
17
+ end
18
+
19
+ class TC_CharArgs < Test::Unit::TestCase
20
+
21
+ def test_xvf
22
+ command_lines = ["-x bobby -v -f -dir sdsdsd",
23
+ "-xvf",
24
+ "-vxf",
25
+ "-fvx bobby",
26
+ "-f -dir kosd -xv",
27
+ "-dir sdsd -x -fv",
28
+ "-x -vf",
29
+ "-f -vx",
30
+ "-v -f -x -vo sd"]
31
+ command_lines.each do |x|
32
+ argv = x.split
33
+ args = CharArgs::parse(argv)
34
+ assert_equal(true,args.flag_value.f?,
35
+ "The 'f' flag should be set")
36
+ assert_equal(true,args.flag_value.v?,
37
+ "The 'v' flag should be set")
38
+ assert_equal(true,args.flag_value.x?,
39
+ "The 'x' flag should be set")
40
+
41
+ end
42
+ end
43
+
44
+ def test_lsa
45
+ command_lines = ["-x bobby -v -f -dir sdsdsd",
46
+ "-xvf",
47
+ "-vxf",
48
+ "-fvx bobby",
49
+ "-f -dir kosd -xv",
50
+ "-dir sdsd -x -fv",
51
+ "-x -vf",
52
+ "-f -vx",
53
+ "-v -f -x -vo sd"]
54
+ command_lines.each do |x|
55
+ argv = x.split
56
+ args = CharArgs::parse(argv)
57
+ assert_equal(false,args.flag_value.l?)
58
+ assert_equal(false,args.flag_value.s?)
59
+ assert_equal(false,args.flag_value.a?)
60
+ end
61
+ end
62
+ def test_lsa_not_there
63
+ command_lines = ["-lsa",
64
+ "-las",
65
+ "-als",
66
+ "-asl",
67
+ "-sal",
68
+ "-sla",
69
+ "-s -la",
70
+ "-s -al",
71
+ "-a -sl",
72
+ "-a -ls ",
73
+ "-l -s -a",
74
+ "--l --s --a",
75
+ "-lsa bobby -dir sdsd",
76
+ "bobby -dir sdsd -las",
77
+ "-als bobby -dir sdsd",
78
+ "bobby -asl",
79
+ "-sal -dir sdsd",
80
+ "-sla",
81
+ "-s bobby -la",
82
+ "-s -al",
83
+ "-a bobby -sl",
84
+ "-a -ls",
85
+ "-l bobby -dir sdsd -s -a"]
86
+
87
+ command_lines.each do |x|
88
+ argv = x.split
89
+ args = CharArgs::parse(argv)
90
+ assert_equal(true,args.flag_value.l?)
91
+ assert_equal(true,args.flag_value.s?)
92
+ assert_equal(true,args.flag_value.a?)
93
+ assert_equal(false,args.flag_value.x?)
94
+ assert_equal(false,args.flag_value.v?)
95
+ assert_equal(false,args.flag_value.f?)
96
+ end
97
+ end
98
+
99
+
100
+
101
+
102
+ end
103
+
@@ -0,0 +1,74 @@
1
+ require 'optiflag.rb'
2
+ require 'test/unit'
3
+
4
+ module OptionalArgs extend OptiFlag::Flagset
5
+ flag "dir"
6
+ optional_flag "log"
7
+ optional_flag "verbose_level" do
8
+ value_in_set [1,2,3,4,0]
9
+ end
10
+ optional_switch_flag "force"
11
+ end
12
+
13
+ class TC_OptionalArgs < Test::Unit::TestCase
14
+
15
+ def test_none_there
16
+ cl = %w{ -dir c:/my_stuff }
17
+ result = OptionalArgs::parse(cl)
18
+ assert( ! result.errors?)
19
+ assert_equal("c:/my_stuff",result.flag_value.dir)
20
+ assert(!result.flag_value.log?)
21
+ assert(!result.flag_value.verbose_level?)
22
+ assert(!result.flag_value.force?)
23
+ end
24
+
25
+ def test_all_there_and_no_errors
26
+ cl = %w{ -dir c:/my_stuff -log c:/log -force -verbose_level 3 }
27
+ result = OptionalArgs::parse(cl)
28
+ assert( ! result.errors?)
29
+ assert_equal("c:/log",result.flag_value.log)
30
+ assert_equal("3",result.flag_value.verbose_level)
31
+ assert(result.flag_value.force?)
32
+ end
33
+ def test_some_there_and_no_errors
34
+ cl = %w{ -dir c:/my_stuff -force -verbose_level 3 }
35
+ result = OptionalArgs::parse(cl)
36
+ assert( ! result.errors?)
37
+ assert(!result.flag_value.log?)
38
+ assert_equal(nil,result.flag_value.log)
39
+ assert_equal("3",result.flag_value.verbose_level)
40
+ assert(result.flag_value.force?)
41
+ end
42
+ def test_some_there_and_no_errors_rearranged_1
43
+ cl = %w{ -dir c:/my_stuff -verbose_level 3 -force}
44
+ result = OptionalArgs::parse(cl)
45
+ assert( ! result.errors?)
46
+ assert(!result.flag_value.log?)
47
+ assert_equal(nil,result.flag_value.log)
48
+ assert_equal("3",result.flag_value.verbose_level)
49
+ assert(result.flag_value.force?)
50
+ end
51
+ def test_some_there_and_no_errors_rearranged_2
52
+ cl = %w{ -force -dir c:/my_stuff -verbose_level 3 }
53
+ result = OptionalArgs::parse(cl)
54
+ assert( ! result.errors?)
55
+ assert(!result.flag_value.log?)
56
+ assert_equal(nil,result.flag_value.log)
57
+ assert_equal("3",result.flag_value.verbose_level)
58
+ assert(result.flag_value.force?)
59
+ end
60
+ def test_some_there_but_has_validation_error
61
+ cl = %w{ -dir c:/my_stuff -verbose_level three }
62
+ result = OptionalArgs::parse(cl)
63
+ assert( result.errors?)
64
+ assert(!result.flag_value.log?)
65
+ assert_equal(nil,result.flag_value.log)
66
+ assert(!result.flag_value.force?)
67
+ assert_equal(0,result.errors.missing_flags.length)
68
+ assert_equal(1,result.errors.validation_errors.length)
69
+ end
70
+
71
+
72
+
73
+ end
74
+
@@ -0,0 +1,51 @@
1
+ require 'optiflag.rb'
2
+ require 'test/unit'
3
+
4
+ module DansArgs extend OptiFlag::Flagset
5
+ flag ["directory"]
6
+ flag "script"
7
+ flag ["control_db"] do
8
+ description "The control database credentials"
9
+ end
10
+ flag ["target_db"]
11
+ end
12
+
13
+ class TC_FlagAll < Test::Unit::TestCase
14
+
15
+ def setup
16
+ @regular_dans_args = %w{-directory my_directory -script my_script
17
+ -control_db control -target_db target}
18
+ @missing_dans_args = %w{-directory my_directory -script my_script}
19
+ end
20
+
21
+ def test_regular_dans_arg_parses
22
+ result = DansArgs::parse(@regular_dans_args)
23
+ assert_equal("my_directory",result.flag_value.directory,
24
+ "Flag should be equal to my_directory")
25
+ assert(result.flag_value.directory?,
26
+ "Directory Flag should have been passed")
27
+ assert_equal("my_script",result.flag_value.script,
28
+ "Flag should be equal to my_script")
29
+ assert_equal("control",result.flag_value.control_db,
30
+ "Flag should be equal to control")
31
+ assert(result.errors? == false,"There should be no errors")
32
+ end
33
+
34
+ def test_missing_dans_arg_parses
35
+ result = DansArgs::parse(@missing_dans_args)
36
+ assert( result.errors?,
37
+ "There should be errors, with two missing required options")
38
+ assert_equal("-control_db",result.errors.missing_flags[0],
39
+ "First Missing flag should be -control_db")
40
+ assert_equal("-target_db",result.errors.missing_flags[1],
41
+ "Second Missing flag should be -target_db")
42
+ assert_equal(2,result.errors.missing_flags.length,
43
+ "There should be two missing flags")
44
+ end
45
+
46
+ def teardown
47
+
48
+ end
49
+
50
+ end
51
+
@@ -0,0 +1,40 @@
1
+ require 'optiflag.rb'
2
+ require 'test/unit'
3
+
4
+ module HelpArgs extend OptiFlag::Flagset
5
+ usage_flag "h","?","help"
6
+ flag "dir"
7
+ end
8
+
9
+ class TC_HelpArgs < Test::Unit::TestCase
10
+
11
+ def test_help_requested
12
+ command_lines =
13
+ ["-dir thedire -?",
14
+ "-dir thedire -h",
15
+ "-dir thedire -help"]
16
+ command_lines.each do |cl|
17
+ argv = cl.split
18
+ args = HelpArgs::parse(argv)
19
+ assert(args.help_requested?,
20
+ "A help flag was added to the command-line. Please register its existence.")
21
+ assert_equal("thedire",args.flag_value.dir,
22
+ "thedire is the proper value of the dir flag")
23
+ end
24
+ end
25
+ def test_no_help_requested
26
+ command_lines =
27
+ ["-dir thedire",
28
+ "-dir thedire -he",
29
+ "-dir thedire -hElp"]
30
+ command_lines.each do |cl|
31
+ argv = cl.split
32
+ args = HelpArgs::parse(argv)
33
+ assert_equal("thedire",args.flag_value.dir,
34
+ "thedire is the proper value of the dir flag")
35
+
36
+ assert(! args.help_requested?,
37
+ "There are no help flags on the command line")
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,40 @@
1
+ require 'optiflag.rb'
2
+ require 'test/unit'
3
+
4
+ module ValidArgs extend OptiFlag::Flagset
5
+ flag "directory"
6
+ flag "script", :description => "The Script directory"
7
+ flag "mode" do
8
+ value_matches /[0-9]/
9
+ end
10
+ flag ["date"] do
11
+ value_matches ["Must be of form mm\/dd\/yy",
12
+ /^[0-9]{2}\/[0-9]{2}\/[0-9]{2,4}$/]
13
+ end
14
+
15
+
16
+ end
17
+
18
+ class TC_ValidArgs < Test::Unit::TestCase
19
+
20
+
21
+ def test_validation
22
+ command_line = %w{-directory c:/eu -script RunMe -mode 3 -date 12/23/2006}
23
+ args = ValidArgs::parse(command_line)
24
+ assert_equal("c:/eu",args.flag_value.directory,
25
+ "Directory not properly set")
26
+ assert(! args.errors?,
27
+ "No errors should have occurred")
28
+ end
29
+
30
+ def test_validation_with_errors
31
+ command_line = %w{-directory c:/eu -script RunMe -mode wrx -date monday}
32
+ args = ValidArgs::parse(command_line)
33
+ assert(args.errors?,
34
+ "An error should have occurred")
35
+ assert_equal(2,args.errors.validation_errors.length,
36
+ "There should be 2 problems")
37
+ end
38
+
39
+ end
40
+
@@ -0,0 +1,25 @@
1
+ require 'optiflag.rb'
2
+ require 'test/unit'
3
+
4
+ module BUG_ONE extend OptiFlag::Flagset
5
+ flag "dir" do
6
+ alternate_forms "D","d"
7
+ end
8
+ flag "log"
9
+ flag "db", :description => "The database"
10
+ optional_flag "verbose"
11
+ end
12
+
13
+
14
+
15
+ class TC_BUG_ONE < Test::Unit::TestCase
16
+
17
+ def test_bug
18
+ command_line = "-log LOG -dir LOG -db DB"
19
+ args = BUG_ONE::parse(command_line.split)
20
+ assert(! args.errors?,
21
+ "No errors should have occurred")
22
+
23
+ end
24
+
25
+ end
@@ -0,0 +1,33 @@
1
+ require 'optiflag.rb'
2
+ require 'test/unit'
3
+
4
+ module BugTwoArgs extend OptiFlag::Flagset
5
+ flag "dir"
6
+ optional_flag "log"
7
+ optional_flag "verbose_level" do
8
+ value_in_set [1,2,3,4,0]
9
+ end
10
+ optional_switch_flag "force"
11
+ usage_flag "h"
12
+ end
13
+
14
+ class TC_BugTwo < Test::Unit::TestCase
15
+
16
+
17
+ def setup
18
+ # this thing is changing global state
19
+ cl = %w{ -dir c:/my_stuff -log c:/log -force -verbose_level 3 -h }
20
+ result = BugTwoArgs::parse(cl)
21
+ end
22
+
23
+ def test_a
24
+ cl = %w{ -dir c:/my_stuff }
25
+ result = BugTwoArgs::parse(cl)
26
+ assert(!result.help_requested?,"Help was not requested")
27
+ assert(!result.flag_value.log?)
28
+
29
+ assert(!result.flag_value.verbose_level?)
30
+ assert(!result.flag_value.force?)
31
+ end
32
+ end
33
+