clasp-ruby 0.22.1 → 0.23.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +63 -52
- data/examples/cr-example.rb +16 -16
- data/examples/flag_and_option_specifications.md +25 -25
- data/examples/flag_and_option_specifications.rb +6 -6
- data/examples/show_usage_and_version.md +5 -5
- data/examples/show_usage_and_version.rb +1 -1
- data/examples/simple_command_line_no_specifications.rb +1 -1
- data/lib/clasp/arguments.rb +543 -531
- data/lib/clasp/clasp.rb +7 -7
- data/lib/clasp/cli.rb +140 -135
- data/lib/clasp/doc_.rb +3 -3
- data/lib/clasp/old_module.rb +3 -3
- data/lib/clasp/specifications.rb +337 -333
- data/lib/clasp/util/exceptions.rb +17 -17
- data/lib/clasp/util/value_parser.rb +97 -97
- data/lib/clasp/version.rb +15 -15
- data/lib/clasp-ruby.rb +3 -2
- data/lib/clasp.rb +3 -2
- data/test/scratch/test_list_command_line.rb +6 -6
- data/test/scratch/test_specifications.rb +14 -14
- data/test/scratch/test_usage.rb +6 -6
- data/test/scratch/test_usage_from_DATA.rb +1 -1
- data/test/scratch/test_usage_with_duplicate_specifications.rb +6 -6
- data/test/unit/tc_ARGV_rewrite.rb +36 -38
- data/test/unit/tc_arguments_1.rb +702 -656
- data/test/unit/tc_arguments_2.rb +52 -53
- data/test/unit/tc_arguments_3.rb +77 -77
- data/test/unit/tc_arguments_inspect.rb +55 -56
- data/test/unit/tc_cli.rb +4 -4
- data/test/unit/tc_default_value.rb +91 -91
- data/test/unit/tc_defaults_1.rb +38 -38
- data/test/unit/tc_examples_Arguments.rb +130 -132
- data/test/unit/tc_extras.rb +24 -26
- data/test/unit/tc_option_required.rb +38 -39
- data/test/unit/tc_option_value_aliases.rb +44 -44
- data/test/unit/tc_specifications.rb +7 -8
- data/test/unit/tc_typed_options.rb +204 -204
- data/test/unit/tc_usage.rb +112 -55
- data/test/unit/tc_with_action.rb +23 -24
- data/test/unit/ts_all.rb +1 -1
- metadata +8 -7
@@ -8,144 +8,144 @@ require 'test/unit'
|
|
8
8
|
|
9
9
|
class Test_DefaultValue < Test::Unit::TestCase
|
10
10
|
|
11
|
-
|
11
|
+
def test_long_form_without_default
|
12
12
|
|
13
|
-
|
13
|
+
specifications = [
|
14
14
|
|
15
|
-
|
16
|
-
|
15
|
+
CLASP.Option('--verbosity', values: [ 'silent', 'terse', 'normal', 'chatty', 'verbose' ])
|
16
|
+
]
|
17
17
|
|
18
|
-
|
19
|
-
|
18
|
+
argv = [ '--verbosity' ]
|
19
|
+
args = CLASP::Arguments.new(argv, specifications)
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
assert_equal 0, args.flags.size
|
22
|
+
assert_equal 1, args.options.size
|
23
|
+
assert_equal 0, args.values.size
|
24
24
|
|
25
|
-
|
25
|
+
option0 = args.options[0]
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
assert_equal '--verbosity', option0.name
|
28
|
+
assert_nil option0.value
|
29
|
+
end
|
30
30
|
|
31
|
-
|
31
|
+
def test_long_form_with_default_empty_value
|
32
32
|
|
33
|
-
|
33
|
+
specifications = [
|
34
34
|
|
35
|
-
|
36
|
-
|
35
|
+
CLASP.Option('--verbosity', values: [ 'silent', 'terse', 'normal', 'chatty', 'verbose' ], default_value: 'normal')
|
36
|
+
]
|
37
37
|
|
38
|
-
|
39
|
-
|
38
|
+
argv = [ '--verbosity=' ]
|
39
|
+
args = CLASP::Arguments.new(argv, specifications)
|
40
40
|
|
41
|
-
|
42
|
-
|
43
|
-
|
41
|
+
assert_equal 0, args.flags.size
|
42
|
+
assert_equal 1, args.options.size
|
43
|
+
assert_equal 0, args.values.size
|
44
44
|
|
45
|
-
|
45
|
+
option0 = args.options[0]
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
47
|
+
assert_equal '--verbosity', option0.name
|
48
|
+
assert_equal 'normal', option0.value
|
49
|
+
end
|
50
50
|
|
51
|
-
|
51
|
+
def test_long_form_with_default_missing_value
|
52
52
|
|
53
|
-
|
53
|
+
specifications = [
|
54
54
|
|
55
|
-
|
56
|
-
|
55
|
+
CLASP.Option('--verbosity', values: [ 'silent', 'terse', 'normal', 'chatty', 'verbose' ], default_value: 'normal')
|
56
|
+
]
|
57
57
|
|
58
|
-
|
59
|
-
|
58
|
+
argv = [ '--verbosity' ]
|
59
|
+
args = CLASP::Arguments.new(argv, specifications)
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
|
61
|
+
assert_equal 0, args.flags.size
|
62
|
+
assert_equal 1, args.options.size
|
63
|
+
assert_equal 0, args.values.size
|
64
64
|
|
65
|
-
|
65
|
+
option0 = args.options[0]
|
66
66
|
|
67
|
-
|
68
|
-
|
69
|
-
|
67
|
+
assert_equal '--verbosity', option0.name
|
68
|
+
assert_equal 'normal', option0.value
|
69
|
+
end
|
70
70
|
|
71
|
-
|
71
|
+
def test_short_form_without_default
|
72
72
|
|
73
|
-
|
73
|
+
specifications = [
|
74
74
|
|
75
|
-
|
76
|
-
|
75
|
+
CLASP.Option('--verbosity', alias: '-v', values: [ 'silent', 'terse', 'normal', 'chatty', 'verbose' ])
|
76
|
+
]
|
77
77
|
|
78
|
-
|
79
|
-
|
78
|
+
argv = [ '-v' ]
|
79
|
+
args = CLASP::Arguments.new(argv, specifications)
|
80
80
|
|
81
|
-
|
82
|
-
|
83
|
-
|
81
|
+
assert_equal 0, args.flags.size
|
82
|
+
assert_equal 1, args.options.size
|
83
|
+
assert_equal 0, args.values.size
|
84
84
|
|
85
|
-
|
85
|
+
option0 = args.options[0]
|
86
86
|
|
87
|
-
|
88
|
-
|
89
|
-
|
87
|
+
assert_equal '--verbosity', option0.name
|
88
|
+
assert_nil option0.value
|
89
|
+
end
|
90
90
|
|
91
|
-
|
91
|
+
def test_short_form_with_default
|
92
92
|
|
93
|
-
|
93
|
+
specifications = [
|
94
94
|
|
95
|
-
|
96
|
-
|
95
|
+
CLASP.Option('--verbosity', alias: '-v', values: [ 'silent', 'terse', 'normal', 'chatty', 'verbose' ], default_value: 'normal')
|
96
|
+
]
|
97
97
|
|
98
|
-
|
99
|
-
|
98
|
+
argv = [ '-v' ]
|
99
|
+
args = CLASP::Arguments.new(argv, specifications)
|
100
100
|
|
101
|
-
|
102
|
-
|
103
|
-
|
101
|
+
assert_equal 0, args.flags.size
|
102
|
+
assert_equal 1, args.options.size
|
103
|
+
assert_equal 0, args.values.size
|
104
104
|
|
105
|
-
|
105
|
+
option0 = args.options[0]
|
106
106
|
|
107
|
-
|
108
|
-
|
109
|
-
|
107
|
+
assert_equal '--verbosity', option0.name
|
108
|
+
assert_equal 'normal', option0.value
|
109
|
+
end
|
110
110
|
|
111
|
-
|
111
|
+
def test_short_form_without_default_and_separator
|
112
112
|
|
113
|
-
|
113
|
+
specifications = [
|
114
114
|
|
115
|
-
|
116
|
-
|
115
|
+
CLASP.Option('--verbosity', alias: '-v', values: [ 'silent', 'terse', 'normal', 'chatty', 'verbose' ])
|
116
|
+
]
|
117
117
|
|
118
|
-
|
119
|
-
|
118
|
+
argv = [ '-v', '--', 'some-value' ]
|
119
|
+
args = CLASP::Arguments.new(argv, specifications)
|
120
120
|
|
121
|
-
|
122
|
-
|
123
|
-
|
121
|
+
assert_equal 0, args.flags.size
|
122
|
+
assert_equal 1, args.options.size
|
123
|
+
assert_equal 1, args.values.size
|
124
124
|
|
125
|
-
|
125
|
+
option0 = args.options[0]
|
126
126
|
|
127
|
-
|
128
|
-
|
129
|
-
|
127
|
+
assert_equal '--verbosity', option0.name
|
128
|
+
assert_nil option0.value
|
129
|
+
end
|
130
130
|
|
131
|
-
|
131
|
+
def test_short_form_with_default_and_separator
|
132
132
|
|
133
|
-
|
133
|
+
specifications = [
|
134
134
|
|
135
|
-
|
136
|
-
|
135
|
+
CLASP.Option('--verbosity', alias: '-v', values: [ 'silent', 'terse', 'normal', 'chatty', 'verbose' ], default_value: 'normal')
|
136
|
+
]
|
137
137
|
|
138
|
-
|
139
|
-
|
138
|
+
argv = [ '-v', '--', 'some-value' ]
|
139
|
+
args = CLASP::Arguments.new(argv, specifications)
|
140
140
|
|
141
|
-
|
142
|
-
|
143
|
-
|
141
|
+
assert_equal 0, args.flags.size
|
142
|
+
assert_equal 1, args.options.size
|
143
|
+
assert_equal 1, args.values.size
|
144
144
|
|
145
|
-
|
145
|
+
option0 = args.options[0]
|
146
146
|
|
147
|
-
|
148
|
-
|
149
|
-
|
147
|
+
assert_equal '--verbosity', option0.name
|
148
|
+
assert_equal 'normal', option0.value
|
149
|
+
end
|
150
150
|
end
|
151
151
|
|
data/test/unit/tc_defaults_1.rb
CHANGED
@@ -8,66 +8,66 @@ require 'test/unit'
|
|
8
8
|
|
9
9
|
class Test_defaults < Test::Unit::TestCase
|
10
10
|
|
11
|
-
|
11
|
+
def test_responds_to_Help
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
assert CLASP::Flag.respond_to? :Help
|
14
|
+
end
|
15
15
|
|
16
|
-
|
16
|
+
def test_Help_is_idempotent
|
17
17
|
|
18
|
-
|
19
|
-
|
18
|
+
help_1 = CLASP::Flag.Help
|
19
|
+
help_2 = CLASP::Flag.Help
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
assert_same help_1, help_2
|
22
|
+
end
|
23
23
|
|
24
|
-
|
24
|
+
def test_Help_attributes
|
25
25
|
|
26
|
-
|
26
|
+
assert_equal '--help', CLASP::Flag.Help.name
|
27
27
|
|
28
|
-
|
28
|
+
assert_equal [], CLASP::Flag.Help.aliases
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
assert_equal 'shows this help and terminates', CLASP::Flag.Help.help
|
31
|
+
end
|
32
32
|
|
33
|
-
|
33
|
+
def test_Help_extras
|
34
34
|
|
35
|
-
|
36
|
-
|
35
|
+
help1 = CLASP::Flag.Help
|
36
|
+
help2 = CLASP::Flag.Help(v1: 'v', v2: 2)
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
assert_equal Hash.new, help1.extras
|
39
|
+
assert_equal Hash[ [ [ :v1, 'v' ], [ :v2, 2 ] ] ], help2.extras
|
40
|
+
end
|
41
41
|
|
42
|
-
|
42
|
+
def test_responds_to_Version
|
43
43
|
|
44
|
-
|
45
|
-
|
44
|
+
assert CLASP::Flag.respond_to? :Version
|
45
|
+
end
|
46
46
|
|
47
|
-
|
47
|
+
def test_Version_is_idempotent
|
48
48
|
|
49
|
-
|
50
|
-
|
49
|
+
version_1 = CLASP::Flag.Version
|
50
|
+
version_2 = CLASP::Flag.Version
|
51
51
|
|
52
|
-
|
53
|
-
|
52
|
+
assert_same version_1, version_2
|
53
|
+
end
|
54
54
|
|
55
|
-
|
55
|
+
def test_Version_attributes
|
56
56
|
|
57
|
-
|
57
|
+
assert_equal '--version', CLASP::Flag.Version.name
|
58
58
|
|
59
|
-
|
59
|
+
assert_equal [], CLASP::Flag.Version.aliases
|
60
60
|
|
61
|
-
|
62
|
-
|
61
|
+
assert_equal 'shows version and terminates', CLASP::Flag.Version.help
|
62
|
+
end
|
63
63
|
|
64
|
-
|
64
|
+
def test_Version_extras
|
65
65
|
|
66
|
-
|
67
|
-
|
66
|
+
version1 = CLASP::Flag.Version
|
67
|
+
version2 = CLASP::Flag.Version(v1: 'v', v2: 2)
|
68
68
|
|
69
|
-
|
70
|
-
|
71
|
-
|
69
|
+
assert_equal Hash.new, version1.extras
|
70
|
+
assert_equal Hash[ [ [ :v1, 'v' ], [ :v2, 2 ] ] ], version2.extras
|
71
|
+
end
|
72
72
|
end
|
73
73
|
|
@@ -8,142 +8,140 @@ require 'test/unit'
|
|
8
8
|
|
9
9
|
class Test_Examples < Test::Unit::TestCase
|
10
10
|
|
11
|
-
|
11
|
+
def test_SimpleCommandLineNoSpecifications
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
13
|
+
argv = %w{ --show-all=true infile -c outfile }
|
14
|
+
|
15
|
+
args = CLASP::Arguments.new(argv)
|
16
|
+
|
17
|
+
assert_equal 1, args.flags.size
|
18
|
+
flag = args.flags[0]
|
19
|
+
assert_equal "-c", flag.name
|
20
|
+
assert_equal 1, args.options.size
|
21
|
+
option = args.options[0]
|
22
|
+
assert_equal "--show-all", option.name
|
23
|
+
assert_equal "true", option.value
|
24
|
+
assert_equal 2, args.values.size
|
25
|
+
assert_equal "infile", args.values[0]
|
26
|
+
assert_equal "outfile", args.values[1]
|
27
|
+
end
|
28
28
|
|
29
|
-
|
29
|
+
def test_UseOfSpecialDoubleSlashFlagToTreatAllSubsequentArgumentsAsValues
|
30
30
|
|
31
|
-
|
31
|
+
argv = %w{ --show-all=true -- infile outfile -c }
|
32
32
|
|
33
|
-
|
33
|
+
args = CLASP::Arguments.new(argv)
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
35
|
+
assert_equal 0, args.flags.size
|
36
|
+
option = args.options[0]
|
37
|
+
assert_equal "--show-all", option.name
|
38
|
+
assert_equal "true", option.value
|
39
|
+
assert_equal 3, args.values.size
|
40
|
+
assert_equal "infile", args.values[0]
|
41
|
+
assert_equal "outfile", args.values[1]
|
42
|
+
assert_equal "-c", args.values[2]
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_UseOfFlagShortForms
|
46
|
+
|
47
|
+
specifications = [
|
48
|
+
|
49
|
+
CLASP.Flag('--verbose', alias: '-v'),
|
50
|
+
CLASP.Flag('--trace-output', aliases: [ '-t', '--trace' ]),
|
51
|
+
]
|
52
|
+
|
53
|
+
argv = %w{ --trace -v }
|
54
|
+
|
55
|
+
args = CLASP::Arguments.new(argv, specifications)
|
56
|
+
|
57
|
+
assert_equal 2, args.flags.size
|
58
|
+
flag = args.flags[0]
|
59
|
+
assert_equal '--trace-output', flag.name
|
60
|
+
assert_equal '--trace', flag.given_name
|
61
|
+
flag = args.flags[1]
|
62
|
+
assert_equal '--verbose', flag.name
|
63
|
+
assert_equal '-v', flag.given_name
|
64
|
+
assert_equal 0, args.options.size
|
65
|
+
assert_equal 0, args.values.size
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_UseOfFlagSingleShortFormsCombined
|
69
|
+
|
70
|
+
specifications = [
|
71
|
+
|
72
|
+
CLASP.Flag('--expand', alias: '-x'),
|
73
|
+
CLASP.Flag('--verbose', alias: '-v'),
|
74
|
+
CLASP.Flag('--trace-output', aliases: [ '-t', '--trace' ]),
|
75
|
+
]
|
76
|
+
|
77
|
+
argv = %w{ -tvx }
|
78
|
+
|
79
|
+
args = CLASP::Arguments.new(argv, specifications)
|
80
|
+
|
81
|
+
assert_equal 3, args.flags.size
|
82
|
+
flag = args.flags[0]
|
83
|
+
assert_equal '--trace-output', flag.name
|
84
|
+
assert_equal '-tvx', flag.given_name
|
85
|
+
flag = args.flags[1]
|
86
|
+
assert_equal '--verbose', flag.name
|
87
|
+
assert_equal '-tvx', flag.given_name
|
88
|
+
flag = args.flags[2]
|
89
|
+
assert_equal '--expand', flag.name
|
90
|
+
assert_equal '-tvx', flag.given_name
|
91
|
+
assert_equal 0, args.options.size
|
92
|
+
assert_equal 0, args.values.size
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_UseOfOptionShortForm
|
96
|
+
|
97
|
+
specifications = [
|
98
|
+
|
99
|
+
CLASP.Option('--show-all', alias: '-a'),
|
100
|
+
]
|
101
|
+
|
102
|
+
argv = %w{ -c -a true infile outfile }
|
103
|
+
|
104
|
+
args = CLASP::Arguments.new(argv, specifications)
|
105
|
+
|
106
|
+
assert_equal 1, args.flags.size
|
107
|
+
flag = args.flags[0]
|
108
|
+
assert_equal "-c", flag.name
|
109
|
+
assert_equal 1, args.options.size
|
110
|
+
option = args.options[0]
|
111
|
+
assert_equal "--show-all", option.name
|
112
|
+
assert_equal "-a", option.given_name
|
113
|
+
assert_equal "true", option.value
|
114
|
+
assert_equal 2, args.values.size
|
115
|
+
assert_equal "infile", args.values[0]
|
116
|
+
assert_equal "outfile", args.values[1]
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_UseOfFlagsAsSpecificationsForOption
|
120
|
+
|
121
|
+
specifications = [
|
122
|
+
|
123
|
+
CLASP.Flag('--dump-contents', alias: '-d'),
|
124
|
+
CLASP.Option('--log-level', alias: '-l'),
|
125
|
+
CLASP.Flag('--log-level=warning', alias: '-w'),
|
126
|
+
]
|
127
|
+
|
128
|
+
argv = %w{ myfile -dw }
|
129
|
+
|
130
|
+
args = CLASP::Arguments.new(argv, specifications)
|
131
|
+
|
132
|
+
assert_equal 1, args.flags.size
|
133
|
+
flag = args.flags[0]
|
134
|
+
assert_equal "--dump-contents", flag.name
|
135
|
+
assert_equal "-dw", flag.given_name
|
136
|
+
assert_equal 1, flag.given_index
|
137
|
+
assert_equal 1, args.options.size
|
138
|
+
option = args.options[0]
|
139
|
+
assert_equal "--log-level", option.name
|
140
|
+
assert_equal "-dw", option.given_name
|
141
|
+
assert_equal 1, flag.given_index
|
142
|
+
assert_equal "warning", option.value
|
143
|
+
assert_equal 1, args.values.size
|
144
|
+
assert_equal "myfile", args.values[0]
|
145
|
+
end
|
146
146
|
end
|
147
147
|
|
148
|
-
# ############################## end of file ############################# #
|
149
|
-
|