razorrisk-razor-control 0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+