clasp-ruby 0.10.2
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 +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
|
+
|