1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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
|
require 'test_helper'
module Slop
class ReverseEverythingOption < BoolOption
def finish(result)
result.used_options.grep(Slop::StringOption).each do |opt|
opt.value = opt.value.reverse
end
end
end
end
describe Slop::Result do
before do
@options = Slop::Options.new
@verbose = @options.bool "-v", "--verbose"
@name = @options.string "--name"
@unused = @options.string "--unused"
@long_option = @options.string "--long-option"
@result = @options.parse %w(foo -v --name lee --long-option bar argument)
end
it "increments option count" do
# test this here so it's more "full stack"
assert_equal 1, @verbose.count
assert_equal 1, @long_option.count
@result.parser.parse %w(-v --verbose)
assert_equal 2, @verbose.count
end
it "handles default values" do
@options.string("--foo", default: "bar")
@result.parser.parse %w()
assert_equal "bar", @result[:foo]
@result.parser.parse %w(--foo)
assert_equal "bar", @result[:foo]
end
it "handles custom finishing" do
@options.string "--foo"
@options.reverse_everything "-r"
@result.parser.parse %w(-r --name lee --foo bar)
assert_equal %w(eel rab), @result.to_hash.values_at(:name, :foo)
end
it "yields arguments to option blocks" do
output = nil
@options.string("--foo") { |v| output = v }
@result.parser.parse %w(--foo bar)
assert_equal output, "bar"
end
describe "#[]" do
it "returns an options value" do
assert_equal "lee", @result["name"]
assert_equal "lee", @result[:name]
assert_equal "lee", @result["--name"]
assert_equal "bar", @result["long_option"]
assert_equal "bar", @result[:long_option]
assert_equal "bar", @result["--long-option"]
end
end
describe "#[]=" do
it "sets an options value" do
assert_equal "lee", @result["name"]
@result["name"] = "bob"
assert_equal "bob", @result[:name]
end
it "raises if an option isn't found" do
assert_raises ArgumentError do
@result["zomg"] = "something"
end
end
end
describe "#method_missing" do
it "checks if options have been used" do
assert_equal true, @result.verbose?
assert_equal false, @result.unused?
assert_equal true, @result.long_option?
end
end
describe "#option" do
it "returns an option by flag" do
assert_equal @verbose, @result.option("--verbose")
assert_equal @verbose, @result.option("-v")
assert_equal @long_option, @result.option("--long-option")
end
it "ignores prefixed hyphens" do
assert_equal @verbose, @result.option("verbose")
assert_equal @verbose, @result.option("-v")
end
it "returns nil if nothing is found" do
assert_nil @result.option("foo")
end
end
describe "#to_hash" do
it "returns option keys and values" do
assert_equal({ verbose: true, name: "lee", unused: nil, long_option: "bar" },
@result.to_hash)
end
end
end
|