clasp-ruby 0.10.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +30 -0
- data/README.md +186 -0
- data/examples/cr-example.rb +63 -0
- data/lib/clasp-ruby.rb +51 -0
- data/lib/clasp.rb +51 -0
- data/lib/clasp/aliases.rb +256 -0
- data/lib/clasp/arguments.rb +467 -0
- data/lib/clasp/clasp.rb +54 -0
- data/lib/clasp/cli.rb +264 -0
- data/lib/clasp/doc_.rb +151 -0
- data/lib/clasp/old_module.rb +54 -0
- data/lib/clasp/version.rb +69 -0
- data/test/scratch/test_aliases.rb +38 -0
- data/test/scratch/test_list_command_line.rb +37 -0
- data/test/scratch/test_usage.rb +32 -0
- data/test/scratch/test_usage_with_duplicate_aliases.rb +30 -0
- data/test/unit/tc_ARGV_rewrite.rb +61 -0
- data/test/unit/tc_aliases.rb +75 -0
- data/test/unit/tc_arguments_1.rb +684 -0
- data/test/unit/tc_arguments_2.rb +65 -0
- data/test/unit/tc_arguments_3.rb +89 -0
- data/test/unit/tc_defaults_1.rb +73 -0
- data/test/unit/tc_examples_Arguments.rb +149 -0
- data/test/unit/tc_usage.rb +110 -0
- data/test/unit/ts_all.rb +13 -0
- metadata +70 -0
@@ -0,0 +1,65 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
|
4
|
+
|
5
|
+
require 'clasp'
|
6
|
+
|
7
|
+
require 'test/unit'
|
8
|
+
|
9
|
+
class Test_Arguments_2 < Test::Unit::TestCase
|
10
|
+
|
11
|
+
def test_combined_flags_0
|
12
|
+
|
13
|
+
aliases = [
|
14
|
+
]
|
15
|
+
args = CLASP::Arguments.new [ '-abc' ], aliases
|
16
|
+
|
17
|
+
assert_equal 1, args.flags.size
|
18
|
+
assert_equal '-abc', args.flags[0].name
|
19
|
+
assert_equal '-abc', args.flags[0].to_s
|
20
|
+
assert_equal 'abc', args.flags[0].given_label
|
21
|
+
assert_equal 1, args.flags[0].given_hyphens
|
22
|
+
assert_nil args.flags[0].argument_alias
|
23
|
+
assert_equal Hash.new, args.flags[0].extras
|
24
|
+
|
25
|
+
assert_equal 0, args.options.size
|
26
|
+
|
27
|
+
assert_equal 0, args.values.size
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_combined_flags_1
|
31
|
+
|
32
|
+
aliases = [
|
33
|
+
CLASP.Flag('--a', alias: '-a'),
|
34
|
+
CLASP.Flag('--b', alias: '-b'),
|
35
|
+
CLASP.Flag('--c', alias: '-c'),
|
36
|
+
]
|
37
|
+
args = CLASP::Arguments.new [ '-abc' ], aliases
|
38
|
+
|
39
|
+
assert_equal 3, args.flags.size
|
40
|
+
assert_equal '--a', args.flags[0].name
|
41
|
+
assert_equal '--a', args.flags[0].to_s
|
42
|
+
assert_equal 'abc', args.flags[0].given_label
|
43
|
+
assert_equal 1, args.flags[0].given_hyphens
|
44
|
+
assert_equal aliases[0], args.flags[0].argument_alias
|
45
|
+
assert_equal Hash.new, args.flags[0].extras
|
46
|
+
assert_equal '--b', args.flags[1].name
|
47
|
+
assert_equal '--b', args.flags[1].to_s
|
48
|
+
assert_equal 'abc', args.flags[1].given_label
|
49
|
+
assert_equal 1, args.flags[1].given_hyphens
|
50
|
+
assert_equal aliases[1], args.flags[1].argument_alias
|
51
|
+
assert_equal Hash.new, args.flags[1].extras
|
52
|
+
assert_equal '--c', args.flags[2].name
|
53
|
+
assert_equal '--c', args.flags[2].to_s
|
54
|
+
assert_equal 'abc', args.flags[2].given_label
|
55
|
+
assert_equal 1, args.flags[2].given_hyphens
|
56
|
+
assert_equal aliases[2], args.flags[2].argument_alias
|
57
|
+
assert_equal Hash.new, args.flags[2].extras
|
58
|
+
|
59
|
+
assert_equal 0, args.options.size
|
60
|
+
|
61
|
+
assert_equal 0, args.values.size
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
|
@@ -0,0 +1,89 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
|
4
|
+
|
5
|
+
require 'clasp'
|
6
|
+
|
7
|
+
require 'test/unit'
|
8
|
+
|
9
|
+
class Test_Arguments_3 < Test::Unit::TestCase
|
10
|
+
|
11
|
+
def test_include_flag_1
|
12
|
+
|
13
|
+
args = CLASP::Arguments.new [ '-f1', 'value1', '--option1=value1', '--flag2' ], nil
|
14
|
+
|
15
|
+
assert args.flags.include? '-f1'
|
16
|
+
assert not(args.flags.include? '-f2')
|
17
|
+
assert args.flags.include? '--flag2'
|
18
|
+
assert not(args.flags.include? '--option1')
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_include_flag_2
|
22
|
+
|
23
|
+
aliases = [
|
24
|
+
CLASP.Flag('--flag1', alias: '-f1'),
|
25
|
+
]
|
26
|
+
args = CLASP::Arguments.new [ '-f1', 'value1', '--option1=value1', '--flag2' ], aliases
|
27
|
+
|
28
|
+
assert args.flags.include? '-f1'
|
29
|
+
assert args.flags.include? '--flag1'
|
30
|
+
assert not(args.flags.include? '-f2')
|
31
|
+
assert args.flags.include? '--flag2'
|
32
|
+
assert not(args.flags.include? '--option1')
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_combined_flags_1
|
36
|
+
|
37
|
+
aliases = [
|
38
|
+
CLASP.Flag('--delete', alias: '-d'),
|
39
|
+
CLASP.Flag('--update', alias: '-u'),
|
40
|
+
]
|
41
|
+
args = CLASP::Arguments.new [ '-du' ], aliases
|
42
|
+
|
43
|
+
assert args.flags.include? '--delete'
|
44
|
+
assert args.flags.include? '--update'
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_get_option_1
|
48
|
+
|
49
|
+
args = CLASP::Arguments.new [ '-f1', 'value1', '--option1=value1', '--flag2' ], nil
|
50
|
+
|
51
|
+
assert args.options.include? '--option1'
|
52
|
+
assert not(args.options.include? '--option1=value1')
|
53
|
+
assert not(args.options.include? '-f1')
|
54
|
+
assert not(args.options.include? '--flag2')
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_get_option_2
|
58
|
+
|
59
|
+
aliases = [
|
60
|
+
CLASP.Flag('--flag1', alias: '-f1'),
|
61
|
+
CLASP.Option('--option1', alias: '-o1'),
|
62
|
+
]
|
63
|
+
args = CLASP::Arguments.new [ '-f1', 'value1', '-o1=value1', '--flag2' ], aliases
|
64
|
+
|
65
|
+
assert args.options.include? '-o1'
|
66
|
+
assert args.options.include? '--option1'
|
67
|
+
assert not(args.options.include? '--option1=value1')
|
68
|
+
assert not(args.options.include? '-f1')
|
69
|
+
assert not(args.options.include? '--flag2')
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_combined_flags_and_options_1
|
73
|
+
|
74
|
+
aliases = [
|
75
|
+
CLASP.Flag('--delete', alias: '-d'),
|
76
|
+
CLASP.Flag('--update', alias: '-u'),
|
77
|
+
CLASP.Option('--encryption', alias: '-e'),
|
78
|
+
CLASP.Option('--encryption=blowfish', alias: '-b'),
|
79
|
+
]
|
80
|
+
args = CLASP::Arguments.new [ '-du', '-e', 'sha' ], aliases
|
81
|
+
|
82
|
+
assert args.flags.include? '--delete'
|
83
|
+
assert args.flags.include? '--update'
|
84
|
+
assert args.options.include? '--encryption'
|
85
|
+
assert_not_nil args.options.detect { |o| o == '--encryption' }
|
86
|
+
assert_nil args.options.detect { |o| o == '--blah' }
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
@@ -0,0 +1,73 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
|
4
|
+
|
5
|
+
require 'clasp'
|
6
|
+
|
7
|
+
require 'test/unit'
|
8
|
+
|
9
|
+
class Test_defaults < Test::Unit::TestCase
|
10
|
+
|
11
|
+
def test_responds_to_Help
|
12
|
+
|
13
|
+
assert CLASP::Flag.respond_to? :Help
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_Help_is_idempotent
|
17
|
+
|
18
|
+
help_1 = CLASP::Flag.Help
|
19
|
+
help_2 = CLASP::Flag.Help
|
20
|
+
|
21
|
+
assert_same help_1, help_2
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_Help_attributes
|
25
|
+
|
26
|
+
assert_equal '--help', CLASP::Flag.Help.name
|
27
|
+
|
28
|
+
assert_equal [], CLASP::Flag.Help.aliases
|
29
|
+
|
30
|
+
assert_equal 'shows this help and terminates', CLASP::Flag.Help.help
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_Help_extras
|
34
|
+
|
35
|
+
help1 = CLASP::Flag.Help
|
36
|
+
help2 = CLASP::Flag.Help(v1: 'v', v2: 2)
|
37
|
+
|
38
|
+
assert_equal Hash.new, help1.extras
|
39
|
+
assert_equal Hash[ [ [ :v1, 'v' ], [ :v2, 2 ] ] ], help2.extras
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_responds_to_Version
|
43
|
+
|
44
|
+
assert CLASP::Flag.respond_to? :Version
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_Version_is_idempotent
|
48
|
+
|
49
|
+
version_1 = CLASP::Flag.Version
|
50
|
+
version_2 = CLASP::Flag.Version
|
51
|
+
|
52
|
+
assert_same version_1, version_2
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_Version_attributes
|
56
|
+
|
57
|
+
assert_equal '--version', CLASP::Flag.Version.name
|
58
|
+
|
59
|
+
assert_equal [], CLASP::Flag.Version.aliases
|
60
|
+
|
61
|
+
assert_equal 'shows version and terminates', CLASP::Flag.Version.help
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_Version_extras
|
65
|
+
|
66
|
+
version1 = CLASP::Flag.Version
|
67
|
+
version2 = CLASP::Flag.Version(v1: 'v', v2: 2)
|
68
|
+
|
69
|
+
assert_equal Hash.new, version1.extras
|
70
|
+
assert_equal Hash[ [ [ :v1, 'v' ], [ :v2, 2 ] ] ], version2.extras
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
@@ -0,0 +1,149 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
|
4
|
+
|
5
|
+
require 'clasp'
|
6
|
+
|
7
|
+
require 'test/unit'
|
8
|
+
|
9
|
+
class Test_Examples < Test::Unit::TestCase
|
10
|
+
|
11
|
+
def test_SimpleCommandLineNoAliases
|
12
|
+
|
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
|
+
|
29
|
+
def test_UseOfSpecialDoubleSlashFlagToTreatAllSubsequentArgumentsAsValues
|
30
|
+
|
31
|
+
argv = %w{ --show-all=true -- infile outfile -c }
|
32
|
+
|
33
|
+
args = CLASP::Arguments.new(argv)
|
34
|
+
|
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
|
+
aliases = [
|
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, aliases)
|
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
|
+
aliases = [
|
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, aliases)
|
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
|
+
aliases = [
|
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, aliases)
|
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_UseOfFlagsAsAliasesForOption
|
120
|
+
|
121
|
+
aliases = [
|
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, aliases)
|
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
|
+
end
|
147
|
+
|
148
|
+
# ############################## end of file ############################# #
|
149
|
+
|
@@ -0,0 +1,110 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
|
4
|
+
|
5
|
+
require 'clasp'
|
6
|
+
|
7
|
+
require 'test/unit'
|
8
|
+
|
9
|
+
require 'stringio'
|
10
|
+
|
11
|
+
class Test_Usage < Test::Unit::TestCase
|
12
|
+
|
13
|
+
def test_empty_default
|
14
|
+
|
15
|
+
aliases = []
|
16
|
+
|
17
|
+
stream = StringIO.new
|
18
|
+
|
19
|
+
CLASP.show_usage aliases, stream: stream, program_name: 'myprog'
|
20
|
+
|
21
|
+
assert_equal "USAGE: myprog [ ... flags and options ... ]\n\n", stream.string
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_empty_all
|
25
|
+
|
26
|
+
aliases = []
|
27
|
+
|
28
|
+
stream = StringIO.new
|
29
|
+
|
30
|
+
CLASP.show_usage aliases, stream: stream, program_name: 'myprog', flags_and_options: ''
|
31
|
+
|
32
|
+
assert_equal "USAGE: myprog\n\n", stream.string
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_empty_all_with_info_line_of_one_string
|
36
|
+
|
37
|
+
aliases = []
|
38
|
+
|
39
|
+
stream = StringIO.new
|
40
|
+
|
41
|
+
info = 'myprog version'
|
42
|
+
|
43
|
+
CLASP.show_usage aliases, stream: stream, program_name: 'myprog', flags_and_options: '', info_lines: info
|
44
|
+
|
45
|
+
assert_equal "myprog version\nUSAGE: myprog\n\n", stream.string
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_empty_all_with_info_lines
|
49
|
+
|
50
|
+
aliases = []
|
51
|
+
|
52
|
+
stream = StringIO.new
|
53
|
+
|
54
|
+
info_lines = [
|
55
|
+
|
56
|
+
'Synesis Software My Program',
|
57
|
+
'version 1',
|
58
|
+
]
|
59
|
+
|
60
|
+
CLASP.show_usage aliases, stream: stream, program_name: 'myprog', flags_and_options: '', info_lines: info_lines
|
61
|
+
|
62
|
+
assert_equal "Synesis Software My Program\nversion 1\nUSAGE: myprog\n\n", stream.string
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_empty_all_with_info_lines_including_version
|
66
|
+
|
67
|
+
aliases = []
|
68
|
+
|
69
|
+
stream = StringIO.new
|
70
|
+
|
71
|
+
info_lines = [
|
72
|
+
|
73
|
+
'Synesis Software My Program',
|
74
|
+
:version
|
75
|
+
]
|
76
|
+
|
77
|
+
CLASP.show_usage aliases, stream: stream, program_name: 'myprog', flags_and_options: '', info_lines: info_lines, version: [ 1, 0, 1], version_prefix: 'v'
|
78
|
+
|
79
|
+
assert_equal "Synesis Software My Program\nmyprog v1.0.1\nUSAGE: myprog\n\n", stream.string
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_one_alias_default
|
83
|
+
|
84
|
+
aliases = [
|
85
|
+
|
86
|
+
CLASP::Flag.Version
|
87
|
+
]
|
88
|
+
|
89
|
+
stream = StringIO.new
|
90
|
+
|
91
|
+
CLASP.show_usage aliases, stream: stream, program_name: 'myprog'
|
92
|
+
|
93
|
+
assert_equal "USAGE: myprog [ ... flags and options ... ]\n\nflags/options:\n\n\t--version\n\t\t#{CLASP::Flag.Version.help}\n\n", stream.string
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_one_alias_all
|
97
|
+
|
98
|
+
aliases = [
|
99
|
+
|
100
|
+
CLASP::Flag.Version
|
101
|
+
]
|
102
|
+
|
103
|
+
stream = StringIO.new
|
104
|
+
|
105
|
+
CLASP.show_usage aliases, stream: stream, program_name: 'myprog', flags_and_options: ''
|
106
|
+
|
107
|
+
assert_equal "USAGE: myprog\n\nflags/options:\n\n\t--version\n\t\t#{CLASP::Flag.Version.help}\n\n", stream.string
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|