benry-actionrunner 0.1.0

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.
data/test/app_test.rb ADDED
@@ -0,0 +1,425 @@
1
+ # -*- coding: utf-8 -*-
2
+ # frozen_string_literal: true
3
+
4
+
5
+ require_relative './shared'
6
+
7
+
8
+ Oktest.scope do
9
+
10
+ before_all do
11
+ TestHelperModule.setup_all()
12
+ end
13
+
14
+ after_all do
15
+ TestHelperModule.teardown_all()
16
+ end
17
+
18
+
19
+ topic Benry::ActionRunner do
20
+
21
+ def new_app()
22
+ config = Benry::ActionRunner::CONFIG
23
+ gschema = Benry::ActionRunner::GLOBAL_OPTION_SCHEMA
24
+ app = Benry::ActionRunner::MainApplication.new(config, gschema)
25
+ return app
26
+ end
27
+
28
+ before do
29
+ clear_registry()
30
+ @app = new_app()
31
+ @filename = Benry::ActionRunner::DEFAULT_FILENAME
32
+ File.unlink(@filename) if File.exist?(@filename)
33
+ end
34
+
35
+ after do
36
+ File.unlink(@filename) if File.exist?(@filename)
37
+ end
38
+
39
+ def main(*args)
40
+ sout, serr, status = main!(*args)
41
+ ok {serr} == ""
42
+ ok {status} == 0
43
+ return sout
44
+ end
45
+
46
+ def main!(*args)
47
+ status = nil
48
+ sout, serr = capture_sio(tty: true) do
49
+ status = @app.main(args)
50
+ end
51
+ return sout, serr, status
52
+ end
53
+
54
+ topic('.main()') {
55
+ spec "[!wmcup] handles '$ACRIONRUNNER_OPTION' value." do
56
+ ENV['ACTIONRUNNER_OPTION'] = "-h -a"
57
+ at_end { ENV['ACTIONRUNNER_OPTION'] = nil }
58
+ sout, serr = capture_sio(tty: true) { Benry::ActionRunner.main(["-l"]) }
59
+ ok {serr} == ""
60
+ ok {sout} =~ /^\e\[1;34mUsage:\e\[0m$/
61
+ end
62
+ spec "[!hujvl] returns status code." do
63
+ status = nil
64
+ sout, serr = capture_sio(tty: true) {
65
+ status = Benry::ActionRunner.main(["-m"])
66
+ }
67
+ ok {status} == 1
68
+ ok {serr} == "\e\[31m[ERROR]\e\[0m -m: Unknown option.\n"
69
+ ok {sout} == ""
70
+ #
71
+ sout, serr = capture_sio(tty: true) {
72
+ status = Benry::ActionRunner.main(["-V"])
73
+ }
74
+ ok {status} == 0
75
+ ok {serr} == ""
76
+ ok {sout} != ""
77
+ end
78
+ }
79
+
80
+ topic('#parse_global_options()') {
81
+ spec "[!bpedh] parses `--<name>=<val>` as global variables." do
82
+ main "--g9942=ABC", "-h"
83
+ ok {$g9942} == "ABC"
84
+ end
85
+ spec "[!0tz4j] stops parsing options when any argument found." do
86
+ args = ["-hV", "-a", "help", "-a"]
87
+ @app.instance_eval { parse_global_options(args) }
88
+ ok {args} == ["help", "-a"]
89
+ end
90
+ spec "[!gkp9b] returns global options." do
91
+ args = ["-ha", "--g8839=DDD", "--g7402=EEE", "help"]
92
+ ret = @app.instance_eval { parse_global_options(args) }
93
+ ok {ret} == {:help => true, :all => true}
94
+ gvars = @app.instance_variable_get(:@global_vars)
95
+ ok {gvars} == {"g8839" => "DDD", "g7402" => "EEE"}
96
+ end
97
+ }
98
+
99
+ topic('#toggle_global_options()') {
100
+ spec "[!3kdds] global option '-C' sets `$COLOR_mode = false`." do
101
+ ok {$COLOR_MODE} == nil
102
+ at_end { $COLOR_MODE = nil }
103
+ main "-C", "-h"
104
+ ok {$COLOR_MODE} == false
105
+ end
106
+ spec "[!1882x] global option '-u' sets instance var." do
107
+ ok {@app.instance_variable_get(:@flag_search)} == false
108
+ main "-u", "-h"
109
+ ok {@app.instance_variable_get(:@flag_search)} == true
110
+ end
111
+ spec "[!bokge] global option '-w' sets instance var." do
112
+ ok {@app.instance_variable_get(:@flag_chdir)} == false
113
+ main "-w", "-h"
114
+ ok {@app.instance_variable_get(:@flag_chdir)} == true
115
+ end
116
+ spec "[!4sk24] global option '-f' changes filename." do
117
+ ok {@app.instance_variable_get(:@action_file)} == "Actionfile.rb"
118
+ main "-f", "Actions.rb", "-h"
119
+ ok {@app.instance_variable_get(:@action_file)} == "Actions.rb"
120
+ end
121
+ spec "[!9u400] sets `$BENRY_ECHOBACK = true` if option `-v` specified." do
122
+ bkup = $BENRY_ECHOBACK
123
+ at_end { $BENRY_ECHOBACK = bkup }
124
+ $BENRY_ECHOBACK = false
125
+ main "-v", "-h"
126
+ ok {$BENRY_ECHOBACK} == true
127
+ end
128
+ spec "[!jp2mw] sets `$BENRY_ECHOBACK = false` if option `-q` specified." do
129
+ bkup = $BENRY_ECHOBACK
130
+ at_end { $BENRY_ECHOBACK = bkup }
131
+ $BENRY_ECHOBACK = true
132
+ main "-q", "-h"
133
+ ok {$BENRY_ECHOBACK} == false
134
+ end
135
+ }
136
+
137
+ topic('#handle_global_options()') {
138
+ spec "[!psrmp] loads action file (if exists) before displaying help message." do
139
+ ok {@filename}.not_exist?
140
+ sout = arun "-h"
141
+ ok {sout}.include?(<<"END")
142
+
143
+ Actions:
144
+ help : print help message (of action if specified)
145
+
146
+ END
147
+ #
148
+ prepare_actionfile("a6913")
149
+ ok {@filename}.file_exist?
150
+ @app = new_app()
151
+ sout = arun "-h"
152
+ ok {sout}.include?(<<"END")
153
+
154
+ Actions:
155
+ a6913 : test
156
+ help : print help message (of action if specified)
157
+
158
+ END
159
+ end
160
+ spec "[!9wfaw] loads action file before listing actions by '-l' or '-L' option." do
161
+ sout = main "-g"
162
+ ok {@filename}.file_exist?
163
+ #
164
+ sout = arun "-l"
165
+ ok {sout}.include?(<<END)
166
+ Actions:
167
+ build : create all
168
+ build:zip : create zip file
169
+ clean : delete garbage files (and product files too if '-a')
170
+ END
171
+ #
172
+ sout = arun "-L", "actions"
173
+ ok {sout}.include?(<<END)
174
+ Actions:
175
+ build : create all
176
+ build:zip : create zip file
177
+ clean : delete garbage files (and product files too if '-a')
178
+ END
179
+ end
180
+ spec "[!qanx2] option '-l' and '-L' requires action file." do
181
+ ["-l", "-Lactions"].each do |opt|
182
+ ok {@filename}.not_exist?
183
+ sout, serr, status = arun! opt
184
+ ok {status} != 0
185
+ ok {serr} == "[ERROR] Action file ('Actionfile.rb') not found. Create it by `arun -g` command firstly.\n"
186
+ ok {sout} == ""
187
+ end
188
+ end
189
+ spec "[!7995e] option '-g' generates action file." do
190
+ ok {@filename}.not_exist?
191
+ system "arun", "-g", "-q"
192
+ ok {@filename}.file_exist?
193
+ end
194
+ spec "[!k5nuk] option '-h' or '--help' prints help message." do
195
+ sout = main "-h"
196
+ ok {sout} =~ /^\e\[1;34mUsage:\e\[0m$/
197
+ end
198
+ spec "[!dmxt2] option '-V' prints version number." do
199
+ sout = arun "-V"
200
+ ok {sout} == "#{Benry::ActionRunner::VERSION}\n"
201
+ end
202
+ spec "[!i4qm5] option '-v' sets `$VERBOSE_MODE = true`." do
203
+ bkup = $VERBOSE_MODE
204
+ at_end { $VERBOSE_MODE = bkup }
205
+ $VERBOSE_MODE = nil
206
+ main "-v", "-h"
207
+ ok {$VERBOSE_MODE} == true
208
+ end
209
+ spec "[!5nwnv] option '-q' sets `$QUIET_MODE = true`." do
210
+ bkup = $QUIET_MODE
211
+ at_end { $QUIET_MODE = bkup }
212
+ $QUIET_MODE = nil
213
+ main "-q", "-h"
214
+ ok {$QUIET_MODE} == true
215
+ end
216
+ spec "[!klxkr] option '-c' sets `$COLOR_MODE = true`." do
217
+ bkup = $COLOR_MODE
218
+ at_end { $COLOR_MODE = bkup }
219
+ $COLOR_MODE = nil
220
+ main "-c", "-h"
221
+ ok {$COLOR_MODE} == true
222
+ end
223
+ spec "[!kqbwd] option '-C' sets `$COLOR_MODE = false`." do
224
+ bkup = $COLOR_MODE
225
+ at_end { $COLOR_MODE = bkup }
226
+ $COLOR_MODE = nil
227
+ main "-C", "-h"
228
+ ok {$COLOR_MODE} == false
229
+ end
230
+ spec "[!oce46] option '-D' sets `$DEBUG_MODE = true`." do
231
+ bkup = $DEBUG_MODE
232
+ at_end { $DEBUG_MODE = bkup }
233
+ $DEBUG_MODE = nil
234
+ main "-D", "-h"
235
+ ok {$DEBUG_MODE} == true
236
+ end
237
+ spec "[!mq5ko] option '-T' enables trace mode." do
238
+ prepare_actionfile("a3349")
239
+ sout = main "-T", "a3349", "Alice"
240
+ ok {sout} == <<"END"
241
+ \e[33m### enter: a3349\e[0m
242
+ Hi, Alice!
243
+ \e[33m### exit: a3349\e[0m
244
+ END
245
+ end
246
+ spec "[!jwah3] option '-X' sets `$DRYRUN_MODE = true`." do
247
+ bkup = $DRYRUN_MODE
248
+ at_end { $DRYRUN_MODE = bkup }
249
+ $DRYRUN_MODE = nil
250
+ main "-X", "-h"
251
+ ok {$DRYRUN_MODE} == true
252
+ end
253
+ }
254
+
255
+ topic('#handle_action()') {
256
+ spec "[!qdrui] loads action file before performing actions." do
257
+ prepare_actionfile("a6315")
258
+ sout, serr = capture_sio do
259
+ @app.instance_eval { handle_action(["a6315", "Alice"], {}) }
260
+ end
261
+ ok {serr} == ""
262
+ ok {sout} == "Hi, Alice!\n"
263
+ end
264
+ spec "[!4992c] raises error if action specified but action file not exist." do
265
+ pr = proc do
266
+ @app.instance_eval { handle_action(["hello", "Alice"], {}) }
267
+ end
268
+ ok {pr}.raise?(Benry::CmdApp::CommandError,
269
+ "Action file ('Actionfile.rb') not found. Create it by `arun -g` command firstly.")
270
+ end
271
+ }
272
+
273
+ topic('#skip_backtrace?()') {
274
+ spec "[!k8ddu] ignores backtrace of 'actionrunner.rb'." do
275
+ prepare_actionfile("a7452", "run_once('hello')")
276
+ sout, serr = capture_sio(tty: true) { @app.main(["a7452"]) }
277
+ ok {sout} == ""
278
+ ok {serr} =~ /\e\[31m\[ERROR\]\e\[0m hello: Action not found\./
279
+ ok {serr} !~ /\bactionrunner\.rb/
280
+ end
281
+ spec "[!89mz3] ignores backtrace of 'kernel_require.rb'." do
282
+ prepare_actionfile("a7613", "run_once('hello')")
283
+ sout, serr = capture_sio(tty: true) { @app.main(["a7613"]) }
284
+ ok {sout} == ""
285
+ ok {serr} =~ /\e\[31m\[ERROR\]\e\[0m hello: Action not found\./
286
+ ok {serr} !~ /\brequire\b/
287
+ end
288
+ spec "[!ttt98] ignores backtrace of 'arun'." do
289
+ prepare_actionfile("a5310", "run_once('hello')")
290
+ sout, serr = capture_sio(tty: true) { @app.main(["a5310"]) }
291
+ ok {sout} == ""
292
+ ok {serr} =~ /\e\[31m\[ERROR\]\e\[0m hello: Action not found\./
293
+ ok {serr} !~ /\barun:/
294
+ end
295
+ spec "[!z72yj] not ignore backtrace of others." do
296
+ prepare_actionfile("a6230", "run_once('hello')")
297
+ sout, serr = capture_sio(tty: true) { @app.main(["a6230"]) }
298
+ ok {sout} == ""
299
+ ok {serr} =~ /\e\[31m\[ERROR\]\e\[0m hello: Action not found\./
300
+ ok {serr} =~ /oktest/
301
+ end
302
+ }
303
+
304
+ topic('#load_action_file()') {
305
+ spec "[!nx22j] returns false if action file already loaded." do
306
+ prepare_actionfile("a0572")
307
+ ok {@app.instance_eval { load_action_file() }} == true
308
+ ok {@app.instance_eval { load_action_file() }} == false
309
+ ok {@app.instance_eval { load_action_file() }} == false
310
+ end
311
+ spec "[!aov55] loads action file if exists." do
312
+ prepare_actionfile("a2894")
313
+ ok {Benry::CmdApp::REGISTRY.metadata_exist?("a2894")} == false
314
+ @app.instance_eval { load_action_file() }
315
+ ok {Benry::CmdApp::REGISTRY.metadata_exist?("a2894")} == true
316
+ end
317
+ spec "[!ssmww] raises error when `required: true` and action file not exist." do
318
+ ok {@filename}.not_exist?
319
+ pr = proc { @app.instance_eval { load_action_file() } }
320
+ ok {pr}.raise?(Benry::CmdApp::CommandError,
321
+ "Action file ('Actionfile.rb') not found. Create it by `arun -g` command firstly.")
322
+ end
323
+ spec "[!vwtwe] it is AFTER loading action file to set global variables." do
324
+ prepare_actionfile("a5298", "puts $_a5298.inspect") # ... (A)
325
+ File.open(@filename, "a") do |f|
326
+ f << "puts $_a5298.inspect\n" # ... (B)
327
+ end
328
+ sout, serr = capture_sio() do
329
+ @app.instance_eval {
330
+ @global_vars = {"_a5298" => "a5298val"}
331
+ load_action_file()
332
+ }
333
+ @app.main(["a5298", "Alice"])
334
+ end
335
+ ok {serr} == ""
336
+ ok {sout} == ("nil\n" + # ... (B)
337
+ "\"a5298val\"\n") # ... (A)
338
+ end
339
+ spec "[!8i55a] prevents to load action file more than once." do
340
+ prepare_actionfile("a8569")
341
+ File.open(@filename, "a") do |f|
342
+ f << "$_a8569 += 1\n"
343
+ end
344
+ $_a8569 = 0
345
+ @app.instance_eval { load_action_file() }
346
+ ok {$_a8569} == 1
347
+ @app.instance_eval { load_action_file() }
348
+ ok {$_a8569} == 1
349
+ ok {$_a8569} != 2
350
+ end
351
+ spec "[!f68yv] returns true if action file loaded successfully." do
352
+ prepare_actionfile("a9586")
353
+ ret1 = @app.instance_eval { load_action_file() }
354
+ ok {ret1} == true
355
+ ret2 = @app.instance_eval { load_action_file() }
356
+ ok {ret2} == false
357
+ ret3 = @app.instance_eval { load_action_file() }
358
+ ok {ret3} == false
359
+ end
360
+ }
361
+
362
+ topic('#generate_action_file()') {
363
+ spec "[!dta7r] generates action file." do
364
+ ok {@filename}.not_exist?
365
+ @app.instance_eval { generate_action_file(quiet: true) }
366
+ ok {@filename}.file_exist?
367
+ end
368
+ spec "[!tmlqt] prints action file content if filename is '-'." do
369
+ ok {@filename}.not_exist?
370
+ sout = main "-g", "-f", "-"
371
+ ok {@filename}.not_exist?
372
+ ok {sout} =~ /^include Benry::ActionRunner::Export$/
373
+ end
374
+ spec "[!ymrjh] prints action file content if stdout is not a tty." do
375
+ ok {@filename}.not_exist?
376
+ sout, serr = capture_sio(tty: false) do
377
+ @app.instance_eval { generate_action_file() }
378
+ end
379
+ ok {@filename}.not_exist?
380
+ ok {serr} == ""
381
+ ok {sout} =~ /^include Benry::ActionRunner::Export$/
382
+ end
383
+ spec "[!9e3c0] returns nil if action file is not generated." do
384
+ ret = nil
385
+ capture_sio(tty: false) do
386
+ @app.instance_eval {
387
+ @action_file = "-"
388
+ ret = generate_action_file(quiet: true)
389
+ }
390
+ end
391
+ ok {ret} == nil
392
+ end
393
+ spec "[!685cq] raises error if action file already exist." do
394
+ prepare_actionfile("a1697")
395
+ ok {@filename}.file_exist?
396
+ pr = proc do
397
+ @app.instance_eval { generate_action_file(quiet: true) }
398
+ end
399
+ ok {pr}.raise?(Benry::CmdApp::CommandError,
400
+ "Action file ('Actionfile.rb') already exists. If you want to generate a new one, delete it first.")
401
+ end
402
+ spec "[!n09pl] reports result if action file generated successfully." do
403
+ sout, serr = capture_sio(tty: true) do
404
+ @app.instance_eval { generate_action_file() }
405
+ end
406
+ ok {serr} == ""
407
+ ok {sout} == "[OK] Action file 'Actionfile.rb' generated.\n"
408
+ end
409
+ spec "[!iq0p2] reports nothing if option '-q' specified." do
410
+ sout, serr = capture_sio(tty: true) do
411
+ @app.instance_eval { generate_action_file(quiet: true) }
412
+ end
413
+ ok {serr} == ""
414
+ ok {sout} == ""
415
+ end
416
+ spec "[!bf60l] returns action file name if generated." do
417
+ ret = @app.instance_eval { generate_action_file(quiet: true) }
418
+ ok {ret} == @filename
419
+ end
420
+ }
421
+
422
+ end
423
+
424
+
425
+ end
@@ -0,0 +1,206 @@
1
+ # -*- coding: utf-8 -*-
2
+ # frozen_string_literal: true
3
+
4
+
5
+ require_relative './shared'
6
+
7
+
8
+ Oktest.scope do
9
+
10
+ before_all do
11
+ TestHelperModule.setup_all()
12
+ end
13
+
14
+ after_all do
15
+ TestHelperModule.teardown_all()
16
+ end
17
+
18
+
19
+ topic Benry::ActionRunner::Brownie do
20
+
21
+ before do
22
+ @filename = "Actionfile.rb"
23
+ $LOADED_FEATURES.delete(File.absolute_path(@filename))
24
+ config = Benry::ActionRunner::CONFIG
25
+ @brownie = Benry::ActionRunner::Brownie.new(config)
26
+ @registry = Benry::CmdApp::REGISTRY
27
+ end
28
+
29
+ after do
30
+ File.unlink(@filename) if File.exist?(@filename)
31
+ clear_registry()
32
+ end
33
+
34
+ def cd_tmpdir(dirpath, &b)
35
+ xs = dirpath.split("/")
36
+ (1..(xs.length)).each do |len|
37
+ dir = xs[0, len].join("/")
38
+ dummy_dir(dir)
39
+ end
40
+ pwd = Dir.pwd()
41
+ Dir.chdir(dirpath)
42
+ yield
43
+ ensure
44
+ Dir.chdir(pwd)
45
+ end
46
+
47
+
48
+ topic('#search_and_load_action_file()') {
49
+ #
50
+ spec "[!c9e1h] if action file exists in current dir, load it regardless of options." do
51
+ prepare_actionfile("a2071")
52
+ ok {@registry.metadata_exist?("a2071")} == false
53
+ @brownie.search_and_load_action_file(@filename, true, false)
54
+ ok {@registry.metadata_exist?("a2071")} == true
55
+ end
56
+ #
57
+ spec "[!m5oj7] if action file exists in parent dir, find and load it if option '-s' specified." do
58
+ prepare_actionfile("a4290")
59
+ cd_tmpdir("foo/bar") do
60
+ ok {@registry.metadata_exist?("a4290")} == false
61
+ @brownie.search_and_load_action_file(@filename, true, false)
62
+ ok {@registry.metadata_exist?("a4290")} == true
63
+ end
64
+ end
65
+ #
66
+ spec "[!079xs] returns nil if action file not found." do
67
+ ok {@filename}.not_exist?
68
+ ret = @brownie.search_and_load_action_file(@filename, true, false)
69
+ ok {ret} == nil
70
+ end
71
+ #
72
+ spec "[!7simq] changes current dir to where action file exists if option '-w' specified." do
73
+ prepare_actionfile("a0561", "puts Dir.pwd")
74
+ pwd1 = Dir.pwd()
75
+ cd_tmpdir("foo/bar") do
76
+ pwd2 = Dir.pwd()
77
+ ok {pwd2} == File.join(pwd1, "foo/bar")
78
+ sout = arun "-uw", "a0561"
79
+ ok {sout} == <<~"END"
80
+ $ cd ../..
81
+ #{pwd1}
82
+ END
83
+ end
84
+ end
85
+ #
86
+ spec "[!dg2qv] action file can has directory path." do
87
+ prepare_actionfile("a5767", "puts Dir.pwd")
88
+ pwd1 = Dir.pwd()
89
+ cd_tmpdir("foo/bar") do
90
+ sout = arun "-uw", "-f", "../Actionfile.rb", "a5767"
91
+ ok {sout} == <<~"END"
92
+ $ cd ..
93
+ #{File.join(pwd1, "foo")}
94
+ END
95
+ end
96
+ end
97
+ #
98
+ spec "[!d987b] loads action file if exists." do
99
+ prepare_actionfile("a5626")
100
+ cd_tmpdir("foo/bar") do
101
+ ok {@registry.metadata_exist?("a5626")} == false
102
+ sout = arun "-uw", "a5626", "Bob"
103
+ ok {sout} == <<~"END"
104
+ $ cd ../..
105
+ Hi, Bob!
106
+ END
107
+ end
108
+ end
109
+ #
110
+ spec "[!x9xxl] returns absolute path of action file if exists." do
111
+ prepare_actionfile("a4156")
112
+ pwd = Dir.pwd()
113
+ $BENRY_ECHOBACK = false
114
+ cd_tmpdir("foo/bar") do
115
+ ok {@registry.metadata_exist?("a4156")} == false
116
+ ret = @brownie.search_and_load_action_file(@filename, true, true)
117
+ ok {@registry.metadata_exist?("a4156")} == true
118
+ ok {ret} == File.join(pwd, "Actionfile.rb")
119
+ end
120
+ $BENRY_ECHOBACK = true
121
+ end
122
+ }
123
+
124
+ topic('#populate_global_variables()') {
125
+ #
126
+ spec "[!cr2ph] sets global variables." do
127
+ gvars = {"g5933x" => "ABC", "g5933y" => "123"}
128
+ @brownie.populate_global_variables(gvars)
129
+ ok {$g5933x} == "ABC"
130
+ ok {$g5933y} == 123
131
+ end
132
+ #
133
+ spec "[!3kow3] normalizes global variable names." do
134
+ gvars = {"g8258-vari-@able" => "ABC"}
135
+ @brownie.populate_global_variables(gvars)
136
+ ok {$g8258_vari__able} == "ABC"
137
+ end
138
+ #
139
+ spec "[!03x7t] decodes JSON string into Ruby object." do
140
+ gvars = {"g6950" => "[123, true, null]"}
141
+ @brownie.populate_global_variables(gvars)
142
+ ok {$g6950} == [123, true, nil]
143
+ end
144
+ #
145
+ spec "[!1ol4a] print global variables if debug mode is on." do
146
+ gvars = {"g7091" => '{"a": 123}'}
147
+ $DEBUG_MODE = true
148
+ at_end { $DEBUG_MODE = nil }
149
+ sout, serr = capture_sio do
150
+ @brownie.populate_global_variables(gvars)
151
+ end
152
+ ok {serr} == ""
153
+ ok {sout} == "[DEBUG] $g7091 = {\"a\"=>123}\n"
154
+ end
155
+ }
156
+
157
+ topic('#_decode_value()') {
158
+ #
159
+ spec "[!omxyf] decodes string as JSON format." do
160
+ str = '["ABC", 123, true, null]'
161
+ val = @brownie.instance_eval { _decode_value(str) }
162
+ ok {val} == ["ABC", 123, true, nil]
163
+ end
164
+ #
165
+ spec "[!tvwvn] returns string as it is if failed to parse as JSON." do
166
+ str = 'nil'
167
+ val = @brownie.instance_eval { _decode_value(str) }
168
+ ok {val} == "nil"
169
+ end
170
+ }
171
+
172
+ topic('#_debug_global_var()') {
173
+ #
174
+ spec "[!05l5f] prints var name and it's value." do
175
+ sout, serr = capture_sio(tty: false) do
176
+ @brownie.instance_eval { _debug_global_var("var1", ["val1"]) }
177
+ end
178
+ ok {serr} == ""
179
+ ok {sout} == "[DEBUG] $var1 = [\"val1\"]\n"
180
+ end
181
+ #
182
+ spec "[!7lwvz] colorizes output if color mode enabled." do
183
+ sout, serr = capture_sio(tty: true) do
184
+ @brownie.instance_eval { _debug_global_var("var1", ["val1"]) }
185
+ end
186
+ ok {serr} == ""
187
+ ok {sout} == "\e[2m[DEBUG] $var1 = [\"val1\"]\e[0m\n"
188
+ end
189
+ }
190
+
191
+ topic('#render_action_file_content()') {
192
+ #
193
+ spec "[!oc03q] returns content of action file." do
194
+ filename = "Actionfile.rb"
195
+ s = @brownie.render_action_file_content(filename)
196
+ ok {s} != ""
197
+ dummy_file(filename, s)
198
+ output = `ruby -wc #{filename}`
199
+ ok {output} == "Syntax OK\n"
200
+ end
201
+ }
202
+
203
+ end
204
+
205
+
206
+ end
data/test/help_test.rb ADDED
@@ -0,0 +1,33 @@
1
+ # -*- coding: utf-8 -*-
2
+ # frozen_string_literal: true
3
+
4
+
5
+ require_relative './shared'
6
+
7
+
8
+ Oktest.scope do
9
+
10
+ before_all do
11
+ TestHelperModule.setup_all()
12
+ end
13
+
14
+ after_all do
15
+ TestHelperModule.teardown_all()
16
+ end
17
+
18
+
19
+ topic Benry::ActionRunner::ApplicationHelpBuilderModule do
20
+
21
+ topic('#section_options()') {
22
+ topic "option '-h, '--help'" do
23
+ spec "[!xsfzi] adds '--<name>=<value>' to help message." do
24
+ sout = arun "-h"
25
+ ok {sout} =~ /^ --<name>=<value> : set a global variable \(value can be in JSON format\)$/
26
+ end
27
+ end
28
+ }
29
+
30
+ end
31
+
32
+
33
+ end