cutedriver-driver 2.0.0.20210120164037

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 (226) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +16 -0
  3. data/bin/start_app_perf +200 -0
  4. data/bin/tdriver-devtools +3 -0
  5. data/config/sut_parameters.rb +52 -0
  6. data/config/sut_setup.rb +32 -0
  7. data/config/sut_teardown.rb +32 -0
  8. data/config/tdriver_custom_error_recovery.rb +83 -0
  9. data/ext/extconf.rb +70 -0
  10. data/ext/native_extensions.c +315 -0
  11. data/lib/matti.rb +25 -0
  12. data/lib/tdriver-devtools/behaviour/old/xml/example/flick-example.rb +120 -0
  13. data/lib/tdriver-devtools/behaviour/old/xml/example/impl.rb_invalid +194 -0
  14. data/lib/tdriver-devtools/behaviour/old/xml/generate_behaviour_xml.rb +95 -0
  15. data/lib/tdriver-devtools/behaviour/old/xml/lib/tdriver_generator.rb +722 -0
  16. data/lib/tdriver-devtools/behaviour/old/xml/qdoc_generator.rb +321 -0
  17. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.method.template +43 -0
  18. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.module.template +54 -0
  19. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.argument.template +7 -0
  20. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.argument_type.template +7 -0
  21. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.exception.template +5 -0
  22. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.howto.line.template +2 -0
  23. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.howto.template +5 -0
  24. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.method.template +23 -0
  25. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.template +14 -0
  26. data/lib/tdriver-devtools/behaviour/old/xml/update +3 -0
  27. data/lib/tdriver-devtools/behaviour/xml/generate.rb +88 -0
  28. data/lib/tdriver-devtools/behaviour/xml/rdoc_behaviour_xml_generator.rb +1945 -0
  29. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument.default.template +1 -0
  30. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument.template +3 -0
  31. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument_type.template +4 -0
  32. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.exception.template +4 -0
  33. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.arguments.template +4 -0
  34. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.deprecated.template +3 -0
  35. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.exceptions.template +3 -0
  36. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.info.template +1 -0
  37. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.returns.template +3 -0
  38. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.tables.template +3 -0
  39. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.template +12 -0
  40. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.returns.template +5 -0
  41. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.item.template +1 -0
  42. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.row.template +2 -0
  43. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.template +8 -0
  44. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.template +14 -0
  45. data/lib/tdriver-devtools/doc/behaviour_xml/QtExampleGestureBehaviour.xml +138 -0
  46. data/lib/tdriver-devtools/doc/behaviour_xml/created.rid +1 -0
  47. data/lib/tdriver-devtools/doc/behaviour_xml/tdriver.hash +1 -0
  48. data/lib/tdriver-devtools/doc/feature_xml/qt_widget_hold.feature.xml +9 -0
  49. data/lib/tdriver-devtools/doc/feature_xml/qt_widget_tap.feature.xml +9 -0
  50. data/lib/tdriver-devtools/doc/generate.rb +917 -0
  51. data/lib/tdriver-devtools/doc/update +1 -0
  52. data/lib/tdriver-devtools/doc/xslt/html.rb +7 -0
  53. data/lib/tdriver-devtools/doc/xslt/template.xsl +2170 -0
  54. data/lib/tdriver-devtools/doc/xslt/update +3 -0
  55. data/lib/tdriver-devtools/plugin/placeholder.txt +1 -0
  56. data/lib/tdriver-devtools/tdriver-devtools.rb +404 -0
  57. data/lib/tdriver-devtools/tests/feature_tests/example/behaviour_example.rb +100 -0
  58. data/lib/tdriver-devtools/tests/feature_tests/generate.rb +82 -0
  59. data/lib/tdriver-devtools/tests/feature_tests/lib/custom_rdoc_generator.rb +468 -0
  60. data/lib/tdriver-devtools/tests/feature_tests/templates/feature_attribute.template +5 -0
  61. data/lib/tdriver-devtools/tests/feature_tests/templates/feature_method.template +5 -0
  62. data/lib/tdriver-devtools/tests/feature_tests/templates/scenario_attribute.template +5 -0
  63. data/lib/tdriver-devtools/tests/feature_tests/templates/scenario_method.template +5 -0
  64. data/lib/tdriver-devtools/tests/feature_tests/update +3 -0
  65. data/lib/tdriver.rb +23 -0
  66. data/lib/tdriver/base/behaviour/abstract.rb +29 -0
  67. data/lib/tdriver/base/behaviour/behaviours/object_abstract.rb +107 -0
  68. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_composition.rb +99 -0
  69. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_description.rb +278 -0
  70. data/lib/tdriver/base/behaviour/behaviours/object_composition.rb +119 -0
  71. data/lib/tdriver/base/behaviour/factory.rb +495 -0
  72. data/lib/tdriver/base/behaviour/loader.rb +46 -0
  73. data/lib/tdriver/base/command_data/command_data.rb +51 -0
  74. data/lib/tdriver/base/command_data/loader.rb +29 -0
  75. data/lib/tdriver/base/controller/abstraction.rb +56 -0
  76. data/lib/tdriver/base/controller/loader.rb +21 -0
  77. data/lib/tdriver/base/errors.rb +134 -0
  78. data/lib/tdriver/base/loader.rb +47 -0
  79. data/lib/tdriver/base/state_object.rb +373 -0
  80. data/lib/tdriver/base/sut/adapter.rb +54 -0
  81. data/lib/tdriver/base/sut/controller.rb +151 -0
  82. data/lib/tdriver/base/sut/factory.rb +339 -0
  83. data/lib/tdriver/base/sut/generic/behaviours/agent.rb +77 -0
  84. data/lib/tdriver/base/sut/generic/behaviours/application.rb +427 -0
  85. data/lib/tdriver/base/sut/generic/behaviours/controller.rb +67 -0
  86. data/lib/tdriver/base/sut/generic/behaviours/find.rb +107 -0
  87. data/lib/tdriver/base/sut/generic/behaviours/flash_behaviour.rb +337 -0
  88. data/lib/tdriver/base/sut/generic/behaviours/sut.rb +1888 -0
  89. data/lib/tdriver/base/sut/generic/behaviours/switchbox_behaviour.rb +210 -0
  90. data/lib/tdriver/base/sut/generic/behaviours/verification.rb +222 -0
  91. data/lib/tdriver/base/sut/generic/commands/agent.rb +43 -0
  92. data/lib/tdriver/base/sut/generic/commands/application.rb +274 -0
  93. data/lib/tdriver/base/sut/generic/commands/fixture.rb +47 -0
  94. data/lib/tdriver/base/sut/generic/commands/key_sequence.rb +94 -0
  95. data/lib/tdriver/base/sut/generic/commands/screen_capture.rb +64 -0
  96. data/lib/tdriver/base/sut/generic/plugin.rb +97 -0
  97. data/lib/tdriver/base/sut/loader.rb +35 -0
  98. data/lib/tdriver/base/sut/sut.rb +98 -0
  99. data/lib/tdriver/base/test_object/abstract.rb +208 -0
  100. data/lib/tdriver/base/test_object/adapter.rb +740 -0
  101. data/lib/tdriver/base/test_object/behaviours/syncronization.rb +144 -0
  102. data/lib/tdriver/base/test_object/behaviours/test_object.rb +1047 -0
  103. data/lib/tdriver/base/test_object/cache.rb +134 -0
  104. data/lib/tdriver/base/test_object/factory.rb +684 -0
  105. data/lib/tdriver/base/test_object/loader.rb +51 -0
  106. data/lib/tdriver/base/test_object/verification.rb +178 -0
  107. data/lib/tdriver/base/test_object/xml/abstraction.rb +63 -0
  108. data/lib/tdriver/base/test_object/xml/adapter.rb +773 -0
  109. data/lib/tdriver/env.rb +21 -0
  110. data/lib/tdriver/loader.rb +57 -0
  111. data/lib/tdriver/matti.rb +35 -0
  112. data/lib/tdriver/report/error_recovery/tdriver_custom_error_recovery.rb +83 -0
  113. data/lib/tdriver/report/error_recovery/tdriver_error_recovery.rb +168 -0
  114. data/lib/tdriver/report/error_recovery/tdriver_error_recovery_settings.rb +106 -0
  115. data/lib/tdriver/report/report.rb +61 -0
  116. data/lib/tdriver/report/report_api.rb +348 -0
  117. data/lib/tdriver/report/report_combine.rb +86 -0
  118. data/lib/tdriver/report/report_crash_file_capture.rb +178 -0
  119. data/lib/tdriver/report/report_creator.rb +665 -0
  120. data/lib/tdriver/report/report_cucumber.rb +158 -0
  121. data/lib/tdriver/report/report_cucumber_listener.rb +184 -0
  122. data/lib/tdriver/report/report_cucumber_reporter.rb +181 -0
  123. data/lib/tdriver/report/report_data_presentation.rb +156 -0
  124. data/lib/tdriver/report/report_data_table.rb +64 -0
  125. data/lib/tdriver/report/report_execution_statistics.rb +400 -0
  126. data/lib/tdriver/report/report_file_capture.rb +159 -0
  127. data/lib/tdriver/report/report_graph_generator.rb +59 -0
  128. data/lib/tdriver/report/report_grouping.rb +541 -0
  129. data/lib/tdriver/report/report_javascript.rb +199 -0
  130. data/lib/tdriver/report/report_junit_xml.rb +147 -0
  131. data/lib/tdriver/report/report_rspec.rb +108 -0
  132. data/lib/tdriver/report/report_test_case_run.rb +725 -0
  133. data/lib/tdriver/report/report_test_run.rb +1476 -0
  134. data/lib/tdriver/report/report_test_unit.rb +223 -0
  135. data/lib/tdriver/report/report_writer.rb +1621 -0
  136. data/lib/tdriver/tdriver.rb +209 -0
  137. data/lib/tdriver/util/agent/loader.rb +22 -0
  138. data/lib/tdriver/util/agent/service.rb +107 -0
  139. data/lib/tdriver/util/common/array.rb +39 -0
  140. data/lib/tdriver/util/common/boolean.rb +48 -0
  141. data/lib/tdriver/util/common/crc16.rb +149 -0
  142. data/lib/tdriver/util/common/environment.rb +154 -0
  143. data/lib/tdriver/util/common/error.rb +40 -0
  144. data/lib/tdriver/util/common/exception.rb +53 -0
  145. data/lib/tdriver/util/common/exceptions.rb +12 -0
  146. data/lib/tdriver/util/common/file.rb +328 -0
  147. data/lib/tdriver/util/common/gem.rb +109 -0
  148. data/lib/tdriver/util/common/hash.rb +288 -0
  149. data/lib/tdriver/util/common/kernel.rb +253 -0
  150. data/lib/tdriver/util/common/loader.rb +47 -0
  151. data/lib/tdriver/util/common/numeric.rb +159 -0
  152. data/lib/tdriver/util/common/object.rb +159 -0
  153. data/lib/tdriver/util/common/retryable.rb +179 -0
  154. data/lib/tdriver/util/common/stackable.rb +185 -0
  155. data/lib/tdriver/util/common/string.rb +174 -0
  156. data/lib/tdriver/util/database/access.rb +240 -0
  157. data/lib/tdriver/util/database/connection.rb +44 -0
  158. data/lib/tdriver/util/database/error.rb +34 -0
  159. data/lib/tdriver/util/database/loader.rb +28 -0
  160. data/lib/tdriver/util/filters/attribute_filter.rb +121 -0
  161. data/lib/tdriver/util/filters/loader.rb +29 -0
  162. data/lib/tdriver/util/fixture/loader.rb +22 -0
  163. data/lib/tdriver/util/fixture/service.rb +211 -0
  164. data/lib/tdriver/util/hooking/hooking.rb +477 -0
  165. data/lib/tdriver/util/keymap/keymap.rb +81 -0
  166. data/lib/tdriver/util/loader.rb +80 -0
  167. data/lib/tdriver/util/localisation/error.rb +31 -0
  168. data/lib/tdriver/util/localisation/loader.rb +25 -0
  169. data/lib/tdriver/util/localisation/localisation.rb +762 -0
  170. data/lib/tdriver/util/logger/loader.rb +22 -0
  171. data/lib/tdriver/util/logger/logger.rb +591 -0
  172. data/lib/tdriver/util/operator_data/error.rb +29 -0
  173. data/lib/tdriver/util/operator_data/loader.rb +27 -0
  174. data/lib/tdriver/util/operator_data/operator_data.rb +93 -0
  175. data/lib/tdriver/util/other/config.rb +221 -0
  176. data/lib/tdriver/util/parameter/error.rb +48 -0
  177. data/lib/tdriver/util/parameter/loader.rb +25 -0
  178. data/lib/tdriver/util/parameter/parameter.rb +1161 -0
  179. data/lib/tdriver/util/plugin/abstract.rb +61 -0
  180. data/lib/tdriver/util/plugin/error.rb +0 -0
  181. data/lib/tdriver/util/plugin/loader.rb +28 -0
  182. data/lib/tdriver/util/plugin/service.rb +319 -0
  183. data/lib/tdriver/util/recorder/loader.rb +25 -0
  184. data/lib/tdriver/util/recorder/recorder.rb +72 -0
  185. data/lib/tdriver/util/recorder/scripter.rb +294 -0
  186. data/lib/tdriver/util/statistics/statistics.rb +89 -0
  187. data/lib/tdriver/util/user_data/error.rb +28 -0
  188. data/lib/tdriver/util/user_data/loader.rb +25 -0
  189. data/lib/tdriver/util/user_data/user_data.rb +104 -0
  190. data/lib/tdriver/util/video/camera.rb +67 -0
  191. data/lib/tdriver/util/video/camera_linux.rb +153 -0
  192. data/lib/tdriver/util/video/camera_windows.rb +174 -0
  193. data/lib/tdriver/util/video/loader.rb +31 -0
  194. data/lib/tdriver/util/video/video_utils.rb +139 -0
  195. data/lib/tdriver/util/xml/abstraction.rb +117 -0
  196. data/lib/tdriver/util/xml/attribute.rb +32 -0
  197. data/lib/tdriver/util/xml/builder.rb +53 -0
  198. data/lib/tdriver/util/xml/comment.rb +32 -0
  199. data/lib/tdriver/util/xml/document.rb +32 -0
  200. data/lib/tdriver/util/xml/element.rb +32 -0
  201. data/lib/tdriver/util/xml/error.rb +46 -0
  202. data/lib/tdriver/util/xml/loader.rb +62 -0
  203. data/lib/tdriver/util/xml/nil_node.rb +95 -0
  204. data/lib/tdriver/util/xml/nodeset.rb +32 -0
  205. data/lib/tdriver/util/xml/parsers/libxml/libxml.rb +140 -0
  206. data/lib/tdriver/util/xml/parsers/loader.rb +21 -0
  207. data/lib/tdriver/util/xml/parsers/nokogiri/abstraction.rb +167 -0
  208. data/lib/tdriver/util/xml/parsers/nokogiri/attribute.rb +66 -0
  209. data/lib/tdriver/util/xml/parsers/nokogiri/builder.rb +64 -0
  210. data/lib/tdriver/util/xml/parsers/nokogiri/comment.rb +39 -0
  211. data/lib/tdriver/util/xml/parsers/nokogiri/document.rb +66 -0
  212. data/lib/tdriver/util/xml/parsers/nokogiri/element.rb +39 -0
  213. data/lib/tdriver/util/xml/parsers/nokogiri/loader.rb +58 -0
  214. data/lib/tdriver/util/xml/parsers/nokogiri/node.rb +212 -0
  215. data/lib/tdriver/util/xml/parsers/nokogiri/nodeset.rb +237 -0
  216. data/lib/tdriver/util/xml/parsers/nokogiri/text.rb +39 -0
  217. data/lib/tdriver/util/xml/text.rb +32 -0
  218. data/lib/tdriver/util/xml/xml.rb +332 -0
  219. data/lib/tdriver/verify/verify.rb +2398 -0
  220. data/lib/tdriver/version.rb +21 -0
  221. data/xml/behaviours/generic.xml +530 -0
  222. data/xml/defaults/generic.xml +11 -0
  223. data/xml/defaults/sut_generic.xml +8 -0
  224. data/xml/parameters/tdriver_parameters.xml +23 -0
  225. data/xml/templates/generic.xml +292 -0
  226. metadata +324 -0
@@ -0,0 +1,1476 @@
1
+ ############################################################################
2
+ ##
3
+ ## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4
+ ## All rights reserved.
5
+ ## Contact: Nokia Corporation (testabilitydriver@nokia.com)
6
+ ##
7
+ ## This file is part of TDriver.
8
+ ##
9
+ ## If you have questions regarding the use of this file, please contact
10
+ ## Nokia at testabilitydriver@nokia.com .
11
+ ##
12
+ ## This library is free software; you can redistribute it and/or
13
+ ## modify it under the terms of the GNU Lesser General Public
14
+ ## License version 2.1 as published by the Free Software Foundation
15
+ ## and appearing in the file LICENSE.LGPL included in the packaging
16
+ ## of this file.
17
+ ##
18
+ ############################################################################
19
+
20
+ module TDriverReportCreator
21
+
22
+ #Test run class for new test run
23
+ class TestRun < ReportCombine
24
+ include TDriverReportWriter
25
+ include ReportDataTable
26
+ attr_accessor(
27
+ :report_folder,
28
+ :reporting_groups,
29
+ :generic_reporting_groups,
30
+ :start_time,
31
+ :end_time,
32
+ :run_time,
33
+ :total_run,
34
+ :total_passed,
35
+ :total_failed,
36
+ :total_not_run,
37
+ :total_crash_files,
38
+ :total_device_resets,
39
+ :test_case_user_defined_status,
40
+ :test_run_behaviour_log,
41
+ :test_run_user_log,
42
+ :test_case_user_data,
43
+ :test_case_user_xml_data,
44
+ :test_case_user_data_columns,
45
+ :test_case_user_chronological_table_data,
46
+ :attached_test_reports,
47
+ :report_pages_ready,
48
+ :memory_amount_start,
49
+ :memory_amount_end,
50
+ :memory_amount_total,
51
+ :total_dump_count,
52
+ :total_received_data,
53
+ :total_sent_data,
54
+ :result_storage_in_use,
55
+ :pages,
56
+ :duration_graph,
57
+ :pass_statuses,
58
+ :fail_statuses,
59
+ :not_run_statuses,
60
+ :report_editable,
61
+ :test_fails,
62
+ :report_exclude_passed_cases,
63
+ :connection_errors
64
+
65
+ )
66
+ #class variables for summary report
67
+ def initialize()
68
+ @report_folder=nil
69
+ @reporting_groups=nil
70
+ @generic_reporting_groups=''
71
+ @start_time=nil
72
+ @end_time=nil
73
+ @run_time=nil
74
+ @total_run=0
75
+ @total_passed=0
76
+ @total_failed=0
77
+ @total_not_run=0
78
+ @total_crash_files=0
79
+ @total_device_resets=0
80
+ @connection_errors=0
81
+ @test_case_user_defined_status=nil
82
+ @test_run_behaviour_log = Array.new
83
+ @test_run_user_log = Array.new
84
+ @test_case_user_data=Array.new
85
+ @test_case_user_data_columns = Array.new
86
+ @test_case_user_chronological_table_data = Hash.new
87
+ @test_case_user_xml_data = Hash.new
88
+ @attached_test_reports = Array.new
89
+ @report_pages_ready=Array.new
90
+ @memory_amount_start='-'
91
+ @memory_amount_end='-'
92
+ @memory_amount_total='-'
93
+ @total_dump_count=Hash.new
94
+ @total_received_data=Hash.new
95
+ @total_sent_data=Hash.new
96
+ $result_storage_in_use=false
97
+ @pages=$parameters[ :report_results_per_page, 50]
98
+ @duration_graph=$parameters[ :report_generate_duration_graph, false]
99
+ @pass_statuses=$parameters[ :report_passed_statuses, "passed" ].split('|')
100
+ @fail_statuses=$parameters[ :report_failed_statuses, "failed" ].split('|')
101
+ @not_run_statuses=$parameters[ :report_not_run_statuses, "not run" ].split('|')
102
+ @report_editable=$parameters[ :report_editable, "false" ]
103
+ @report_short_folders=$parameters[ :report_short_folders, 'false']
104
+ @report_exclude_passed_cases=$parameters[ :report_exclude_passed_cases, 'false' ]
105
+ @test_fails=Hash.new(0) # return 0 by default if key not found
106
+
107
+
108
+ end
109
+
110
+ def get_sequential_fails
111
+ test_identifier = $new_test_case.test_case_group + "::" + $new_test_case.test_case_name
112
+ return @test_fails[ test_identifier ] # return 0 by default if key not found
113
+ end
114
+
115
+ def update_sequential_fails( status )
116
+
117
+ test_identifier = $new_test_case.test_case_group + "::" + $new_test_case.test_case_name
118
+
119
+ if @pass_statuses.include?(status)
120
+ @test_fails[ test_identifier ] = 0 unless @test_fails[ test_identifier ] == 0
121
+ elsif @fail_statuses.include?(status)
122
+ tempnum = @test_fails[ test_identifier ]
123
+ tempnum = tempnum + 1
124
+ @test_fails[ test_identifier ] = tempnum
125
+ end
126
+
127
+
128
+ end
129
+
130
+ #This method sets the test case user defined status
131
+ #
132
+ # === params
133
+ # value: test case status
134
+ # === returns
135
+ # nil
136
+ # === raises
137
+ def set_test_case_user_defined_status(value)
138
+ @test_case_user_defined_status=value
139
+ end
140
+ #This method sets user created log
141
+ #
142
+ # === params
143
+ # value: test run execution log entry
144
+ # === returns
145
+ # nil
146
+ # === raises
147
+ def set_log(value)
148
+ if value==nil
149
+ @test_run_user_log=nil
150
+ @test_run_user_log=Array.new
151
+ else
152
+ @test_run_user_log << ["USER LOG: #{value.to_s}"]
153
+ end
154
+ end
155
+ #This method adds user data
156
+ #
157
+ # === params
158
+ # value: the data to be added an array or hash
159
+ # === returns
160
+ # nil
161
+ # === raises
162
+ # TypeError exception
163
+ def set_user_data(value)
164
+ if value==nil
165
+ @test_case_user_data = Array.new
166
+ @test_case_user_data_columns = Array.new
167
+ else
168
+ raise TypeError.new( 'Input parameter not of Type: Hash or Array.\nIt is: ' + value.class.to_s ) unless value.kind_of?( Hash ) || value.kind_of?( Array )
169
+ if value.kind_of?( Hash )
170
+ add_data_from_hash(value,@test_case_user_data,@test_case_user_data_columns)
171
+ end
172
+ if value.kind_of?( Array )
173
+ add_data_from_array(value,@test_case_user_data,@test_case_user_data_columns)
174
+ end
175
+ end
176
+ end
177
+ #This method adds user table data
178
+ #
179
+ # === params
180
+ # column_name: the column name in chronological table
181
+ # value: the data
182
+ # === returns
183
+ # nil
184
+ # === raises
185
+ def set_user_table_data(column_name,value)
186
+ if (!column_name.empty? && column_name!=nil)
187
+ @test_case_user_chronological_table_data[column_name.to_s]=value.to_s
188
+ end
189
+ end
190
+
191
+ #This method adds user xml data
192
+ #
193
+ # === params
194
+ # column_name: the column name in xml
195
+ # value: the data
196
+ # === returns
197
+ # nil
198
+ # === raises
199
+ def set_user_xml_data(column_name,value)
200
+ if (!column_name.empty? && column_name!=nil)
201
+ @test_case_user_xml_data[column_name.to_s]=value.to_s
202
+ end
203
+ end
204
+
205
+ #This method sets the test run behaviour log
206
+ #
207
+ # === params
208
+ # value: test run execution log entry
209
+ # === returns
210
+ # nil
211
+ # === raises
212
+ def set_test_run_behaviour_log(value,test_case)
213
+ @test_run_behaviour_log << [value.to_s,test_case]
214
+ end
215
+ #This method sets generic reporting groups
216
+ #
217
+ # === params
218
+ #
219
+ # === returns
220
+ # nil
221
+ # === raises
222
+ def set_generic_reporting_groups(value)
223
+ if check_if_group_exists_groups(@generic_reporting_groups,value)==false
224
+ @generic_reporting_groups=@generic_reporting_groups+value
225
+ end
226
+ get_reporting_groups()
227
+ end
228
+ #This method sets the report folder value
229
+ #
230
+ # === params
231
+ # value: test set report folder
232
+ # === returns
233
+ # nil
234
+ # === raises
235
+ def set_report_folder(value)
236
+ @report_folder=value
237
+ end
238
+ #This method sets the test run start time
239
+ #
240
+ # === params
241
+ # value: test set start time
242
+ # === returns
243
+ # nil
244
+ # === raises
245
+ def set_start_time(value)
246
+ @start_time=value
247
+ end
248
+ #This method sets the test run end time
249
+ #
250
+ # === params
251
+ # value: test set end time
252
+ # === returns
253
+ # nil
254
+ # === raises
255
+ def set_end_time(value)
256
+ @end_time=value
257
+ end
258
+ #This method sets the test run run time
259
+ #
260
+ # === params
261
+ # value: test set run time
262
+ # === returns
263
+ # nil
264
+ # === raises
265
+ def set_run_time(value)
266
+ @run_time=value
267
+ end
268
+ #This method sets the total tests run
269
+ #
270
+ # === params
271
+ # value: total run value
272
+ # === returns
273
+ # nil
274
+ # === raises
275
+ def set_total_run(value)
276
+ if value==1
277
+ @total_run=@total_run.to_i+1
278
+ else
279
+ @total_run=value
280
+ end
281
+ end
282
+ #This method sets the total passed tests run
283
+ #
284
+ # === params
285
+ # value: total passed value
286
+ # === returns
287
+ # nil
288
+ # === raises
289
+ def set_total_passed(value)
290
+ if value==1
291
+ @total_passed=@total_passed.to_i+1
292
+ else
293
+ @total_passed=value
294
+ end
295
+ end
296
+ #This method sets the total failed tests run
297
+ #
298
+ # === params
299
+ # value: total failed value
300
+ # === returns
301
+ # nil
302
+ # === raises
303
+ def set_total_failed(value)
304
+ if value==1
305
+ @total_failed=@total_failed.to_i+1
306
+ else
307
+ @total_failed=value
308
+ end
309
+ end
310
+ #This method sets the total amount of not run cases
311
+ #
312
+ # === params
313
+ # value: total not run value
314
+ # === returns
315
+ # nil
316
+ # === raises
317
+ def set_total_not_run(value)
318
+ if value==1
319
+ @total_not_run=@total_not_run.to_i+1
320
+ else
321
+ @total_not_run=value
322
+ end
323
+ end
324
+ #This method sets the total amount of found crash files
325
+ #
326
+ # === params
327
+ # value: total not run value
328
+ # === returns
329
+ # nil
330
+ # === raises
331
+ def set_total_crash_files(value)
332
+ @total_crash_files=@total_crash_files.to_i+value.to_i
333
+ end
334
+ #This method sets the total amount of device resets
335
+ #
336
+ # === params
337
+ # value: total not run value
338
+ # === returns
339
+ # nil
340
+ # === raises
341
+ def set_total_device_resets(value)
342
+ @total_device_resets=@total_device_resets.to_i+value.to_i
343
+ end
344
+
345
+ #This method sets the memory amount end
346
+ #
347
+ # === params
348
+ #
349
+ # === returns
350
+ # nil
351
+ # === raises
352
+ def set_memory_amount_end(value)
353
+ @memory_amount_end=value
354
+ end
355
+ #This method sets the memory amount start
356
+ #
357
+ # === params
358
+ #
359
+ # === returns
360
+ # nil
361
+ # === raises
362
+ def set_memory_amount_start(value)
363
+ @memory_amount_start=value
364
+ end
365
+ #This method sets the memory amount total
366
+ #
367
+ # === params
368
+ #
369
+ # === returns
370
+ # nil
371
+ # === raises
372
+ def set_memory_amount_total(value)
373
+ @memory_amount_total=value
374
+ end
375
+
376
+ #This method gets the not run cases name array
377
+ #
378
+ # === params
379
+ #
380
+ # === returns
381
+ # nil
382
+ # === raises
383
+ def get_not_run_cases_arr()
384
+ #@not_run_cases_arr
385
+ read_result_storage('not_run')
386
+ end
387
+ #This method gets the passed cases name array
388
+ #
389
+ # === params
390
+ #
391
+ # === returns
392
+ # nil
393
+ # === raises
394
+ def get_passed_cases_arr()
395
+ #@passed_cases_arr
396
+ read_result_storage('passed')
397
+ end
398
+ #This method gets the failed cases name array
399
+ #
400
+ # === params
401
+ #
402
+ # === returns
403
+ # nil
404
+ # === raises
405
+ def get_failed_cases_arr()
406
+ #@failed_cases_arr
407
+ read_result_storage('failed')
408
+ end
409
+ #This method gets the failed cases name array
410
+ #
411
+ # === params
412
+ #
413
+ # === returns
414
+ # nil
415
+ # === raises
416
+ def get_all_cases_arr()
417
+ #@all_cases_arr
418
+ read_result_storage('all')
419
+ end
420
+
421
+ #This method gets reporting groups
422
+ #
423
+ # === params
424
+ #
425
+ # === returns
426
+ # nil
427
+ # === raises
428
+ def get_reporting_groups()
429
+ @reporting_groups=$parameters[ :report_groups, nil ]
430
+ if @reporting_groups==nil
431
+ @reporting_groups=@generic_reporting_groups
432
+ end
433
+ @reporting_groups
434
+ end
435
+
436
+ #This method gets user created data
437
+ #
438
+ # === params
439
+ # nil
440
+ # === returns
441
+ # the testcase data and column objects
442
+ # === raises
443
+ def get_user_data()
444
+ return @test_case_user_data,@test_case_user_data_columns
445
+ end
446
+
447
+ #This method sets user data to display in chronological table
448
+ #
449
+ # === params
450
+ # nil
451
+ # === returns
452
+ # the testcase data and column objects
453
+ # === raises
454
+ def set_user_chronological_table_data(value)
455
+ if (value==nil)
456
+ @test_case_user_chronological_table_data=Hash.new
457
+ else
458
+ @test_case_user_chronological_table_data=value
459
+ end
460
+ end
461
+ #This method will parse duplicate groups out
462
+ #
463
+ # === params
464
+ #
465
+ # === returns
466
+ # nil
467
+ # === raises
468
+ def check_if_group_exists_groups(groups,new_group_item)
469
+ if groups.include? new_group_item
470
+ true
471
+ else
472
+ false
473
+ end
474
+ end
475
+ #This method creates a new TDriver test report folder when testing is started
476
+ #
477
+ # === params
478
+ # nil
479
+ # === returns
480
+ # nil
481
+ # === raises
482
+ def initialize_tdriver_report_folder()
483
+ t = Time.now
484
+ b_fixed_report_folder=false
485
+ @start_time=t
486
+ @reporter_base_folder = $parameters[ :report_outputter_path, 'tdriver_reports/' ]
487
+ if $parameters[ :report_outputter_folder, nil ] != nil
488
+ @report_folder=@reporter_base_folder+$parameters[ :report_outputter_folder, nil ]
489
+ b_fixed_report_folder=true
490
+ else
491
+ @report_folder=@reporter_base_folder+"test_run_"+t.strftime( "%Y%m%d%H%M%S" )
492
+ end
493
+
494
+ begin
495
+ #check if report directory exists
496
+ if File::directory?(@report_folder)==false
497
+ FileUtils.mkdir_p @report_folder+'/environment'
498
+ FileUtils.mkdir_p @report_folder+'/cases'
499
+ FileUtils.mkdir_p @report_folder+'/junit_xml'
500
+ else
501
+ if b_fixed_report_folder==true
502
+ FileUtils::remove_entry_secure(@report_folder, :force => true)
503
+ FileUtils.mkdir_p @report_folder+'/environment'
504
+ FileUtils.mkdir_p @report_folder+'/cases'
505
+ FileUtils.mkdir_p @report_folder+'/junit_xml'
506
+ end
507
+ end
508
+ write_style_sheet(@report_folder+'/tdriver_report_style.css')
509
+ write_page_start(@report_folder+'/cases/1_passed_index.html','Passed')
510
+ write_page_end(@report_folder+'/cases/1_passed_index.html')
511
+ write_page_start(@report_folder+'/cases/1_failed_index.html','Failed')
512
+ write_page_end(@report_folder+'/cases/1_failed_index.html')
513
+ write_page_start(@report_folder+'/cases/1_not_run_index.html','Not run')
514
+ write_page_end(@report_folder+'/cases/1_not_run_index.html')
515
+ write_page_start(@report_folder+'/cases/1_total_run_index.html','Total run')
516
+ write_page_end(@report_folder+'/cases/1_total_run_index.html')
517
+ write_page_start(@report_folder+'/cases/tdriver_log_index.html','TDriver log')
518
+ write_page_end(@report_folder+'/cases/tdriver_log_index.html')
519
+ write_page_start(@report_folder+'/cases/statistics_index.html','Statistics')
520
+ write_page_end(@report_folder+'/cases/statistics_index.html')
521
+ if $parameters[ :report_generate_rdoc, 'false' ]=='true'
522
+ if $parameters[ :ats4_error_recovery_enabled, 'false' ]=='true'
523
+ ats4_drop_folder_arr=@report_folder.split('ats4-results')
524
+ system("rdoc --include #{ats4_drop_folder_arr[0]}/* --exclude test_run --op #{@report_folder}/doc")
525
+ puts "RDoc generated from test folder: #{ats4_drop_folder_arr[0]}/*"
526
+ else
527
+ system("rdoc --exclude test_run --op #{@report_folder}/doc")
528
+ puts "RDoc generated from test folder: #{Dir.pwd}"
529
+ end
530
+
531
+
532
+ end
533
+ rescue Exception => e
534
+ raise e, "Unable to create report folder: #{@report_folder}", caller
535
+ end
536
+ return nil
537
+ end
538
+
539
+ #This method generates the tdriver test run summary page grouped by test case
540
+ #
541
+ # === params
542
+ # nil
543
+ # === returns
544
+ # nil
545
+ # === raises
546
+ def group_results_by_test_case()
547
+ @all_cases_arr=read_result_storage('all')
548
+ created_grouped_test_result=[]
549
+
550
+ @all_cases_arr.each do |test_case|
551
+ #name, status
552
+ tc=[test_case[7],test_case[0]]
553
+ if !created_grouped_test_result.include?(tc)
554
+ update_test_case_summary_page(test_case[7],false,"Test: #{test_case[0]} Result: #{test_case[7]}",test_case[0])
555
+ created_grouped_test_result << tc
556
+ end
557
+ end
558
+
559
+ end
560
+
561
+ #This method updates the tdriver test run summary page
562
+ #
563
+ # === params
564
+ # nil
565
+ # === returns
566
+ # nil
567
+ # === raises
568
+ def update_summary_page(status,exit_trace=nil)
569
+ begin
570
+ #Calculate run time
571
+ @run_time=Time.now-@start_time
572
+ if status=='inprogress'
573
+ write_page_start(@report_folder+'/index.html','TDriver test results')
574
+ write_summary_body(@report_folder+'/index.html',@start_time,'Tests Ongoing...',@run_time,@total_run,@total_passed,@total_failed,@total_not_run,@total_crash_files,@total_device_resets,@connection_errors)
575
+ write_page_end(@report_folder+'/index.html')
576
+ else
577
+ all_cases_arr=read_result_storage('all')
578
+ write_page_start(@report_folder+'/index.html','TDriver test results')
579
+ write_summary_body(@report_folder+'/index.html',@start_time,@end_time,@run_time,@total_run,@total_passed,@total_failed,@total_not_run,@total_crash_files,@total_device_resets,@connection_errors,all_cases_arr)
580
+ write_page_end(@report_folder+'/index.html')
581
+ end
582
+ if exit_trace
583
+ write_page_start(@report_folder+'/exit.html','TDriver test results')
584
+ write_exit_body(@report_folder+'/exit.html',exit_trace,@report_folder)
585
+ write_page_end(@report_folder+'/exit.html')
586
+ end
587
+ rescue Exception => e
588
+ raise e, "Unable to update summary page", e.backtrace
589
+ end
590
+ return nil
591
+ end
592
+ #This method updates the tdriver test run enviroment page
593
+ #
594
+ # === params
595
+ # nil
596
+ # === returns
597
+ # nil
598
+ # === raises
599
+ def update_environment_page()
600
+ begin
601
+ sw_version='-'
602
+ variant='-'
603
+ product='-'
604
+ language='-'
605
+ loc='-'
606
+ #Copy behaviour and parameter xml files in to the report folder
607
+ if /win/ =~ MobyUtil::EnvironmentHelper.ruby_platform || /mingw32/ =~ MobyUtil::EnvironmentHelper.ruby_platform
608
+ FileUtils.cp_r 'C:/tdriver/behaviours', @report_folder+'/environment' if File.directory?('C:/tdriver/behaviours')
609
+ FileUtils.cp_r 'C:/tdriver/templates', @report_folder+'/environment' if File.directory?('C:/tdriver/templates')
610
+ FileUtils.cp_r 'C:/tdriver/defaults', @report_folder+'/environment' if File.directory?('C:/tdriver/defaults')
611
+ FileUtils.copy('C:/tdriver/tdriver_parameters.xml',@report_folder+'/environment/tdriver_parameters.xml') if File.file?('C:/tdriver/tdriver_parameters.xml')
612
+ else
613
+ FileUtils.cp_r '/etc/tdriver/behaviours', @report_folder+'/environment' if File.directory?('/etc/tdriver/behaviours')
614
+ FileUtils.cp_r '/etc/tdriver/templates', @report_folder+'/environment' if File.directory?('/etc/tdriver/templates')
615
+ FileUtils.cp_r '/etc/tdriver/defaults', @report_folder+'/environment' if File.directory?('/etc/tdriver/defaults')
616
+ FileUtils.copy('/etc/tdriver/tdriver_parameters.xml',@report_folder+'/environment/tdriver_parameters.xml') if File.file?('/etc/tdriver/tdriver_parameters.xml')
617
+ end
618
+ if $parameters[ :report_monitor_memory, 'false']=='true'
619
+ TDriver::SUTFactory.connected_suts.each do |sut_id, sut_attributes|
620
+ if sut_attributes[:is_connected]
621
+ @memory_amount_start=get_sut_used_memory(sut_id, sut_attributes) if @memory_amount_start==nil || @memory_amount_start=='-'
622
+ @memory_amount_end=get_sut_used_memory(sut_id, sut_attributes)
623
+ @memory_amount_total=get_sut_total_memory(sut_id, sut_attributes)
624
+ @memory_amount_start='-' if @memory_amount_start==nil
625
+ @memory_amount_end='-' if @memory_amount_end==nil
626
+ @memory_amount_total='-' if @memory_amount_total==nil
627
+ end
628
+ end
629
+ end
630
+ if $parameters[ :report_collect_environment_data_from_sut, 'true']=='true'
631
+ TDriver::SUTFactory.connected_suts.each do |sut_id, sut_attributes|
632
+ begin
633
+ if sut_attributes[:is_connected]
634
+ sw_version=get_sut_sw_version(sut_id, sut_attributes)
635
+ variant=get_sut_lang_version(sut_id, sut_attributes)
636
+ @memory_amount_start=get_sut_used_memory(sut_id, sut_attributes) if @memory_amount_start==nil || @memory_amount_start=='-'
637
+ @memory_amount_end=get_sut_used_memory(sut_id, sut_attributes)
638
+ @memory_amount_total=get_sut_total_memory(sut_id, sut_attributes)
639
+ product=$parameters[sut_id][:product]
640
+ language=$parameters[sut_id][:language]
641
+ loc=$parameters[sut_id][:localisation_server_database_tablename]
642
+ end
643
+ @memory_amount_start='-' if @memory_amount_start==nil
644
+ @memory_amount_end='-' if @memory_amount_end==nil
645
+ @memory_amount_total='-' if @memory_amount_total==nil
646
+
647
+ sw_version='-' if sw_version==nil
648
+ variant='-' if variant==nil
649
+ product='-' if product==nil
650
+ language='-' if language==nil
651
+ loc='-' if loc==nil
652
+ rescue
653
+ end
654
+ end
655
+ end
656
+
657
+ write_page_start(@report_folder+'/environment/index.html','TDriver test environment')
658
+ write_environment_body(@report_folder+'/environment/index.html',RUBY_PLATFORM,sw_version,variant,product,language,loc)
659
+ write_page_end(@report_folder+'/environment/index.html')
660
+ $new_junit_xml_results.test_suite_properties(RUBY_PLATFORM,sw_version,variant,product,language,loc,@memory_amount_total,@memory_amount_start,@memory_amount_end)
661
+ rescue Exception => e
662
+ p e.message
663
+ p e.backtrace
664
+ raise e, "Unable to update environment page"
665
+ end
666
+ return nil
667
+ end
668
+ #This method updates the tdriver log page
669
+ #
670
+ # === params
671
+ # nil
672
+ # === returns
673
+ # nil
674
+ # === raises
675
+ def update_tdriver_log_page()
676
+ begin
677
+ write_page_start(@report_folder+'/cases/tdriver_log_index.html','TDriver log')
678
+ write_tdriver_log_body(@report_folder+'/cases/tdriver_log_index.html',@test_run_behaviour_log)
679
+ write_page_end(@report_folder+'/cases/tdriver_log_index.html')
680
+ rescue Exception => e
681
+ raise e
682
+ end
683
+ return nil
684
+ end
685
+ #This method gets the sut langugage version
686
+ #
687
+ # === params
688
+ # sut_id: sut id
689
+ # === returns
690
+ # nil
691
+ # === raises
692
+ def get_sut_lang_version(sut_id, sut_attributes)
693
+ MobyUtil::Logger.instance.enabled=false
694
+ lang_version='-'
695
+ begin
696
+ if $parameters[sut_id][:type]=='S60' || $parameters[sut_id][:type]=='Symbian'
697
+ lang_version=sut_attributes[:sut].sysinfo( :Lang_version )
698
+ end
699
+ if $parameters[sut_id][:type]=='QT'
700
+ if /win/ =~ MobyUtil::EnvironmentHelper.ruby_platform
701
+ lang_version=0
702
+ else
703
+ lang_version=0
704
+ end
705
+ end
706
+ rescue
707
+ ensure
708
+ if $parameters[ :logging_level, 0 ].to_i > 0
709
+ MobyUtil::Logger.instance.enabled=true
710
+ else
711
+ MobyUtil::Logger.instance.enabled=false
712
+ end
713
+ return lang_version
714
+ end
715
+ end
716
+ #This method gets the sut sw version
717
+ #
718
+ # === params
719
+ # sut_id: sut id
720
+ # === returns
721
+ # nil
722
+ # === raises
723
+ def get_sut_sw_version(sut_id, sut_attributes)
724
+ MobyUtil::Logger.instance.enabled=false
725
+ sw_version='-'
726
+ begin
727
+ if $parameters[sut_id][:type]=='S60' || $parameters[sut_id][:type]=='Symbian'
728
+ sw_version=sut_attributes[:sut].sysinfo( :Sw_version )
729
+ end
730
+ if $parameters[sut_id][:type]=='QT'
731
+ if /win/ =~ MobyUtil::EnvironmentHelper.ruby_platform
732
+ sw_version=0
733
+ else
734
+ sw_version=0
735
+ end
736
+ end
737
+ rescue
738
+ ensure
739
+ if $parameters[ :logging_level, 0 ].to_i > 0
740
+ MobyUtil::Logger.instance.enabled=true
741
+ else
742
+ MobyUtil::Logger.instance.enabled=false
743
+ end
744
+ return sw_version
745
+ end
746
+ end
747
+ #This method gets the sut used memory amount
748
+ #
749
+ # === params
750
+ # sut_id: sut id
751
+ # === returns
752
+ # nil
753
+ # === raises
754
+ def get_sut_used_memory(sut_id, sut_attributes)
755
+ MobyUtil::Logger.instance.enabled=false
756
+ memory=0
757
+ begin
758
+ if $parameters[sut_id][:type]=='S60' || $parameters[sut_id][:type]=='Symbian'
759
+ memory=sut_attributes[:sut].sysinfo( :Get_used_ram )
760
+ end
761
+ if $parameters[sut_id][:type]=='QT'
762
+ if /win/ =~ MobyUtil::EnvironmentHelper.ruby_platform
763
+ memory=0
764
+ else
765
+ memory=0
766
+ end
767
+ end
768
+ rescue
769
+ ensure
770
+ if $parameters[ :logging_level, 0 ].to_i > 0
771
+ MobyUtil::Logger.instance.enabled=true
772
+ else
773
+ MobyUtil::Logger.instance.enabled=false
774
+ end
775
+ return memory
776
+ end
777
+
778
+ end
779
+ #This method gets the sut total memory amount
780
+ #
781
+ # === params
782
+ # sut_id: sut id
783
+ # === returns
784
+ # nil
785
+ # === raises
786
+ def get_sut_total_memory(sut_id, sut_attributes)
787
+ MobyUtil::Logger.instance.enabled=false
788
+ memory=0
789
+ begin
790
+ if $parameters[sut_id][:type]=='S60' || $parameters[sut_id][:type]=='Symbian'
791
+ memory=sut_attributes[:sut].sysinfo( :Get_total_ram )
792
+ end
793
+ if $parameters[sut_id][:type]=='QT'
794
+ if /win/ =~ MobyUtil::EnvironmentHelper.ruby_platform
795
+ memory=0
796
+ else
797
+ memory=0
798
+ end
799
+ end
800
+ rescue
801
+ ensure
802
+ if $parameters[ :logging_level, 0 ].to_i > 0
803
+ MobyUtil::Logger.instance.enabled=true
804
+ else
805
+ MobyUtil::Logger.instance.enabled=false
806
+ end
807
+ return memory
808
+ end
809
+ end
810
+ #This method gets the sut total dump count
811
+ #
812
+ # === params
813
+ # sut_id: sut id
814
+ # === returns
815
+ # nil
816
+ # === raises
817
+ def get_sut_total_dump_count(sut_id, sut_attributes)
818
+
819
+ dump_count=sut_attributes[:sut].dump_count
820
+ @total_dump_count[sut_id.to_sym]=dump_count
821
+ @total_dump_count
822
+
823
+ end
824
+
825
+ #This method gets the sut total received data
826
+ #
827
+ # === params
828
+ # sut_id: sut id
829
+ # === returns
830
+ # nil
831
+ # === raises
832
+ def get_sut_total_received_data(sut_id, sut_attributes)
833
+ data=sut_attributes[:sut].received_data
834
+ @total_received_data[sut_id.to_sym]=data
835
+ @total_received_data
836
+ end
837
+
838
+ #This method gets the sut total sent data
839
+ #
840
+ # === params
841
+ # sut_id: sut id
842
+ # === returns
843
+ # nil
844
+ # === raises
845
+ def get_sut_total_sent_data(sut_id, sut_attributes)
846
+ data=sut_attributes[:sut].sent_data
847
+ @total_sent_data[sut_id.to_sym]=data
848
+ @total_sent_data
849
+ end
850
+
851
+ def calculate_total_values_from_hash(values)
852
+ total=0
853
+ values.each_value do |val|
854
+ total+=val
855
+ end
856
+ total
857
+ end
858
+
859
+ def write_to_result_storage(status,
860
+ testcase,
861
+ group,
862
+ reboots=0,
863
+ crashes=0,
864
+ start_time=nil,
865
+ user_data=nil,
866
+ duration=0,
867
+ memory_usage=0,
868
+ index=0,
869
+ log='',
870
+ comment='',
871
+ link='',
872
+ total_dump=0,
873
+ total_sent=0,
874
+ total_received=0,
875
+ user_data_rows=nil,
876
+ user_data_columns=nil,
877
+ connection_errors=0)
878
+
879
+ while $result_storage_in_use==true
880
+ sleep 1
881
+ end
882
+ $result_storage_in_use=true
883
+ begin
884
+ storage_file=nil
885
+
886
+ if @report_short_folders=='true'
887
+ html_link=status+'_'+index.to_s+'/index.html' if link==''
888
+ else
889
+ html_link=status+'_'+index.to_s+'_'+testcase+'/index.html' if link==''
890
+ end
891
+
892
+
893
+ storage_file='all_cases.xml'
894
+
895
+ file=@report_folder+'/'+storage_file
896
+
897
+ if File.exist?(file)
898
+ io = File.open(file, 'r')
899
+ xml_data = Nokogiri::XML(io){ |config| config.options = Nokogiri::XML::ParseOptions::STRICT }
900
+ io.close
901
+ test = Nokogiri::XML::Node.new("test",xml_data)
902
+ test_name = Nokogiri::XML::Node.new("name",test)
903
+ test_name.content = testcase
904
+ test_group = Nokogiri::XML::Node.new("group",test)
905
+ test_group.content = group
906
+ test_reboots = Nokogiri::XML::Node.new("reboots",test)
907
+ test_reboots.content = reboots
908
+ test_crashes = Nokogiri::XML::Node.new("crashes",test)
909
+ test_crashes.content = crashes
910
+ test_start_time = Nokogiri::XML::Node.new("start_time",test)
911
+ test_start_time.content = start_time.strftime("%d.%m.%Y %H:%M:%S")
912
+ test_duration = Nokogiri::XML::Node.new("duration",test)
913
+ test_duration.content = duration
914
+ test_memory_usage = Nokogiri::XML::Node.new("memory_usage",test)
915
+ test_memory_usage.content = memory_usage
916
+ test_status = Nokogiri::XML::Node.new("status",test)
917
+ test_status.content = status
918
+ test_index = Nokogiri::XML::Node.new("index",test)
919
+ test_index.content = index
920
+ test_log = Nokogiri::XML::Node.new("log",test)
921
+ test_log.content = log
922
+ test_comment = Nokogiri::XML::Node.new("comment",test)
923
+ test_comment.content = comment
924
+ test_link = Nokogiri::XML::Node.new("link",test)
925
+ test_link.content = html_link
926
+ test_connection_errors = Nokogiri::XML::Node.new("connection_errors",test)
927
+ test_connection_errors.content = connection_errors
928
+ test_dump_count = Nokogiri::XML::Node.new("dump_count",test)
929
+ test_dump_count.content = calculate_total_values_from_hash(total_dump)
930
+ test_sent_bytes = Nokogiri::XML::Node.new("sent_bytes",test)
931
+ test_sent_bytes.content = calculate_total_values_from_hash(total_sent)
932
+ test_received_bytes = Nokogiri::XML::Node.new("received_bytes",test)
933
+ test_received_bytes.content = calculate_total_values_from_hash(total_received)
934
+
935
+ test << test_name
936
+ test << test_group
937
+ test << test_reboots
938
+ test << test_crashes
939
+ test << test_start_time
940
+ test << test_duration
941
+ test << test_memory_usage
942
+ test << test_status
943
+ test << test_index
944
+ test << test_log
945
+ test << test_comment
946
+ test << test_link
947
+ test << test_connection_errors
948
+ test << test_dump_count
949
+ test << test_sent_bytes
950
+ test << test_received_bytes
951
+
952
+ if user_data!=nil && !user_data.empty?
953
+ test_data = Nokogiri::XML::Node.new("user_display_data",test)
954
+ user_data.each { |key,value|
955
+ data_value=Nokogiri::XML::Node.new("data",test_data)
956
+ data_value.content = value.to_s
957
+ data_value.set_attribute("id",key.to_s)
958
+ test_data << data_value
959
+ }
960
+ test<<test_data
961
+ end
962
+
963
+
964
+ if user_data_rows!=nil && !user_data_columns.empty?
965
+
966
+ test_data = Nokogiri::XML::Node.new("user_table_data",test)
967
+ #create the table rows
968
+ user_data_rows.each do |row_hash|
969
+ row_hash.sort{|a,b| a[0]<=>b[0]}.each do |value|
970
+ data_value=Nokogiri::XML::Node.new("column",test_data)
971
+ data_value.set_attribute("name",value[0].to_s)
972
+ data_value.content = value[1].to_s
973
+ test_data << data_value
974
+ end
975
+ end
976
+ test<<test_data
977
+ end
978
+
979
+ if @test_case_user_xml_data!=nil
980
+ test_data = Nokogiri::XML::Node.new("non_display_data",test)
981
+ #create the table rows
982
+ @test_case_user_xml_data.each_key do |key|
983
+ data_value=Nokogiri::XML::Node.new("data",test_data)
984
+ data_value.set_attribute("id",key.to_s)
985
+ data_value.content = @test_case_user_xml_data[key].to_s
986
+ test_data << data_value
987
+ end
988
+ test<<test_data
989
+ end
990
+
991
+ xml_data.root.add_child(test)
992
+ File.open(file, 'wb') {|f| f.write(xml_data) }
993
+ test=nil
994
+ xml_data=nil
995
+ else
996
+ counter=0
997
+ if user_data!=nil && !user_data.empty?
998
+ #to avoid odd number list for hash error!
999
+ user_data_keys = user_data.keys
1000
+ user_data_values = user_data.values
1001
+ counter = user_data_values.size-1
1002
+ end
1003
+
1004
+ builder = Nokogiri::XML::Builder.new do |xml|
1005
+ xml.tests {
1006
+ xml.test {
1007
+ xml.name testcase
1008
+ xml.group group
1009
+ xml.reboots reboots
1010
+ xml.crashes crashes
1011
+ xml.start_time start_time.strftime("%d.%m.%Y %H:%M:%S")
1012
+ xml.duration duration
1013
+ xml.memory_usage memory_usage
1014
+ xml.status status
1015
+ xml.index index
1016
+ xml.log log
1017
+ xml.comment comment
1018
+ xml.link html_link
1019
+ xml.connection_errors connection_errors
1020
+ xml.dump_count calculate_total_values_from_hash(total_dump)
1021
+ xml.sent_bytes calculate_total_values_from_hash(total_sent)
1022
+ xml.received_bytes calculate_total_values_from_hash(total_received)
1023
+
1024
+ if user_data!=nil && !user_data.empty?
1025
+ xml.user_display_data {
1026
+ (0..counter).each { |i|
1027
+ xml.data("id"=>user_data_keys.at(i).to_s){
1028
+ xml.text user_data_values.at(i).to_s{
1029
+ }
1030
+ }
1031
+ }
1032
+ }
1033
+ end
1034
+
1035
+ if user_data_rows!=nil && !user_data_columns.empty?
1036
+
1037
+ xml.user_table_data{
1038
+ #create the table rows
1039
+ user_data_rows.each do |row_hash|
1040
+ row_hash.sort{|a,b| a[0]<=>b[0]}.each do |value|
1041
+ xml.column("name"=>value[0].to_s){
1042
+ xml.text value[1].to_s
1043
+ }
1044
+ end
1045
+ end
1046
+ }
1047
+
1048
+ end
1049
+
1050
+
1051
+ if @test_case_user_xml_data!=nil
1052
+
1053
+ xml.non_display_data{
1054
+ #create the table rows
1055
+ @test_case_user_xml_data.each_key do |key|
1056
+
1057
+ xml.data("id"=>key.to_s){
1058
+ xml.text @test_case_user_xml_data[key].to_s
1059
+ }
1060
+
1061
+ end
1062
+ }
1063
+
1064
+ end
1065
+
1066
+ }
1067
+ }
1068
+ end
1069
+ File.open(file, 'w') {|f| f.write(builder.to_xml) }
1070
+ end
1071
+ $result_storage_in_use=false
1072
+ builder=nil
1073
+ rescue Nokogiri::XML::SyntaxError => e
1074
+ $result_storage_in_use=false
1075
+ $stderr.puts "caught exception when writing results: #{e}"
1076
+ end
1077
+ end
1078
+
1079
+ def parse_results_for_current_test( by_status )
1080
+
1081
+ ret_xml = nil
1082
+ while $result_storage_in_use==true
1083
+ sleep 1
1084
+ end
1085
+ $result_storage_in_use=true
1086
+ begin
1087
+ result_storage=nil
1088
+ result_storage=Array.new
1089
+ storage_file='all_cases.xml'
1090
+
1091
+
1092
+ file=@report_folder+'/'+storage_file
1093
+ if File.exist?(file)
1094
+ io = File.open(file, 'r')
1095
+ ret_xml = Nokogiri::XML(io){ |config| config.options = Nokogiri::XML::ParseOptions::STRICT }
1096
+
1097
+ io.close
1098
+
1099
+ status_search = ""
1100
+
1101
+ case by_status
1102
+ when "all"
1103
+ status_search = ""
1104
+ when "passed"
1105
+ status_search = " and (status='"
1106
+ status_search << @pass_statuses.join("' or status='")
1107
+ status_search << "')"
1108
+ when "failed"
1109
+ status_search = " and (status='"
1110
+ status_search << @fail_statuses.join("' or status='")
1111
+ status_search << "')"
1112
+ when "not run"
1113
+ status_search = " and (status='"
1114
+ status_search << @not_run_statuses.join("' or status='")
1115
+ status_search << "')"
1116
+ else
1117
+ status_search = " and status='" + by_status + "'"
1118
+ end
1119
+
1120
+ ret_xml = ret_xml.root.xpath("//tests/test[name='#{$new_test_case.test_case_name}' and group='#{$new_test_case.test_case_group}'#{status_search}]")
1121
+ else
1122
+ #puts "No file " << storage_file
1123
+ end
1124
+ rescue Exception => e
1125
+ $result_storage_in_use=false
1126
+ raise e
1127
+
1128
+ end
1129
+
1130
+ $result_storage_in_use=false
1131
+
1132
+ ret_xml
1133
+
1134
+ end
1135
+
1136
+ def read_result_storage(results,case_name=nil)
1137
+ while $result_storage_in_use==true
1138
+ sleep 1
1139
+ end
1140
+ $result_storage_in_use=true
1141
+ begin
1142
+ result_storage=nil
1143
+ result_storage=Array.new
1144
+ storage_file='all_cases.xml'
1145
+
1146
+ nodes=Nokogiri::XML::NodeSet
1147
+
1148
+ file=@report_folder+'/'+storage_file
1149
+ if File.exist?(file)
1150
+ io = File.open(file, 'rb')
1151
+ xml_data = Nokogiri::XML(io){ |config| config.options = Nokogiri::XML::ParseOptions::STRICT }
1152
+ io.close
1153
+ if case_name
1154
+ nodes=xml_data.root.xpath("//tests/test[name='#{case_name}' and status='#{results.gsub('_',' ')}']")
1155
+ elsif results=='crash'
1156
+ nodes=xml_data.root.xpath("//tests/test[crashes>0]")
1157
+ elsif results=='reboot'
1158
+ nodes=xml_data.root.xpath("//tests/test[reboots>0]")
1159
+ elsif results=='connection_errors'
1160
+ nodes=xml_data.root.xpath("//tests/test[connection_errors>0]")
1161
+ elsif results!='all' && results!='crash' && results!='reboot' && results!='connection_errors'
1162
+ case results
1163
+ when 'passed'
1164
+
1165
+ nodes=xml_data.root.xpath("//tests/test[status='#{@pass_statuses.first}']")
1166
+
1167
+ when 'failed'
1168
+
1169
+ nodes=xml_data.root.xpath("//tests/test[status='#{@fail_statuses.first}']")
1170
+
1171
+ when 'not_run'
1172
+
1173
+ nodes=xml_data.root.xpath("//tests/test[status='#{@not_run_statuses.first}']")
1174
+
1175
+ end
1176
+ else
1177
+ if @report_exclude_passed_cases=='true'
1178
+ nodes=xml_data.root.xpath("//tests/test[status!='passed']")
1179
+ else
1180
+ nodes=xml_data.root.xpath("//tests/test")
1181
+ end
1182
+
1183
+ end
1184
+
1185
+ nodes.each do |node|
1186
+ value=node.search("name").text #0
1187
+ group=node.search("group").text #1
1188
+ reboots=node.search("reboots").text #2
1189
+ crashes=node.search("crashes").text #3
1190
+ start_time=node.search("start_time").text #4
1191
+ duration="%0.2f" % node.search("duration").text #5
1192
+ memory_usage=node.search("memory_usage").text #6
1193
+ status=node.search("status").text #7
1194
+ index=node.search("index").text #8
1195
+ log=node.search("log").text #9
1196
+ comment=node.search("comment").text #10
1197
+ link=node.search("link").text #11
1198
+ dump_count=node.search("dump_count").text #12
1199
+ sent_bytes=node.search("sent_bytes").text #13
1200
+ received_bytes=node.search("received_bytes").text #14
1201
+ connection_errors=node.search("connection_errors").text #15
1202
+ user_data = Hash.new
1203
+ node.xpath("user_display_data/data").each do |data_node|
1204
+ value_name = data_node.get_attribute("id")
1205
+ val = data_node.text
1206
+ user_data[value_name] = val
1207
+ end
1208
+
1209
+ current_record=[value,
1210
+ group,
1211
+ reboots,
1212
+ crashes,
1213
+ start_time,
1214
+ duration,
1215
+ memory_usage,
1216
+ status,
1217
+ index,
1218
+ log,
1219
+ comment,
1220
+ link,
1221
+ user_data,
1222
+ dump_count,
1223
+ sent_bytes,
1224
+ received_bytes,
1225
+ connection_errors
1226
+ ]
1227
+
1228
+ result_storage << current_record
1229
+
1230
+ end
1231
+ xml_data=nil
1232
+ $result_storage_in_use=false
1233
+ result_storage
1234
+ else
1235
+ $result_storage_in_use=false
1236
+ result_storage
1237
+ end
1238
+ rescue Nokogiri::XML::SyntaxError => e
1239
+ $result_storage_in_use=false
1240
+ $stderr.puts "caught exception when reading results: #{e}"
1241
+ result_storage
1242
+ end
1243
+ end
1244
+
1245
+ def delete_result_storage()
1246
+ storage_file='passed_cases.xml'
1247
+ file=@report_folder+'/'+storage_file
1248
+ if File.exist?(file)
1249
+ File.delete(file)
1250
+ end
1251
+
1252
+ storage_file='failed_cases.xml'
1253
+ file=@report_folder+'/'+storage_file
1254
+ if File.exist?(file)
1255
+ File.delete(file)
1256
+ end
1257
+
1258
+ storage_file='not_run_cases.xml'
1259
+ file=@report_folder+'/'+storage_file
1260
+ if File.exist?(file)
1261
+ File.delete(file)
1262
+ end
1263
+
1264
+ storage_file='all_cases.xml'
1265
+ file=@report_folder+'/'+storage_file
1266
+ if File.exist?(file)
1267
+ File.delete(file)
1268
+ end
1269
+ end
1270
+ #This method disconencts the connected devices
1271
+ #
1272
+ # === params
1273
+ # status: last run test case
1274
+ # === returns
1275
+ # nil
1276
+ # === raises
1277
+ def disconnect_connected_devices()
1278
+ if $parameters[ :report_disconnect_connected_devices, false ] == 'true'
1279
+ TDriver::SUTFactory.connected_suts.each do |sut_id, sut_attributes|
1280
+ sut_attributes[:sut].disconnect() if sut_attributes[:is_connected]
1281
+ end
1282
+ end
1283
+ end
1284
+
1285
+ def split_array(splittable_array,chunks)
1286
+ a = []
1287
+ splittable_array.each_with_index do |x,i|
1288
+ a << [] if i % chunks == 0
1289
+ a.last << x
1290
+ end
1291
+ a
1292
+ end
1293
+
1294
+
1295
+
1296
+ #This method updates the tdriver test run enviroment page
1297
+ #
1298
+ # === params
1299
+ # status: last run test case
1300
+ # === returns
1301
+ # nil
1302
+ # === raises
1303
+ def update_test_case_summary_page(status,rewrite=false,title="",test_case_name=nil,tc_result_arr=nil)
1304
+ @cases_arr=Array.new
1305
+ search_case = nil
1306
+ if @pass_statuses.include?(status)
1307
+ search_case = "passed"
1308
+ return if @report_exclude_passed_cases=='true'
1309
+ elsif @fail_statuses.include?(status)
1310
+ search_case = "failed"
1311
+ elsif @not_run_statuses.include?(status)
1312
+ search_case = "not_run"
1313
+ else
1314
+ search_case = status
1315
+ end
1316
+ status=status.gsub(' ','_')
1317
+ if test_case_name
1318
+ @cases_arr=read_result_storage(search_case,test_case_name)
1319
+ else
1320
+ @cases_arr=read_result_storage(search_case)
1321
+ end
1322
+ splitted_arr=Array.new
1323
+ splitted_arr=split_array(@cases_arr,@pages.to_i)
1324
+ page=1
1325
+ splitted_arr.each do |case_arr|
1326
+
1327
+ if test_case_name
1328
+ if @report_pages_ready.include?("#{page}_#{status}_#{test_case_name}")==false || rewrite==true
1329
+ write_page_start(@report_folder+"/cases/#{page}_#{status}_#{test_case_name}_index.html",title,page,splitted_arr.length)
1330
+ write_test_case_summary_body(@report_folder+"/cases/#{page}_#{status}_#{test_case_name}_index.html",status,case_arr,nil)
1331
+ page_ready=write_page_end(@report_folder+"/cases/#{page}_#{status}_#{test_case_name}_index.html",page,splitted_arr.length)
1332
+ end
1333
+ else
1334
+ if @report_pages_ready.include?("#{page}_#{status}")==false || rewrite==true
1335
+ write_page_start(@report_folder+"/cases/#{page}_#{status}_index.html",title,page,splitted_arr.length)
1336
+ write_test_case_summary_body(@report_folder+"/cases/#{page}_#{status}_index.html",status,case_arr,nil)
1337
+ page_ready=write_page_end(@report_folder+"/cases/#{page}_#{status}_index.html",page,splitted_arr.length)
1338
+ end
1339
+ end
1340
+ if page_ready!=nil
1341
+ @report_pages_ready << "#{page_ready}_#{status}"
1342
+ end
1343
+ page_ready=nil
1344
+ page+=1
1345
+ end
1346
+
1347
+ end
1348
+ #This method updates the tdriver test run enviroment pages
1349
+ #
1350
+ # === params
1351
+ # status: last run test case
1352
+ # === returns
1353
+ # nil
1354
+ # === raises
1355
+ def update_test_case_summary_pages(status,rewrite=false)
1356
+
1357
+ @all_cases_arr=Array.new
1358
+ begin
1359
+ case status
1360
+ when 'passed'
1361
+ update_test_case_summary_page(status,rewrite,'Passed')
1362
+
1363
+ when 'failed'
1364
+ update_test_case_summary_page(status,rewrite,'Failed')
1365
+
1366
+ when 'not run'
1367
+ update_test_case_summary_page('not_run',rewrite,'Not run')
1368
+
1369
+ when 'statistics'
1370
+ @all_cases_arr=read_result_storage('all')
1371
+ write_page_start(@report_folder+'/cases/statistics_index.html','Statistics')
1372
+ write_test_case_summary_body(@report_folder+'/cases/statistics_index.html','statistics',@all_cases_arr)
1373
+ write_duration_graph(@report_folder+'/cases/statistics_index.html', @report_folder, 'duration_graph.png', @all_cases_arr) if @duration_graph=='true'
1374
+ write_page_end(@report_folder+'/cases/statistics_index.html')
1375
+ when 'all'
1376
+ @all_cases_arr=read_result_storage(status)
1377
+ splitted_arr=Array.new
1378
+ splitted_arr=split_array(@all_cases_arr,@pages.to_i)
1379
+ page=1
1380
+ splitted_arr.each do |case_arr|
1381
+ if File.exist?(@report_folder+"/cases/#{page+1}_total_run_index.html")==false || rewrite==true
1382
+ if @report_pages_ready.include?("#{page}_all")==false || rewrite==true
1383
+ write_page_start(@report_folder+"/cases/#{page}_total_run_index.html",'Total run',page,splitted_arr.length)
1384
+ write_page_start(@report_folder+"/cases/#{page}_chronological_total_run_index.html",'Total run',page,splitted_arr.length)
1385
+ write_test_case_summary_body(@report_folder+"/cases/#{page}_total_run_index.html",'total run',case_arr,@report_folder+"/cases/#{page}_chronological_total_run_index.html",page)
1386
+ end
1387
+ end
1388
+ write_page_end(@report_folder+"/cases/#{page}_chronological_total_run_index.html",page,splitted_arr.length) if @report_pages_ready.include?("#{page}_all")==false || rewrite==true
1389
+ page_ready=write_page_end(@report_folder+"/cases/#{page}_total_run_index.html",page,splitted_arr.length) if @report_pages_ready.include?("#{page}_all")==false || rewrite==true
1390
+
1391
+ if page_ready!=nil
1392
+ @report_pages_ready << "#{page_ready}_all"
1393
+ end
1394
+ page_ready=nil
1395
+ page+=1
1396
+ end
1397
+ end
1398
+ @all_cases_arr=nil
1399
+ update_test_case_summary_pages_for_crashes_and_reboots(rewrite)
1400
+ rescue Exception => e
1401
+ puts e.backtrace
1402
+ raise e, "Unable to update test case summary pages", caller
1403
+ end
1404
+ return nil
1405
+ end
1406
+
1407
+ def update_test_case_summary_pages_for_crashes_and_reboots(rewrite=false)
1408
+
1409
+ begin
1410
+ update_test_case_summary_page('crash',rewrite,'Crash')
1411
+ update_test_case_summary_page('reboot',rewrite,'Reboot')
1412
+ update_test_case_summary_page('connection_errors',rewrite,'Connection Errors')
1413
+ rescue Exception => e
1414
+ raise e, "Unable to update test case summary pages for crashes and reboots", caller
1415
+ end
1416
+ return nil
1417
+ end
1418
+
1419
+ def create_csv
1420
+ storage_file='all_cases.xml'
1421
+ csv_file = 'all_cases.csv'
1422
+ csv_array = Array.new
1423
+ not_added=false
1424
+
1425
+ file=@report_folder+'/'+storage_file
1426
+ csv = nil
1427
+ begin
1428
+ if File.exist?(file)
1429
+ io = File.open(file, 'r')
1430
+ csv = File.new(@report_folder+'/'+ csv_file, 'w')
1431
+ xml_data = Nokogiri::XML(io){ |config| config.options = Nokogiri::XML::ParseOptions::STRICT }
1432
+ io.close
1433
+ xml_data.root.xpath("//tests/test").each do |node|
1434
+
1435
+ line=Array.new
1436
+ first_line=Array.new
1437
+
1438
+ value=node.search("name").text
1439
+ first_line<<"name" if !not_added
1440
+ line<<value
1441
+ start_time=node.search("start_time").text
1442
+ first_line<<"start_time" if !not_added
1443
+ line<<start_time
1444
+ duration=node.search("duration").text
1445
+ first_line<<"duration" if !not_added
1446
+ line<<duration
1447
+ memory_usage=node.search("memory_usage").text
1448
+ first_line<<"memory_usage" if !not_added
1449
+ line<<memory_usage
1450
+ status=node.search("status").text
1451
+ first_line<<"status" if !not_added
1452
+ line<<status
1453
+
1454
+ node.xpath("user_display_data/data").each do |data_node|
1455
+ value_name = data_node.get_attribute("id")
1456
+ value = data_node.text
1457
+ first_line<<value_name if !not_added
1458
+ line<<value
1459
+ end
1460
+
1461
+ csv.puts(first_line.join(",")) if !not_added
1462
+ csv.puts(line.join(","))
1463
+ not_added=true
1464
+ end
1465
+ csv.close
1466
+ else
1467
+ puts "Unable to create csv file"
1468
+ end
1469
+ rescue Exception => e
1470
+ puts "Error creating csv file"
1471
+ puts e.to_s
1472
+ end
1473
+ end
1474
+
1475
+ end
1476
+ end