clasp-ruby 0.23.0.2 → 0.23.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/examples/cr-example.rb +16 -16
- data/examples/flag_and_option_specifications.rb +15 -15
- data/examples/show_usage_and_version.rb +10 -11
- data/lib/clasp/arguments.rb +86 -87
- data/lib/clasp/clasp.rb +15 -11
- data/lib/clasp/cli.rb +135 -134
- data/lib/clasp/old_module.rb +8 -8
- data/lib/clasp/specifications.rb +325 -322
- data/lib/clasp/util/exceptions.rb +21 -22
- data/lib/clasp/util/value_parser.rb +99 -101
- data/lib/clasp/version.rb +12 -12
- data/lib/clasp-ruby.rb +8 -7
- data/lib/clasp.rb +8 -7
- data/test/scratch/test_list_command_line.rb +6 -6
- data/test/scratch/test_specifications.rb +14 -14
- data/test/scratch/test_usage.rb +5 -5
- data/test/scratch/test_usage_with_duplicate_specifications.rb +5 -5
- data/test/unit/tc_ARGV_rewrite.rb +36 -36
- data/test/unit/tc_arguments_1.rb +708 -708
- data/test/unit/tc_arguments_2.rb +43 -43
- data/test/unit/tc_arguments_3.rb +77 -77
- data/test/unit/tc_arguments_inspect.rb +55 -55
- 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 -130
- data/test/unit/tc_extras.rb +24 -24
- data/test/unit/tc_option_required.rb +38 -38
- data/test/unit/tc_option_value_aliases.rb +44 -44
- data/test/unit/tc_specifications.rb +7 -7
- data/test/unit/tc_typed_options.rb +200 -200
- data/test/unit/tc_usage.rb +69 -69
- data/test/unit/tc_with_action.rb +23 -23
- metadata +9 -8
@@ -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,140 +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
|
|