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
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
|
# frozen_string_literal: false
require 'test/unit'
require 'optparse'
require 'tmpdir'
class TestOptionParserLoad < Test::Unit::TestCase
def setup
@tmpdir = Dir.mktmpdir("optparse_test-")
@basename = File.basename($0, '.*')
@envs = %w[HOME XDG_CONFIG_HOME XDG_CONFIG_DIRS].each_with_object({}) do |v, h|
h[v] = ENV.delete(v)
end
end
def teardown
ENV.update(@envs)
FileUtils.rm_rf(@tmpdir)
end
def new_parser
@result = nil
OptionParser.new do |opt|
opt.on("--test=arg") {|v| @result = v}
end
end
def assert_load(result)
assert new_parser.load
assert_equal(result, @result)
assert new_parser.load(into: into = {})
assert_equal({test: result}, into)
end
def setup_options(env, dir, suffix = nil)
optdir = File.join(@tmpdir, dir)
FileUtils.mkdir_p(optdir)
file = File.join(optdir, [@basename, suffix].join(""))
File.write(file, "--test=#{dir}")
ENV.update(env)
if block_given?
begin
yield dir, optdir
ensure
File.unlink(file)
Dir.rmdir(optdir) rescue nil
end
else
return dir, optdir
end
end
def setup_options_home(&block)
setup_options({'HOME'=>@tmpdir}, ".options", &block)
end
def setup_options_xdg_config_home(&block)
setup_options({'XDG_CONFIG_HOME'=>@tmpdir+"/xdg"}, "xdg", ".options", &block)
end
def setup_options_home_config(&block)
setup_options({'HOME'=>@tmpdir}, ".config", ".options", &block)
end
def setup_options_xdg_config_dirs(&block)
setup_options({'XDG_CONFIG_DIRS'=>@tmpdir+"/xdgconf"}, "xdgconf", ".options", &block)
end
def setup_options_home_config_settings(&block)
setup_options({'HOME'=>@tmpdir}, "config/settings", ".options", &block)
end
def test_load_home_options
result, = setup_options_home
assert_load(result)
setup_options_xdg_config_home do
assert_load(result)
end
setup_options_home_config do
assert_load(result)
end
setup_options_xdg_config_dirs do
assert_load(result)
end
setup_options_home_config_settings do
assert_load(result)
end
end
def test_load_xdg_config_home
result, = setup_options_xdg_config_home
assert_load(result)
setup_options_home_config do
assert_load(result)
end
setup_options_xdg_config_dirs do
assert_load(result)
end
setup_options_home_config_settings do
assert_load(result)
end
end
def test_load_home_config
result, = setup_options_home_config
assert_load(result)
setup_options_xdg_config_dirs do
assert_load(result)
end
setup_options_home_config_settings do
assert_load(result)
end
end
def test_load_xdg_config_dirs
result, = setup_options_xdg_config_dirs
assert_load(result)
setup_options_home_config_settings do
assert_load(result)
end
end
def test_load_home_config_settings
result, = setup_options_home_config_settings
assert_load(result)
end
def test_load_nothing
assert !new_parser.load
assert_nil @result
end
end
|