@@ -9,27 +9,111 @@ module CNFManager
99 Failed
1010 Skipped
1111 NA
12- Neutral
1312 Pass5
1413 Pass3
1514 Error
1615
1716 def to_basic
1817 case self
19- when Pass5 , Pass3
20- ret = CNFManager ::ResultStatus ::Passed
21- when Neutral
22- ret = CNFManager ::ResultStatus ::Failed
23- else
24- ret = self
18+ when Pass5 , Pass3 then CNFManager ::ResultStatus ::Passed
19+ else self
20+ end
21+ end
22+
23+ def to_string
24+ case self .to_basic
25+ when Passed then " passed"
26+ when Failed then " failed"
27+ when Skipped then " skipped"
28+ when NA the " na"
29+ when Error then " error"
30+ else " "
2531 end
2632 end
2733 end
2834
29- struct TestCaseResult
30- property state, result_message
35+ class TestCaseResult
36+ property testcase : String
37+ property status : CNFManager ::ResultStatus
38+ property result_message : String ?
39+ property result_description : Array (String )
40+ property start_time : Time
41+ property end_time : Time
42+
43+ def initialize (@testcase : String = " " ,
44+ @status : CNFManager ::ResultStatus = CNFManager ::ResultStatus ::Skipped ,
45+ @result_message : String ? = nil ,
46+ @result_description : Array (String ) = [] of String )
47+ end
48+
49+ def update (status : CNFManager ::ResultStatus , message : String ?)
50+ @status = status
51+ @result_message = message
52+ end
53+
54+ def passed (message : String ?)
55+ @status = CNFManager ::ResultStatus ::Passed
56+ @result_message = message
57+ end
58+
59+ def failed (message : String ?)
60+ @status = CNFManager ::ResultStatus ::Failed
61+ @result_message = message
62+ end
63+
64+ def skipped (message : String ?)
65+ @status = CNFManager ::ResultStatus ::Skipped
66+ @result_message = message
67+ end
68+
69+ def error (message : String ?)
70+ @status = CNFManager ::ResultStatus ::Error
71+ @result_message = message
72+ end
73+
74+ def append_description (text : String )
75+ @result_description << text
76+ end
77+
78+ def set_start_time ()
79+ @start_time = Time .utc
80+ end
81+
82+ def set_end_time ()
83+ @end_time = Time .utc
84+ end
85+
86+ def duration () : Time ::Span
87+ @end_time - @start_time
88+ end
3189
32- def initialize (@state : CNFManager ::ResultStatus , @result_message : String ? = nil )
90+ def points () :
91+
92+ def set_testcase (testcase : String )
93+ @testcase = testcase
94+ end
95+
96+ def decorated_result_message () : String
97+ tc_emoji = CNFManager ::Points .emoji_by_task(@testcase )
98+ cat_emoji = CNFManager ::Points .task_emoji_by_task(@testcase )↲
99+ case @status .to_basic↲
100+ when CNFManager ::ResultStatus ::Passed ↲
101+ " #{ cat_emoji } PASSED: [#{ @testcase } ] #{ @result_message } #{ tc_emoji } "
102+ when CNFManager ::ResultStatus ::Failed ↲
103+ " #{ cat_emoji } FAILED: [#{ @testcase } ] #{ @result_message } #{ tc_emoji } "
104+ when CNFManager ::ResultStatus ::Skipped ↲
105+ " ⏭️ #{ cat_emoji } SKIPPED: [#{ @testcase } ] #{ @result_message } #{ tc_emoji } "
106+ when CNFManager ::ResultStatus ::NA ↲
107+ " ⏭️ #{ cat_emoji } N/A: [#{ @testcase } ] #{ @result_message } #{ tc_emoji } "
108+ when CNFManager ::ResultStatus ::Error ↲
109+ " 💥 #{ cat_emoji } ERROR: [#{ @testcase } ] #{ @result_message } "
110+ else:
111+ " "
112+ end
113+ end
114+
115+ def self.empty
116+ new
33117 end
34118 end
35119
@@ -275,8 +359,8 @@ module CNFManager
275359 {max_points, max_passed}
276360 end
277361
278- def self.upsert_task (task, status, points, start_time, message )
279- logger = @@logger .for(" upsert_task-#{ task } " )
362+ def self.upsert_task (result : CNFManager :: TestCaseResult )
363+ logger = @@logger .for(" upsert_task-#{ result.testcase } " )
280364
281365 # Raise exception when results file does not exists.
282366 CNFManager ::Points ::Results .ensure_results_file!
@@ -287,36 +371,22 @@ module CNFManager
287371 result_items = result_items.reject { |x | x[" name" ] == task }
288372
289373 end_time = Time .utc
290- task_runtime = (end_time - start_time)
291374
292375 # The task result info has to be appeneded to an array of YAML::Any
293376 # So encode it into YAML and parse it back again to assign it.
294377 #
295378 # Only add task timestamps if the env var is set.
296- if status == " passed"
297- task_result_info = {
298- name: task,
299- status: status,
300- type: task_type_by_task(task),
301- points: points,
302- start_time: start_time,
303- end_time: end_time,
304- task_runtime: " #{ task_runtime } " ,
305- }
306- result_items << YAML .parse(task_result_info.to_yaml)
307- else
308- task_result_info = {
309- name: task,
310- status: status,
311- status_description: message,
312- type: task_type_by_task(task),
313- points: points,
314- start_time: start_time,
315- end_time: end_time,
316- task_runtime: " #{ task_runtime } " ,
317- }
318- result_items << YAML .parse(task_result_info.to_yaml)
319- end
379+ task_result_info = {
380+ name: result.testcase,
381+ status: result.status.to_string,
382+ status_description: result.result_description,
383+ type: task_type_by_task(result.testcase),
384+ points: result.points,
385+ start_time: result.start_time,
386+ end_time: result.end_time,
387+ task_runtime: " #{ result.duration } " ,
388+ }
389+ result_items << YAML .parse(task_result_info.to_yaml)
320390
321391 File .open(" #{ Results .file} " , " w" ) do |f |
322392 YAML .dump({name: results[" name" ],
@@ -327,24 +397,9 @@ module CNFManager
327397 exit_code: results[" exit_code" ],
328398 items: result_items}, f)
329399 end
330- logger.debug { " Task start time: #{ start_time } , end time: #{ end_time } " }
331- logger.info { " Task: '#{ task } ' has status: '#{ status } ' and is awarded: #{ points } points." +
332- " Runtime: #{ task_runtime } " }
333- end
334-
335- def self.failed_task (task, msg)
336- upsert_task(task, FAILED , task_points(task, false ), start_time, msg)
337- stdout_failure " #{ msg } "
338- end
339-
340- def self.passed_task (task, msg)
341- upsert_task(task, PASSED , task_points(task), start_time, msg)
342- stdout_success " #{ msg } "
343- end
344-
345- def self.skipped_task (task, msg)
346- upsert_task(task, SKIPPED , task_points(task), start_time, msg)
347- stdout_success " #{ msg } "
400+ logger.debug { " Task start time: #{ result.start_time } , end time: #{ result.end_time } " }
401+ logger.info { " Test case: '#{ result.testcase } ' has status: '#{ result.status } ' and is awarded: #{ points } points." +
402+ " Runtime: #{ result.duration } " }
348403 end
349404
350405 def self.failed_required_tasks
0 commit comments