razorrisk-razor-control 0.1

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.
Files changed (39) hide show
  1. checksums.yaml +7 -0
  2. data/RakeFile +46 -0
  3. data/lib/razor_risk/razor/control/cucumber_helpers/consolidate_reports.rb +80 -0
  4. data/lib/razor_risk/razor/control/cucumber_helpers/executor.rb +108 -0
  5. data/lib/razor_risk/razor/control/cucumber_helpers.rb +3 -0
  6. data/lib/razor_risk/razor/control/diagnostics/util_functions.rb +203 -0
  7. data/lib/razor_risk/razor/control/diagnostics/zeroth_include.rb +27 -0
  8. data/lib/razor_risk/razor/control/exceptions.rb +121 -0
  9. data/lib/razor_risk/razor/control/gem/gem_helpers.rb +397 -0
  10. data/lib/razor_risk/razor/control/rake_helpers/aborter.rb +90 -0
  11. data/lib/razor_risk/razor/control/rake_helpers/diagnostic_tasks.rb +74 -0
  12. data/lib/razor_risk/razor/control/rake_helpers/gem_tasks.rb +128 -0
  13. data/lib/razor_risk/razor/control/rake_helpers/razor_tasks.rb +195 -0
  14. data/lib/razor_risk/razor/control/rake_helpers/task_helpers.rb +86 -0
  15. data/lib/razor_risk/razor/control/rake_helpers.rb +3 -0
  16. data/lib/razor_risk/razor/control/razor/executor.rb +131 -0
  17. data/lib/razor_risk/razor/control/razor/razor_instance.rb +227 -0
  18. data/lib/razor_risk/razor/control/razor.rb +2 -0
  19. data/lib/razor_risk/razor/control/version.rb +41 -0
  20. data/test/unit/control/cucumber_helpers/reports/expected/groups.html +213 -0
  21. data/test/unit/control/cucumber_helpers/reports/expected/no_groups.html +170 -0
  22. data/test/unit/control/cucumber_helpers/reports/groups/LbbwConfig/LbbwConfig.json +69 -0
  23. data/test/unit/control/cucumber_helpers/reports/groups/StandardConfig/StandardConfig.json +69 -0
  24. data/test/unit/control/cucumber_helpers/reports/no_groups/LbbwConfig.json +69 -0
  25. data/test/unit/control/cucumber_helpers/reports/no_groups/StandardConfig/StandardConfig.json +69 -0
  26. data/test/unit/control/cucumber_helpers/tc_consolidate_reports.rb +73 -0
  27. data/test/unit/control/cucumber_helpers/tc_executor.rb +406 -0
  28. data/test/unit/control/gem/tc_gem_helpers.rb +405 -0
  29. data/test/unit/control/rake_helpers/tc_aborter.rb +131 -0
  30. data/test/unit/control/rake_helpers/tc_task_helpers.rb +228 -0
  31. data/test/unit/control/razor/tc_executor.rb +129 -0
  32. data/test/unit/control/razor/tc_razor_instance.rb +517 -0
  33. data/test/unit/control/razor/test_scripts/exit_failure.cmd +3 -0
  34. data/test/unit/control/razor/test_scripts/exit_strange.cmd +3 -0
  35. data/test/unit/control/razor/test_scripts/exit_success.cmd +3 -0
  36. data/test/unit/control/razor/test_scripts/pause.cmd +5 -0
  37. data/test/unit/control/razor/test_scripts/print.cmd +6 -0
  38. data/test/unit/control/tc_exceptions.rb +120 -0
  39. metadata +192 -0
@@ -0,0 +1,228 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
6
+ #
7
+ # ######################################################################## #
8
+
9
+ $:.unshift File.join(File.dirname(__FILE__), *(['..'] * 4), 'lib')
10
+
11
+ unless $DEBUG
12
+
13
+ require 'pantheios/globals'
14
+ require 'pantheios/services/null_log_service'
15
+
16
+ ::Pantheios::Globals.INITIAL_SERVICE_CLASSES = [ ::Pantheios::Services::NullLogService ]
17
+ end
18
+
19
+ require 'razor_risk/razor/control/rake_helpers/task_helpers'
20
+
21
+ require 'xqsr3/extensions/test/unit'
22
+
23
+ require 'test/unit'
24
+
25
+ class Test_TaskHelper < Test::Unit::TestCase
26
+
27
+ include ::RazorRisk::Razor::Control::RakeHelpers
28
+
29
+ def setup
30
+
31
+ ::Rake::Task.clear
32
+ end
33
+
34
+ def test_is_a_class
35
+
36
+ assert_kind_of ::Class, TaskHelpers
37
+ end
38
+
39
+ def test_doesnt_adds_hooks_with_no_tasks
40
+
41
+ assert_empty ::Rake::Task.tasks
42
+ TaskHelpers.add_hooks
43
+ assert_empty ::Rake::Task.tasks
44
+ end
45
+
46
+ def test_adds_hooks_to_tasks
47
+
48
+ assert_empty ::Rake::Task.tasks
49
+
50
+ ::Rake::Task.define_task(:dummy_task)
51
+
52
+ assert_equal 1, ::Rake::Task.tasks.size
53
+ assert_equal 'dummy_task', ::Rake::Task.tasks.first.name
54
+
55
+ ::Rake::Task.define_task(:before)
56
+ ::Rake::Task.define_task(:after)
57
+ ::Rake::Task.define_task(:first)
58
+
59
+ assert_equal 4, ::Rake::Task.tasks.size
60
+ assert_equal 'before', ::Rake::Task['before'].name
61
+ assert_equal 'after', ::Rake::Task['after'].name
62
+ assert_equal 'first', ::Rake::Task['first'].name
63
+
64
+ TaskHelpers.add_hooks
65
+ assert_equal 4, ::Rake::Task.tasks.size
66
+ t = ::Rake::Task[:dummy_task]
67
+ assert_equal 'dummy_task', t.name
68
+ assert { t.prerequisites.include? :before }
69
+ assert { t.prerequisites.include? :first }
70
+ end
71
+
72
+ def test_executes_all_hooks
73
+
74
+ assert_empty ::Rake::Task.tasks
75
+
76
+ called = {
77
+ first: 0,
78
+ before: 0,
79
+ task: 0,
80
+ after: 0,
81
+ }
82
+
83
+ check = Proc.new do |f,b,t,a|
84
+ assert_equal f, called[:first]
85
+ assert_equal b, called[:before]
86
+ assert_equal t, called[:task]
87
+ assert_equal a, called[:after]
88
+ end
89
+
90
+ ::Rake::Task.define_task(:first) do
91
+ check.call(0, 0, 0, 0)
92
+ called[:first] += 1
93
+ end
94
+ ::Rake::Task.define_task(:before) do
95
+ check.call(1, 0, 0, 0)
96
+ called[:before] += 1
97
+ end
98
+ ::Rake::Task.define_task(:dummy_task) do
99
+ check.call(1, 1, 0, 0)
100
+ called[:task] += 1
101
+ end
102
+ ::Rake::Task.define_task(:after) do
103
+ check.call(1, 1, 1, 0)
104
+ called[:after] += 1
105
+ end
106
+
107
+ assert_equal 4, ::Rake::Task.tasks.size
108
+
109
+ TaskHelpers.add_hooks
110
+ assert_equal 4, ::Rake::Task.tasks.size
111
+ t = ::Rake::Task[:dummy_task]
112
+ assert_equal 'dummy_task', t.name
113
+ assert { t.prerequisites.include? :before }
114
+ assert { t.prerequisites.include? :first }
115
+
116
+ t.invoke
117
+
118
+ check.call(1, 1, 1, 1)
119
+ end
120
+
121
+ def test_executes_hooks_multiple_times
122
+
123
+ assert_empty ::Rake::Task.tasks
124
+
125
+ called = {
126
+ first: 0,
127
+ before: 0,
128
+ task: 0,
129
+ after: 0,
130
+ }
131
+
132
+ ::Rake::Task.define_task(:first) do
133
+ called[:first] += 1
134
+ end
135
+ ::Rake::Task.define_task(:before) do
136
+ called[:before] += 1
137
+ end
138
+ ::Rake::Task.define_task(:dummy_task) do
139
+ called[:task] += 1
140
+ end
141
+ ::Rake::Task.define_task(:after) do
142
+ called[:after] += 1
143
+ end
144
+
145
+ assert_equal 4, ::Rake::Task.tasks.size
146
+
147
+ TaskHelpers.add_hooks
148
+ assert_equal 4, ::Rake::Task.tasks.size
149
+ t = ::Rake::Task[:dummy_task]
150
+ assert_equal 'dummy_task', t.name
151
+ assert { t.prerequisites.include? :before }
152
+ assert { t.prerequisites.include? :first }
153
+
154
+ t.invoke
155
+ assert_equal 1, called[:first]
156
+ assert_equal 1, called[:before]
157
+ assert_equal 1, called[:task]
158
+ assert_equal 1, called[:after]
159
+
160
+ t.reenable
161
+ t.invoke
162
+ assert_equal 1, called[:first]
163
+ assert_equal 2, called[:before]
164
+ assert_equal 2, called[:task]
165
+ assert_equal 2, called[:after]
166
+ end
167
+
168
+ def test_executes_hooks_work_with_dependent_tasks
169
+
170
+ assert_empty ::Rake::Task.tasks
171
+
172
+ called = {
173
+ first: 0,
174
+ before: 0,
175
+ task_1: 0,
176
+ task_2: 0,
177
+ after: 0,
178
+ }
179
+
180
+ ::Rake::Task.define_task(:first) do
181
+ called[:first] += 1
182
+ end
183
+ ::Rake::Task.define_task(:before) do
184
+ called[:before] += 1
185
+ end
186
+ ::Rake::Task.define_task(:task_1) do
187
+ called[:task_1] += 1
188
+ end
189
+ ::Rake::Task.define_task(:task_2 => [ :task_1 ]) do
190
+ called[:task_2] += 1
191
+ end
192
+ ::Rake::Task.define_task(:after) do
193
+ called[:after] += 1
194
+ end
195
+
196
+ assert_equal 5, ::Rake::Task.tasks.size
197
+ TaskHelpers.add_hooks
198
+ assert_equal 5, ::Rake::Task.tasks.size
199
+
200
+ t1 = ::Rake::Task[:task_1]
201
+ t2 = ::Rake::Task[:task_2]
202
+
203
+ assert { t1.prerequisites.include? :before }
204
+ assert { t1.prerequisites.include? :first }
205
+ assert { t2.prerequisites.include? :before }
206
+ assert { t2.prerequisites.include? :first }
207
+
208
+ t2.invoke
209
+ assert_equal 1, called[:first]
210
+ assert_equal 2, called[:before]
211
+ assert_equal 1, called[:task_1]
212
+ assert_equal 1, called[:task_2]
213
+ assert_equal 2, called[:after]
214
+
215
+ t1.reenable
216
+ t2.reenable
217
+ t2.invoke
218
+ assert_equal 1, called[:first]
219
+ assert_equal 4, called[:before]
220
+ assert_equal 2, called[:task_1]
221
+ assert_equal 2, called[:task_2]
222
+ assert_equal 4, called[:after]
223
+ end
224
+ end
225
+
226
+ # ############################## end of file ############################# #
227
+
228
+
@@ -0,0 +1,129 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ # ######################################################################## #
4
+ #
5
+ # Copyright (c) 2019 Razor Risk Technologies Pty Limited. All rights reserved.
6
+ #
7
+ # ######################################################################## #
8
+
9
+ $:.unshift File.join(File.dirname(__FILE__), *(['..'] * 4), 'lib')
10
+
11
+ unless $DEBUG
12
+
13
+ require 'pantheios/globals'
14
+ require 'pantheios/services/null_log_service'
15
+
16
+ ::Pantheios::Globals.INITIAL_SERVICE_CLASSES = [ ::Pantheios::Services::NullLogService ]
17
+ end
18
+
19
+ require 'razor_risk/razor/control/razor/executor'
20
+
21
+ require 'xqsr3/extensions/test/unit'
22
+
23
+ require 'test/unit'
24
+
25
+ # Class description
26
+ class MockLogger
27
+
28
+ include ::Xqsr3::Quality::ParameterChecking
29
+
30
+ # Initializer.
31
+ #
32
+ # @param block [#call] Block to ececute when log is called.
33
+ #
34
+ def initialize &block
35
+
36
+ @block = check_parameter block, 'block', responds_to: [:call]
37
+ end
38
+
39
+ def severity_logged? severity; true; end
40
+
41
+ def log level, time, prefix, msg
42
+
43
+ @block.call level, msg
44
+ end
45
+ end # class MockLogger
46
+
47
+ class Test_Executor < Test::Unit::TestCase
48
+
49
+ include ::RazorRisk::Razor::Control::Razor
50
+
51
+ DIR = File.join(File.dirname(__FILE__), 'test_scripts')
52
+
53
+ def teardown
54
+
55
+ ::Pantheios::Core.set_service(MockLogger.new {})
56
+ end
57
+
58
+ def test_is_a_class
59
+
60
+ assert_kind_of ::Class, Executor
61
+ end
62
+
63
+ def test_can_be_initialized
64
+
65
+ assert_nothing_raised do
66
+ Executor.new
67
+ end
68
+ end
69
+
70
+ def test_reports_correct_status
71
+
72
+ ex = Executor.new
73
+
74
+ scripts = {
75
+ 'exit_success.cmd' => true,
76
+ 'exit_failure.cmd' => false,
77
+ 'exit_strange.cmd' => false,
78
+ }
79
+
80
+ scripts.each do |script, status|
81
+ assert_equal(
82
+ status,
83
+ ex.execute(script, chdir: DIR),
84
+ "'(#{script}' did not exit with status '#{status}'"
85
+ )
86
+ end
87
+ end
88
+
89
+ def test_logs_process_output
90
+
91
+ script = 'print.cmd'
92
+
93
+ pass_stdout = false
94
+ pass_stderr = false
95
+
96
+ logger = MockLogger.new do |level, msg|
97
+
98
+ case level
99
+ when :informational
100
+ assert_equal "#{script}: stdout", msg
101
+ pass_stdout = true
102
+ when :warning
103
+ assert_equal "#{script}: stderr", msg
104
+ pass_stderr = true
105
+ else
106
+ flunk
107
+ end
108
+ end
109
+
110
+ ::Pantheios::Core.set_service logger
111
+
112
+ ex = Executor.new
113
+ ex.execute(script, chdir: DIR)
114
+
115
+ assert pass_stdout
116
+ assert pass_stderr
117
+ end
118
+
119
+ def test_handles_script_with_pause
120
+
121
+ script = 'pause.cmd'
122
+ ex = Executor.new
123
+ assert ex.execute(script, chdir: DIR)
124
+ end
125
+ end
126
+
127
+ # ############################## end of file ############################# #
128
+
129
+