testability-driver 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (214) hide show
  1. data/README +1 -0
  2. data/bin/start_app_perf +199 -0
  3. data/bin/tdriver-devtools +3 -0
  4. data/config/sut_parameters.rb +39 -0
  5. data/ext/extconf.rb +67 -0
  6. data/ext/native_extensions.c +70 -0
  7. data/lib/matti.rb +30 -0
  8. data/lib/tdriver-devtools/behaviour/old/xml/example/flick-example.rb +223 -0
  9. data/lib/tdriver-devtools/behaviour/old/xml/example/impl.rb_invalid +194 -0
  10. data/lib/tdriver-devtools/behaviour/old/xml/generate_behaviour_xml.rb +95 -0
  11. data/lib/tdriver-devtools/behaviour/old/xml/lib/tdriver_generator.rb +722 -0
  12. data/lib/tdriver-devtools/behaviour/old/xml/qdoc_generator.rb +321 -0
  13. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.method.template +43 -0
  14. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.module.template +54 -0
  15. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.argument.template +7 -0
  16. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.argument_type.template +7 -0
  17. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.exception.template +5 -0
  18. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.howto.line.template +2 -0
  19. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.howto.template +5 -0
  20. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.method.template +23 -0
  21. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.template +14 -0
  22. data/lib/tdriver-devtools/behaviour/old/xml/update +3 -0
  23. data/lib/tdriver-devtools/behaviour/xml/generate.rb +88 -0
  24. data/lib/tdriver-devtools/behaviour/xml/rdoc_behaviour_xml_generator.rb +1924 -0
  25. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument.default.template +1 -0
  26. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument.template +3 -0
  27. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument_type.template +4 -0
  28. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.exception.template +4 -0
  29. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.arguments.template +4 -0
  30. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.deprecated.template +3 -0
  31. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.exceptions.template +3 -0
  32. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.info.template +1 -0
  33. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.returns.template +3 -0
  34. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.tables.template +3 -0
  35. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.template +12 -0
  36. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.returns.template +5 -0
  37. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.item.template +1 -0
  38. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.row.template +2 -0
  39. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.template +8 -0
  40. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.template +14 -0
  41. data/lib/tdriver-devtools/behaviour/xml_generator/example/flick-example.rb +245 -0
  42. data/lib/tdriver-devtools/behaviour/xml_generator/example/sut.rb +964 -0
  43. data/lib/tdriver-devtools/behaviour/xml_generator/generate.rb +68 -0
  44. data/lib/tdriver-devtools/behaviour/xml_generator/lib/custom_rdoc_generator.rb +1865 -0
  45. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.argument.default.template +1 -0
  46. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.argument.template +3 -0
  47. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.argument_type.template +4 -0
  48. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.exception.template +4 -0
  49. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.arguments.template +4 -0
  50. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.deprecated.template +3 -0
  51. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.exceptions.template +3 -0
  52. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.info.template +1 -0
  53. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.returns.template +3 -0
  54. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.tables.template +3 -0
  55. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.template +12 -0
  56. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.returns.template +5 -0
  57. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.table.item.template +1 -0
  58. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.table.row.template +2 -0
  59. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.table.template +7 -0
  60. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.template +14 -0
  61. data/lib/tdriver-devtools/behaviour/xml_generator/update +3 -0
  62. data/lib/tdriver-devtools/doc/behaviour_xml/QtExampleGestureBehaviour.xml +138 -0
  63. data/lib/tdriver-devtools/doc/behaviour_xml/created.rid +1 -0
  64. data/lib/tdriver-devtools/doc/behaviour_xml/tdriver.hash +1 -0
  65. data/lib/tdriver-devtools/doc/feature_xml/qt_widget_hold.feature.xml +9 -0
  66. data/lib/tdriver-devtools/doc/feature_xml/qt_widget_tap.feature.xml +9 -0
  67. data/lib/tdriver-devtools/doc/generate.rb +892 -0
  68. data/lib/tdriver-devtools/doc/update +1 -0
  69. data/lib/tdriver-devtools/doc/xslt/html.rb +7 -0
  70. data/lib/tdriver-devtools/doc/xslt/template.xsl +1861 -0
  71. data/lib/tdriver-devtools/doc/xslt/update +3 -0
  72. data/lib/tdriver-devtools/plugin/placeholder.txt +1 -0
  73. data/lib/tdriver-devtools/tdriver-devtools.rb +404 -0
  74. data/lib/tdriver-devtools/tests/feature_tests/example/flick-example.rb +233 -0
  75. data/lib/tdriver-devtools/tests/feature_tests/example/impl.rb +194 -0
  76. data/lib/tdriver-devtools/tests/feature_tests/generate.rb +82 -0
  77. data/lib/tdriver-devtools/tests/feature_tests/lib/custom_rdoc_generator.rb +468 -0
  78. data/lib/tdriver-devtools/tests/feature_tests/templates/feature_attribute.template +5 -0
  79. data/lib/tdriver-devtools/tests/feature_tests/templates/feature_method.template +5 -0
  80. data/lib/tdriver-devtools/tests/feature_tests/templates/scenario_attribute.template +5 -0
  81. data/lib/tdriver-devtools/tests/feature_tests/templates/scenario_method.template +5 -0
  82. data/lib/tdriver-devtools/tests/feature_tests/update +3 -0
  83. data/lib/tdriver.rb +26 -0
  84. data/lib/tdriver/base/behaviour/behaviour.rb +32 -0
  85. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_composition.rb +94 -0
  86. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_description.rb +262 -0
  87. data/lib/tdriver/base/behaviour/behaviours/object_composition.rb +111 -0
  88. data/lib/tdriver/base/behaviour/factory.rb +380 -0
  89. data/lib/tdriver/base/behaviour/loader.rb +28 -0
  90. data/lib/tdriver/base/command_data/command_data.rb +51 -0
  91. data/lib/tdriver/base/command_data/loader.rb +25 -0
  92. data/lib/tdriver/base/errors.rb +131 -0
  93. data/lib/tdriver/base/loader.rb +38 -0
  94. data/lib/tdriver/base/state_object.rb +270 -0
  95. data/lib/tdriver/base/sut/adapter.rb +28 -0
  96. data/lib/tdriver/base/sut/controller.rb +119 -0
  97. data/lib/tdriver/base/sut/factory.rb +287 -0
  98. data/lib/tdriver/base/sut/generic/behaviours/application.rb +243 -0
  99. data/lib/tdriver/base/sut/generic/behaviours/controller.rb +67 -0
  100. data/lib/tdriver/base/sut/generic/behaviours/find.rb +96 -0
  101. data/lib/tdriver/base/sut/generic/behaviours/flash_behaviour.rb +346 -0
  102. data/lib/tdriver/base/sut/generic/behaviours/sut.rb +1268 -0
  103. data/lib/tdriver/base/sut/generic/behaviours/switchbox_behaviour.rb +182 -0
  104. data/lib/tdriver/base/sut/generic/behaviours/verification.rb +119 -0
  105. data/lib/tdriver/base/sut/generic/commands/application.rb +219 -0
  106. data/lib/tdriver/base/sut/generic/commands/key_sequence.rb +82 -0
  107. data/lib/tdriver/base/sut/generic/commands/screen_capture.rb +58 -0
  108. data/lib/tdriver/base/sut/generic/plugin.rb +96 -0
  109. data/lib/tdriver/base/sut/loader.rb +35 -0
  110. data/lib/tdriver/base/sut/sut.rb +67 -0
  111. data/lib/tdriver/base/test_object/abstract.rb +179 -0
  112. data/lib/tdriver/base/test_object/behaviours/syncronization.rb +94 -0
  113. data/lib/tdriver/base/test_object/behaviours/test_object.rb +787 -0
  114. data/lib/tdriver/base/test_object/factory.rb +618 -0
  115. data/lib/tdriver/base/test_object/identificator.rb +511 -0
  116. data/lib/tdriver/base/test_object/loader.rb +37 -0
  117. data/lib/tdriver/env.rb +21 -0
  118. data/lib/tdriver/loader.rb +36 -0
  119. data/lib/tdriver/matti.rb +35 -0
  120. data/lib/tdriver/report/error_recovery/tdriver_custom_error_recovery.rb +83 -0
  121. data/lib/tdriver/report/error_recovery/tdriver_error_recovery.rb +158 -0
  122. data/lib/tdriver/report/error_recovery/tdriver_error_recovery_settings.rb +98 -0
  123. data/lib/tdriver/report/report.rb +47 -0
  124. data/lib/tdriver/report/report_api.rb +207 -0
  125. data/lib/tdriver/report/report_combine.rb +86 -0
  126. data/lib/tdriver/report/report_crash_file_capture.rb +167 -0
  127. data/lib/tdriver/report/report_creator.rb +571 -0
  128. data/lib/tdriver/report/report_cucumber.rb +158 -0
  129. data/lib/tdriver/report/report_cucumber_listener.rb +337 -0
  130. data/lib/tdriver/report/report_cucumber_reporter.rb +335 -0
  131. data/lib/tdriver/report/report_data_presentation.rb +152 -0
  132. data/lib/tdriver/report/report_data_table.rb +64 -0
  133. data/lib/tdriver/report/report_execution_statistics.rb +284 -0
  134. data/lib/tdriver/report/report_file_capture.rb +159 -0
  135. data/lib/tdriver/report/report_grouping.rb +539 -0
  136. data/lib/tdriver/report/report_junit_xml.rb +147 -0
  137. data/lib/tdriver/report/report_rspec.rb +108 -0
  138. data/lib/tdriver/report/report_test_case_run.rb +621 -0
  139. data/lib/tdriver/report/report_test_run.rb +1286 -0
  140. data/lib/tdriver/report/report_test_unit.rb +175 -0
  141. data/lib/tdriver/report/report_writer.rb +1405 -0
  142. data/lib/tdriver/tdriver.rb +158 -0
  143. data/lib/tdriver/util/common.rb +24 -0
  144. data/lib/tdriver/util/common/array.rb +39 -0
  145. data/lib/tdriver/util/common/crc16.rb +100 -0
  146. data/lib/tdriver/util/common/environment.rb +153 -0
  147. data/lib/tdriver/util/common/error.rb +39 -0
  148. data/lib/tdriver/util/common/file.rb +315 -0
  149. data/lib/tdriver/util/common/gem.rb +108 -0
  150. data/lib/tdriver/util/common/kernel.rb +189 -0
  151. data/lib/tdriver/util/common/loader.rb +39 -0
  152. data/lib/tdriver/util/common/retryable.rb +98 -0
  153. data/lib/tdriver/util/common/string.rb +77 -0
  154. data/lib/tdriver/util/dbaccess/dbaccess.rb +188 -0
  155. data/lib/tdriver/util/dbaccess/dbconnection.rb +41 -0
  156. data/lib/tdriver/util/dbaccess/error.rb +35 -0
  157. data/lib/tdriver/util/dbaccess/loader.rb +29 -0
  158. data/lib/tdriver/util/dynamic_attribute_filter.rb +182 -0
  159. data/lib/tdriver/util/hooking.rb +434 -0
  160. data/lib/tdriver/util/loader.rb +65 -0
  161. data/lib/tdriver/util/localisation.rb +24 -0
  162. data/lib/tdriver/util/localisation/error.rb +32 -0
  163. data/lib/tdriver/util/localisation/loader.rb +28 -0
  164. data/lib/tdriver/util/localisation/localisation.rb +479 -0
  165. data/lib/tdriver/util/logger.rb +377 -0
  166. data/lib/tdriver/util/operator_data/error.rb +29 -0
  167. data/lib/tdriver/util/operator_data/loader.rb +26 -0
  168. data/lib/tdriver/util/operator_data/operator_data.rb +93 -0
  169. data/lib/tdriver/util/other/config.rb +221 -0
  170. data/lib/tdriver/util/parameter.rb +24 -0
  171. data/lib/tdriver/util/parameter/error.rb +45 -0
  172. data/lib/tdriver/util/parameter/loader.rb +37 -0
  173. data/lib/tdriver/util/parameter/parameter.rb +285 -0
  174. data/lib/tdriver/util/parameter/parameter_hash.rb +101 -0
  175. data/lib/tdriver/util/parameter/parameter_template.rb +120 -0
  176. data/lib/tdriver/util/parameter/parameter_user_api.rb +84 -0
  177. data/lib/tdriver/util/parameter/parameter_xml.rb +247 -0
  178. data/lib/tdriver/util/plugin/abstract.rb +60 -0
  179. data/lib/tdriver/util/plugin/error.rb +25 -0
  180. data/lib/tdriver/util/plugin/loader.rb +28 -0
  181. data/lib/tdriver/util/plugin/service.rb +200 -0
  182. data/lib/tdriver/util/recorder.rb +292 -0
  183. data/lib/tdriver/util/stats.rb +90 -0
  184. data/lib/tdriver/util/user_data/error.rb +29 -0
  185. data/lib/tdriver/util/user_data/loader.rb +26 -0
  186. data/lib/tdriver/util/user_data/user_data.rb +103 -0
  187. data/lib/tdriver/util/video_rec.rb +264 -0
  188. data/lib/tdriver/util/xml/abstraction.rb +47 -0
  189. data/lib/tdriver/util/xml/builder.rb +54 -0
  190. data/lib/tdriver/util/xml/document.rb +32 -0
  191. data/lib/tdriver/util/xml/element.rb +32 -0
  192. data/lib/tdriver/util/xml/error.rb +46 -0
  193. data/lib/tdriver/util/xml/loader.rb +46 -0
  194. data/lib/tdriver/util/xml/nil_element.rb +89 -0
  195. data/lib/tdriver/util/xml/nodeset.rb +32 -0
  196. data/lib/tdriver/util/xml/parsers/libxml/libxml.rb +140 -0
  197. data/lib/tdriver/util/xml/parsers/loader.rb +22 -0
  198. data/lib/tdriver/util/xml/parsers/nokogiri/abstraction.rb +111 -0
  199. data/lib/tdriver/util/xml/parsers/nokogiri/attribute.rb +54 -0
  200. data/lib/tdriver/util/xml/parsers/nokogiri/builder.rb +58 -0
  201. data/lib/tdriver/util/xml/parsers/nokogiri/document.rb +58 -0
  202. data/lib/tdriver/util/xml/parsers/nokogiri/element.rb +147 -0
  203. data/lib/tdriver/util/xml/parsers/nokogiri/loader.rb +42 -0
  204. data/lib/tdriver/util/xml/parsers/nokogiri/nodeset.rb +187 -0
  205. data/lib/tdriver/util/xml/xml.rb +170 -0
  206. data/lib/tdriver/verify/verify.rb +687 -0
  207. data/lib/tdriver/verify/verify.rb_org +630 -0
  208. data/lib/tdriver/version.rb +21 -0
  209. data/xml/behaviours/generic.xml +495 -0
  210. data/xml/defaults/generic.xml +97 -0
  211. data/xml/defaults/sut_generic.xml +36 -0
  212. data/xml/parameters/tdriver_parameters.xml +23 -0
  213. data/xml/templates/generic.xml +227 -0
  214. metadata +327 -0
@@ -0,0 +1,175 @@
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 Testability Driver.
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
+
21
+ require File.expand_path( File.join( File.dirname( __FILE__ ), 'report' ) )
22
+ #Report module which contains the Cucumber, Test::Unit and RSpec report formatters
23
+ module TDriverReport
24
+ def create_test_unit_formatter()
25
+ eval "
26
+ require 'test/unit'
27
+ require 'test/unit/ui/console/testrunner'
28
+ #class for listening test unit execution process
29
+ class TestUnit < Test::Unit::UI::TestRunnerMediator
30
+ include TDriverReportCreator
31
+ def initialize(suite, report_mgr = nil)
32
+ super(suite)
33
+ @tc_result=nil
34
+ @current_suite_name=suite.name
35
+ @current_test_name=nil
36
+ add_listener(Test::Unit::UI::TestRunnerMediator::STARTED, &method(:started))
37
+ add_listener(Test::Unit::TestCase::STARTED, &method(:test_started))
38
+ add_listener(Test::Unit::TestCase::FINISHED, &method(:test_finished))
39
+ add_listener(Test::Unit::TestResult::FAULT, &method(:fault))
40
+ end
41
+ def get_class_name(full_test_name) #:nodoc:
42
+ begin
43
+ name=full_test_name
44
+ name=name.gsub(/[)]/,'')
45
+ name_arr=name.split('(')
46
+ return [name_arr[1].gsub(/[:]/,'_'),name_arr[0].gsub(/[:]/,'_')]
47
+ rescue
48
+ return ['Ruby test',full_test_name]
49
+ end
50
+ end
51
+ #This method initializes new test run
52
+ #
53
+ # === params
54
+ # === returns
55
+ # === raises
56
+ def started(result)
57
+ start_run()
58
+ add_report_group(@current_suite_name+'|')
59
+ end
60
+ #This method starts a new test case
61
+ #
62
+ # === params
63
+ # === returns
64
+ # === raises
65
+ def test_started(name)
66
+ full_name=get_class_name(name)
67
+ @current_test_name=full_name[1]
68
+ add_report_group(@current_suite_name+':'+full_name[0]+'|')
69
+ start_test_case(@current_test_name)
70
+ add_test_case_group(full_name[0])
71
+ @tc_result='passed'
72
+ end
73
+ #This method records the test case result
74
+ #
75
+ # === params
76
+ # === returns
77
+ # === raises
78
+ def test_finished(name)
79
+ if @tc_result=='passed'
80
+ update_test_case('-')
81
+ end
82
+ end_test_case(@current_test_name,@tc_result)
83
+ end
84
+ #This method records the test case fault result
85
+ #
86
+ # === params
87
+ # === returns
88
+ # === raises
89
+ def fault(fault)
90
+ capture_screen_test_case()
91
+ update_test_case(fault)
92
+ @tc_result='failed'
93
+ end
94
+ end
95
+ "
96
+ end
97
+ end
98
+
99
+ module MattiReport
100
+ def create_test_unit_formatter()
101
+ eval "
102
+ require 'test/unit'
103
+ require 'test/unit/ui/console/testrunner'
104
+ #class for listening test unit execution process
105
+ class TestUnit < Test::Unit::UI::TestRunnerMediator
106
+ include TDriverReportCreator
107
+ def initialize(suite, report_mgr = nil)
108
+ super(suite)
109
+ @tc_result=nil
110
+ @current_suite_name=suite.name
111
+ @current_test_name=nil
112
+ add_listener(Test::Unit::UI::TestRunnerMediator::STARTED, &method(:started))
113
+ add_listener(Test::Unit::TestCase::STARTED, &method(:test_started))
114
+ add_listener(Test::Unit::TestCase::FINISHED, &method(:test_finished))
115
+ add_listener(Test::Unit::TestResult::FAULT, &method(:fault))
116
+ end
117
+ def get_class_name(full_test_name) #:nodoc:
118
+ begin
119
+ name=full_test_name
120
+ name=name.gsub(/[)]/,'')
121
+ name_arr=name.split('(')
122
+ return [name_arr[1].gsub(/[:]/,'_'),name_arr[0].gsub(/[:]/,'_')]
123
+ rescue
124
+ return ['Ruby test',full_test_name]
125
+ end
126
+ end
127
+ #This method initializes new test run
128
+ #
129
+ # === params
130
+ # === returns
131
+ # === raises
132
+ def started(result)
133
+ start_run()
134
+ add_report_group(@current_suite_name+'|')
135
+ end
136
+ #This method starts a new test case
137
+ #
138
+ # === params
139
+ # === returns
140
+ # === raises
141
+ def test_started(name)
142
+ full_name=get_class_name(name)
143
+ @current_test_name=full_name[1]
144
+ add_report_group(@current_suite_name+':'+full_name[0]+'|')
145
+ start_test_case(@current_test_name)
146
+ add_test_case_group(full_name[0])
147
+ @tc_result='passed'
148
+ end
149
+ #This method records the test case result
150
+ #
151
+ # === params
152
+ # === returns
153
+ # === raises
154
+ def test_finished(name)
155
+ if @tc_result=='passed'
156
+ update_test_case('-')
157
+ end
158
+ end_test_case(@current_test_name,@tc_result)
159
+ end
160
+ #This method records the test case fault result
161
+ #
162
+ # === params
163
+ # === returns
164
+ # === raises
165
+ def fault(fault)
166
+ capture_screen_test_case()
167
+ update_test_case(fault)
168
+ @tc_result='failed'
169
+ end
170
+ end
171
+ "
172
+ end
173
+ end
174
+
175
+
@@ -0,0 +1,1405 @@
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
+
21
+ module TDriverReportWriter
22
+ def write_style_sheet(page)
23
+ css='body
24
+ {
25
+ background-color:#74C2E1;
26
+ font-family: sans-serif;
27
+ font-size: small;
28
+ }
29
+ .navigation_section
30
+ {
31
+ background-color:#0191C8;
32
+ width:800px;
33
+ height:40px;
34
+ margin-left : auto;
35
+ margin-right: auto;
36
+ font-family: sans-serif;
37
+ font-size: medium;
38
+ -webkit-box-shadow: 5px 5px 8px #818181;
39
+ -moz-box-shadow: 5px 5px 8px #818181;
40
+ -moz-border-radius: 9px 9px 9px 9px;
41
+ -webkit-border-radius: 9px;
42
+ -webkit-border-top-left-radius: 9px;
43
+ -webkit-border-bottom-right-radius: 9px;
44
+
45
+ }
46
+ .page_navigation_section
47
+ {
48
+ background-color:#0191C8;
49
+ width:800px;
50
+ height:40px;
51
+ margin-left : auto;
52
+ margin-right: auto;
53
+ font-family: sans-serif;
54
+ font-size: medium;
55
+ -webkit-box-shadow: 5px 5px 8px #818181;
56
+ -moz-box-shadow: 5px 5px 8px #818181;
57
+ -moz-border-radius: 9px 9px 9px 9px;
58
+ -webkit-border-radius: 9px;
59
+ -webkit-border-top-left-radius: 9px;
60
+ -webkit-border-bottom-right-radius: 9px;
61
+
62
+ }
63
+
64
+
65
+ .summary
66
+ {
67
+ background-color:White;
68
+ width:800px;
69
+ height:100%;
70
+ margin-left : auto;
71
+ margin-right: auto;
72
+ -webkit-box-shadow: 5px 5px 8px #818181;
73
+ -moz-box-shadow: 5px 5px 8px #818181;
74
+ -moz-border-radius: 9px 9px 9px 9px;
75
+ -webkit-border-radius: 9px;
76
+ -webkit-border-top-left-radius: 9px;
77
+ -webkit-border-bottom-right-radius: 9px;
78
+
79
+ }
80
+ .summary_total_run
81
+ {
82
+ background-color:White;
83
+ width:800px;
84
+ height:100%;
85
+ margin-left : auto;
86
+ margin-right: auto;
87
+ -webkit-box-shadow: 5px 5px 8px #818181;
88
+ -moz-box-shadow: 5px 5px 8px #818181;
89
+ -moz-border-radius: 9px 9px 9px 9px;
90
+ -webkit-border-radius: 9px;
91
+ -webkit-border-top-left-radius: 9px;
92
+ -webkit-border-bottom-right-radius: 9px;
93
+
94
+ }
95
+ .summary_passed
96
+ {
97
+ background-color:White;
98
+ width:800px;
99
+ height:100%;
100
+ margin-left : auto;
101
+ margin-right: auto;
102
+ -webkit-box-shadow: 5px 5px 8px #818181;
103
+ -moz-box-shadow: 5px 5px 8px #818181;
104
+ -moz-border-radius: 9px 9px 9px 9px;
105
+ -webkit-border-radius: 9px;
106
+ -webkit-border-top-left-radius: 9px;
107
+ -webkit-border-bottom-right-radius: 9px;
108
+
109
+ }
110
+ .summary_crash
111
+ {
112
+ background-color:White;
113
+ width:800px;
114
+ height:100%;
115
+ margin-left : auto;
116
+ margin-right: auto;
117
+ -webkit-box-shadow: 5px 5px 8px #818181;
118
+ -moz-box-shadow: 5px 5px 8px #818181;
119
+ -moz-border-radius: 9px 9px 9px 9px;
120
+ -webkit-border-radius: 9px;
121
+ -webkit-border-top-left-radius: 9px;
122
+ -webkit-border-bottom-right-radius: 9px;
123
+
124
+ }
125
+ .summary_reboot
126
+ {
127
+ background-color:White;
128
+ width:800px;
129
+ height:100%;
130
+ margin-left : auto;
131
+ margin-right: auto;
132
+ -webkit-box-shadow: 5px 5px 8px #818181;
133
+ -moz-box-shadow: 5px 5px 8px #818181;
134
+ -moz-border-radius: 9px 9px 9px 9px;
135
+ -webkit-border-radius: 9px;
136
+ -webkit-border-top-left-radius: 9px;
137
+ -webkit-border-bottom-right-radius: 9px;
138
+
139
+ }
140
+ .statistics
141
+ {
142
+ background-color:White;
143
+ width:800px;
144
+ height:100%;
145
+ margin-left : auto;
146
+ margin-right: auto;
147
+ -webkit-box-shadow: 5px 5px 8px #818181;
148
+ -moz-box-shadow: 5px 5px 8px #818181;
149
+ -moz-border-radius: 9px 9px 9px 9px;
150
+ -webkit-border-radius: 9px;
151
+ -webkit-border-top-left-radius: 9px;
152
+ -webkit-border-bottom-right-radius: 9px;
153
+
154
+ }
155
+ .summary_failed
156
+ {
157
+ background-color:White;
158
+ width:800px;
159
+ height:100%;
160
+ margin-left : auto;
161
+ margin-right: auto;
162
+ -webkit-box-shadow: 5px 5px 8px #818181;
163
+ -moz-box-shadow: 5px 5px 8px #818181;
164
+ -moz-border-radius: 9px 9px 9px 9px;
165
+ -webkit-border-radius: 9px;
166
+ -webkit-border-top-left-radius: 9px;
167
+ -webkit-border-bottom-right-radius: 9px;
168
+
169
+ }
170
+ .summary_not_run
171
+ {
172
+ background-color:White;
173
+ width:800px;
174
+ height:100%;
175
+ margin-left : auto;
176
+ margin-right: auto;
177
+ -webkit-box-shadow: 5px 5px 8px #818181;
178
+ -moz-box-shadow: 5px 5px 8px #818181;
179
+ -moz-border-radius: 9px 9px 9px 9px;
180
+ -webkit-border-radius: 9px;
181
+ -webkit-border-top-left-radius: 9px;
182
+ -webkit-border-bottom-right-radius: 9px;
183
+
184
+ }
185
+ .test_passed
186
+ {
187
+ background-color:White;
188
+ width:800px;
189
+ height:100%;
190
+ margin-left : auto;
191
+ margin-right: auto;
192
+ -webkit-box-shadow: 5px 5px 8px #818181;
193
+ -moz-box-shadow: 5px 5px 8px #818181;
194
+ -moz-border-radius: 9px 9px 9px 9px;
195
+ -webkit-border-radius: 9px;
196
+ -webkit-border-top-left-radius: 9px;
197
+ -webkit-border-bottom-right-radius: 9px;
198
+
199
+ }
200
+ .test_failed
201
+ {
202
+ background-color:White;
203
+ width:800px;
204
+ height:100%;
205
+ margin-left : auto;
206
+ margin-right: auto;
207
+ -webkit-box-shadow: 5px 5px 8px #818181;
208
+ -moz-box-shadow: 5px 5px 8px #818181;
209
+ -moz-border-radius: 9px 9px 9px 9px;
210
+ -webkit-border-radius: 9px;
211
+ -webkit-border-top-left-radius: 9px;
212
+ -webkit-border-bottom-right-radius: 9px;
213
+
214
+ }
215
+ .test_not_run
216
+ {
217
+ background-color:White;
218
+ width:800px;
219
+ height:100%;
220
+ margin-left : auto;
221
+ margin-right: auto;
222
+ -webkit-box-shadow: 5px 5px 8px #818181;
223
+ -moz-box-shadow: 5px 5px 8px #818181;
224
+ -moz-border-radius: 9px 9px 9px 9px;
225
+ -webkit-border-radius: 9px;
226
+ -webkit-border-top-left-radius: 9px;
227
+ -webkit-border-bottom-right-radius: 9px;
228
+
229
+ }
230
+ .environment
231
+ {
232
+ background-color:White;
233
+ width:800px;
234
+ height:100%;
235
+ margin-left : auto;
236
+ margin-right: auto;
237
+ -webkit-box-shadow: 5px 5px 8px #818181;
238
+ -moz-box-shadow: 5px 5px 8px #818181;
239
+ -moz-border-radius: 9px 9px 9px 9px;
240
+ -webkit-border-radius: 9px;
241
+ -webkit-border-top-left-radius: 9px;
242
+ -webkit-border-bottom-right-radius: 9px;
243
+
244
+ }
245
+ .page_title
246
+ {
247
+ background-color:#0191C8;
248
+ width:800px;
249
+ min-height:100%;
250
+ margin-left : auto;
251
+ margin-right: auto;
252
+ color : white;
253
+ -webkit-box-shadow: 5px 5px 8px #818181;
254
+ -moz-box-shadow: 5px 5px 8px #818181;
255
+ -moz-border-radius: 9px 9px 9px 9px;
256
+ -webkit-border-radius: 9px;
257
+ -webkit-border-top-left-radius: 9px;
258
+ -webkit-border-bottom-right-radius: 9px;
259
+
260
+ }
261
+ .table
262
+ {
263
+ width: 100%;
264
+ -webkit-box-shadow: 5px 5px 8px #818181;
265
+ -moz-box-shadow: 5px 5px 8px #818181;
266
+ -moz-border-radius: 9px 9px 9px 9px;
267
+ -webkit-border-radius: 9px;
268
+ -webkit-border-top-left-radius: 9px;
269
+ -webkit-border-bottom-right-radius: 9px;
270
+
271
+ }
272
+ a:link { color:Black;}
273
+ a:visited { color:Black;}
274
+ a:hover { color:White; background-color:#005B9A;}
275
+
276
+ #navigation
277
+ {
278
+ list-style-type:none;
279
+ padding:10px 10px 20px 10px;
280
+ width: 47em;
281
+ margin: auto;
282
+ }
283
+
284
+ #navigation li {
285
+ float:left;
286
+ margin:0 2px;
287
+ }
288
+ #navigation li a {
289
+ display:block;
290
+ padding:2px 10px;
291
+ background-color:#E0E0E0;
292
+ color:#2E3C1F;
293
+ text-decoration:none;
294
+ }
295
+ #navigation li a.current {
296
+ background-color:#74C2E1;
297
+ color:#FFFFFF;
298
+ }
299
+ #navigation_tabs_ul li a.current {
300
+ background-color:#74C2E1;
301
+ color:Black;
302
+ }
303
+ #navigation li a:hover {
304
+ background-color:#3C72B0;
305
+ color:#FFFFFF;
306
+ }
307
+ #failed_case
308
+ {
309
+ background-color:Red;
310
+ }
311
+ #passed_case
312
+ {
313
+ background-color:Lime;
314
+ }
315
+ #not_run_case
316
+ {
317
+ background-color:#E0E0E0;
318
+ }
319
+
320
+ #statistics_table
321
+ {
322
+ font-size: 12px;
323
+ text-align: left;
324
+ border-collapse: collapse;
325
+ }
326
+ #statistics_table th
327
+ {
328
+ font-size: 13px;
329
+ font-weight: normal;
330
+ padding: 8px;
331
+ background: #b9c9fe;
332
+ color: #039;
333
+ }
334
+ #statistics_table td
335
+ {
336
+ padding: 8px;
337
+ border-bottom: 1px solid Black;
338
+ color: #669;
339
+ border-top: 1px solid transparent;
340
+ }
341
+
342
+
343
+ .navigation_tabs{
344
+ width: 100%;
345
+ overflow: hidden;
346
+
347
+ }
348
+
349
+ .navigation_tabs ul{
350
+ margin: 0;
351
+ padding: 0;
352
+ padding-left: 100px; /*offset of tabs relative to browser left edge*/
353
+ font: bold 12px sans-serif;
354
+ list-style-type: none;
355
+ }
356
+
357
+ .navigation_tabs li{
358
+ display: inline;
359
+ margin: 0;
360
+ }
361
+
362
+ .navigation_tabs li a{
363
+ float: left;
364
+ display: block;
365
+ text-decoration: none;
366
+ margin: 0;
367
+ padding: 13px 8px; /*padding inside each tab*/
368
+ border-right: 1px solid white; /*right divider between tabs*/
369
+ color: white;
370
+ background: #0191C8; /*background of tabs (default state)*/
371
+ }
372
+
373
+ .navigation_tabs li a:visited{
374
+ color: white;
375
+ }
376
+
377
+ .navigation_tabs li a:hover, .navigation_tabs li.selected a{
378
+ background: black; /*background of tabs for hover state, plus tab with "selected" class assigned to its LI */
379
+ }
380
+
381
+
382
+ img
383
+ {
384
+ width:50%;
385
+ height:50%;
386
+ }
387
+ .togList
388
+ {
389
+
390
+ }
391
+
392
+ .togList dt
393
+ {
394
+
395
+ }
396
+
397
+ .togList dt span
398
+ {
399
+
400
+ }
401
+
402
+ .togList dd
403
+ {
404
+ width: 90%;
405
+ padding-bottom: 15px;
406
+ }
407
+
408
+ FORM { DISPLAY:inline; }
409
+
410
+ html.isJS .togList dd
411
+ {
412
+ display: none;
413
+ }
414
+ input.btn {
415
+ color:#050;
416
+ font: bold 84% \'trebuchet ms\',helvetica,sans-serif;
417
+ border: 1px solid;
418
+ border-color: #696 #363 #363 #696;
419
+ }
420
+ input.btn:hover{
421
+ background-color:#dff4ff;
422
+ border:1px solid #c2e1ef;
423
+ color:#336699;
424
+ }
425
+
426
+ .behaviour_table_title
427
+ {
428
+ background-color:#CCCCCC;
429
+ }
430
+ .user_data_table_title
431
+ {
432
+ background-color:#CCCCCC;
433
+ }
434
+
435
+ '
436
+ File.open(page, 'w') {|f| f.write(css) }
437
+ css=nil
438
+ end
439
+ def format_duration(seconds)
440
+ m, s = seconds.divmod(60)
441
+ "#{m}m#{'%.3f' % s}s"
442
+ end
443
+ def behaviour_log_summary(log,log_format='string')
444
+ begin
445
+ log_table = Array.new
446
+ pass=0
447
+ fail=0
448
+ #behaviour=0
449
+ warning=0
450
+ debug=0
451
+ info=0
452
+ error=0
453
+ fatal=0
454
+ log_table << '<table width=60% border="1">'
455
+ log_table << '<tr class="behaviour_table_title"><td><b>BEHAVIOUR</b></td><td><b>Total</b></td></tr>'
456
+ log.each do |log_row|
457
+ if log_row[0].include? 'PASS'
458
+ pass+=1
459
+ end
460
+ if log_row[0].include? 'FAIL'
461
+ fail+=1
462
+ end
463
+ #if log_row.include? 'BEHAVIOUR'
464
+ # behaviour+=1
465
+ #end
466
+ if log_row[0].include? 'WARNING'
467
+ warning+=1
468
+ end
469
+ if log_row[0].include? 'DEBUG'
470
+ debug+=1
471
+ end
472
+ if log_row[0].include? 'INFO'
473
+ info+=1
474
+ end
475
+ if log_row[0].include? 'ERROR'
476
+ error+=1
477
+ end
478
+ if log_row[0].include? 'FATAL'
479
+ fatal+=1
480
+ end
481
+ end
482
+ log_table << '<tr><td>PASS:</td><td>'+pass.to_s+'</td></tr>'
483
+ log_table << '<tr><td>FAIL:</td><td>'+fail.to_s+'</td></tr>'
484
+ #log_table << '<tr><td>BEHAVIOUR:</td><td>'+behaviour.to_s+'</td></tr>'
485
+ log_table << '<tr><td>WARNING:</td><td>'+warning.to_s+'</td></tr>'
486
+ log_table << '<tr><td>DEBUG:</td><td>'+debug.to_s+'</td></tr>'
487
+ log_table << '<tr><td>INFO:</td><td>'+info.to_s+'</td></tr>'
488
+ log_table << '<tr><td>ERROR:</td><td>'+error.to_s+'</td></tr>'
489
+ log_table << '<tr><td>FATAL:</td><td>'+fatal.to_s+'</td></tr>'
490
+ log_table << '</table>'
491
+ if log_format=='string'
492
+ log_table.join
493
+ else
494
+ log_table
495
+ end
496
+ rescue
497
+ '-'
498
+ end
499
+ end
500
+ def format_behaviour_log(log,log_format='string')
501
+ begin
502
+ log_table = Array.new
503
+ log_table << '<table border="1">'
504
+ log_table << '<tr class="behaviour_table_title"><td><b>TDriver</b></td><td><b>Log</b></td><td><b>Status</b></td></tr>'
505
+ log.each do |log_row|
506
+ status='-'
507
+ type='-'
508
+ log_entry='-'
509
+ if log_row[0].include? 'PASS'
510
+ status='<b style="color: #00FF00">PASS</b>'
511
+ end
512
+ if log_row[0].include? 'FAIL'
513
+ status='<b style="color: #FF0000">FAIL</b>'
514
+ end
515
+ if log_row[0].include? 'BEHAVIOUR'
516
+ type='<b>BEHAVIOUR</b>'
517
+ end
518
+ if log_row[0].include? 'WARNING'
519
+ type='<b style="color: #FF00FF">WARNING<b>'
520
+ end
521
+ if log_row[0].include? 'DEBUG'
522
+ type='DEBUG'
523
+ end
524
+ if log_row[0].include? 'INFO'
525
+ type='<b style="color: #00FF00">INFO</b>'
526
+ end
527
+ if log_row[0].include? 'ERROR'
528
+ type='<b style="color: #FF0000">ERROR</b>'
529
+ end
530
+ if log_row[0].include? 'FATAL'
531
+ type='<b style="color: #FF0000">FATAL</b>'
532
+ end
533
+
534
+ formatted_log=log_row[0].gsub('PASS;','')
535
+ formatted_log=formatted_log.gsub('FAIL;','')
536
+ formatted_log=formatted_log.gsub('BEHAVIOUR TDriver:','')
537
+ formatted_log=formatted_log.gsub('WARNING;','')
538
+ formatted_log=formatted_log.gsub('DEBUG TDriver:','')
539
+ formatted_log=formatted_log.gsub('INFO TDriver:','')
540
+ formatted_log=formatted_log.gsub('ERROR TDriver:','')
541
+ formatted_log=formatted_log.gsub('FATAL TDriver:','')
542
+ log_entry=formatted_log
543
+ formatted_log=nil
544
+ if log_row[1] != nil
545
+ log_table << '<tr><td>'+type+'</td><td><a href="'+log_row[1].to_s+'/index.html">'+log_entry+'</a></td><td>'+status+'</td></tr>'
546
+ else
547
+ log_table << '<tr><td>'+type+'</td><td>'+log_entry+'</td><td>'+status+'</td></tr>'
548
+ end
549
+
550
+ end
551
+ log_table << '</table>'
552
+ if log_format=='string'
553
+ log_table.join
554
+ else
555
+ log_table
556
+ end
557
+ rescue
558
+ '-'
559
+ end
560
+ end
561
+ def format_execution_log(log)
562
+ begin
563
+ formatted_log=Array.new
564
+ log.each do |line|
565
+ if line.include?('test_unit.rb')
566
+ formatted_log << line.gsub('PASSED','<b style="color: #00FF00">PASSED</b>').gsub('FAILED','<b style="color: #FF0000">FAILED</b>').gsub('SKIPPED','<b>SKIPPED</b>')
567
+ else
568
+ formatted_log << "<b style=\"color: #2554C7\">#{line}</b>".gsub('PASSED','<b style="color: #00FF00">PASSED</b>').gsub('FAILED','<b style="color: #FF0000">FAILED</b>').gsub('SKIPPED','<b>SKIPPED</b>')
569
+ end
570
+ end
571
+ formatted_log.to_s
572
+ rescue
573
+ '-'
574
+ end
575
+ end
576
+ def write_page_start(page, title,report_page=nil,report_pages=nil)
577
+ case title
578
+ when "TDriver test results"
579
+ stylesheet='<link rel="stylesheet" title="TDriverReportStyle" href="tdriver_report_style.css"/>'
580
+ when "TDriver test environment","Total run","Statistics","Passed","Failed","Not run","Crash","Reboot","TDriver log"
581
+ stylesheet='<link rel="stylesheet" title="TDriverReportStyle" href="../tdriver_report_style.css"/>'
582
+ else
583
+ stylesheet='<link rel="stylesheet" title="TDriverReportStyle" href="../../tdriver_report_style.css"/>'
584
+ end
585
+ html_start='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' <<
586
+ '<html xmlns="http://www.w3.org/1999/xhtml">'<<
587
+ '<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"><META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">'<<
588
+ stylesheet<<
589
+ get_java_script()<<
590
+ '<title>'+title+'</title>'<<
591
+ '</head><body>'
592
+ File.open(page, 'w') do |f2|
593
+ f2.puts html_start
594
+ end
595
+ html_start=nil
596
+ stylesheet=nil
597
+ write_navigation_menu(page,title,report_page,report_pages)
598
+ page=nil
599
+ title=nil
600
+ end
601
+ def write_test_case_body(page,test_case_name,start_time,end_time,run_time,status,index,folder,capture_screen_error,failed_dump_error,reboots=0,total_dump_count=nil,total_data_sent=nil,total_data_received=nil)
602
+ status_style='test_passed' if status=='passed' || @pass_statuses.include?(status)
603
+ status_style='test_failed' if status=='failed' || @fail_statuses.include?(status)
604
+ status_style='test_not_run' if status=='not run' || @not_run_statuses.include?(status)
605
+ begin
606
+ used_memory_difference=@tc_memory_amount_start.to_i-@tc_memory_amount_end.to_i
607
+ rescue
608
+ used_memory_difference='-'
609
+ end
610
+ formatted_test_case_name=test_case_name.gsub('_',' ')
611
+ if formatted_test_case_name==nil
612
+ formatted_test_case_name=test_case_name
613
+ end
614
+ html_body='<div class="page_title"><center><h1>',formatted_test_case_name,'</h1></center></div>'<<
615
+ '<div class="'<<
616
+ status_style<<
617
+ '"><table align="center" style="width:100%;">'<<
618
+ '<tr>'<<
619
+ '<td style="font-weight: 700">'<<
620
+ 'Case</td>'<<
621
+ '<td>'<<
622
+ index.to_s,'</td>'<<
623
+ '</tr>'<<
624
+ '<tr>'<<
625
+ '<td style="font-weight: 700">'<<
626
+ 'Status</td>'<<
627
+ '<td>'<<
628
+ status,'</td>'<<
629
+ '</tr>'<<
630
+ '<tr>'<<
631
+ '<td style="font-weight: 700">'<<
632
+ 'Started</td>'<<
633
+ '<td>'<<
634
+ start_time.strftime("%d.%m.%Y %H:%M:%S"),'</td>'<<
635
+ '</tr>'<<
636
+ '<tr>'<<
637
+ '<td style="font-weight: 700">'<<
638
+ 'Ended</td>'<<
639
+ '<td>'<<
640
+ end_time.strftime("%d.%m.%Y %H:%M:%S"),'</td>'<<
641
+ '</tr>'<<
642
+ '<tr>'<<
643
+ '<td style="font-weight: 700">'<<
644
+ 'Runtime</td>'<<
645
+ '<td>'<<
646
+ format_duration(run_time)+'</td>'<<
647
+ '</tr>'
648
+
649
+ total_dump_count.each do |item|
650
+ html_body << '<tr>'<<
651
+ '<td style="font-weight: 700">'<<
652
+ "Dump count from sut #{item[0]}</td>"<<
653
+ '<td>'<<
654
+ item[1].to_s+'</td>'<<
655
+ '</tr>'
656
+ end
657
+
658
+ total_data_sent.each do |item|
659
+ html_body << '<tr>' <<
660
+ '<td style="font-weight: 700">'<<
661
+ "Sent bytes from sut #{item[0]}</td>"<<
662
+ '<td>'<<
663
+ item[1].to_s+'</td>'<<
664
+ '</tr>'
665
+ end
666
+
667
+ total_data_received.each do |item|
668
+ html_body << '<tr>' <<
669
+ '<td style="font-weight: 700">'<<
670
+ "Received bytes from sut #{item[0]}</td>"<<
671
+ '<td>'<<
672
+ item[1].to_s+'</td>'<<
673
+ '</tr>'
674
+ end
675
+
676
+ html_body << '<tr><td><b>Total memory</b></td><td>'<<
677
+ @tc_memory_amount_total.to_s<<
678
+ '</td></tr>'<<
679
+ '<tr><td><b>Used memory at beginning</b></td><td>'<<
680
+ @tc_memory_amount_start.to_s<<
681
+ '</td></tr>'<<
682
+ '<tr><td><b>Used memory at end</b></td><td>'<<
683
+ @tc_memory_amount_end.to_s<<
684
+ '</td></tr>'<<
685
+ '<tr><td><b>Used memory difference</b></td><td>'<<
686
+ used_memory_difference.to_s<<
687
+ '</td></tr>' <<
688
+ '<tr><td><b>Device reboots</b></td><td>'<<
689
+ reboots.to_s<<
690
+ '</td></tr>' <<
691
+ '<tr>' <<
692
+ '<td style="font-weight: 700">'<<
693
+ 'Details</td>'<<
694
+ '<td style="font-size: small; font-weight: bold">'<<
695
+ format_execution_log(@test_case_execution_log)<<
696
+ '</td></tr>'
697
+
698
+ if File::directory?(folder.to_s+'/crash_files')==true
699
+ d=Dir.entries(folder.to_s+'/crash_files')
700
+ d.each do |x|
701
+ if (x !='.' && x != '..')
702
+ html_body=html_body<<
703
+ '<tr>'<<
704
+ '<td style="font-weight: 700">'<<
705
+ '&nbsp;</td>'<<
706
+ '<td>'<<
707
+ '<a href="crash_files/'<<
708
+ x<<
709
+ '">'+x+'</a></td>'<<
710
+ '</tr>'
711
+ end
712
+ end
713
+ end
714
+ if File::directory?(folder.to_s+'/trace_files')==true
715
+ d=Dir.entries(folder.to_s+'/trace_files')
716
+ d.each do |x|
717
+ if (x !='.' && x != '..')
718
+ html_body=html_body<<
719
+ '<tr>'<<
720
+ '<td style="font-weight: 700">'<<
721
+ 'Trace files</td>'<<
722
+ '<td>'<<
723
+ '<a href="trace_files/'<<
724
+ x<<
725
+ '">Captured trace files</a></td>'<<
726
+ '</tr>'
727
+ end
728
+ end
729
+ end
730
+ if File::directory?(folder.to_s+'/video')==true
731
+ d=Dir.entries(folder.to_s+'/video')
732
+ html_body=html_body<<
733
+ '<tr>'<<
734
+ '<td style="font-weight: 700">'<<
735
+ 'Video files</td>'<<
736
+ '</tr>'
737
+ d.each do |x|
738
+ if (x !='.' && x != '..')
739
+ html_body=html_body<<
740
+ '<tr>'<<
741
+ '<td style="font-weight: 700">'<<
742
+ '&nbsp;</td>'<<
743
+ '<td>'<<
744
+ '<a href="video/'<<
745
+ x<<
746
+ '">'+x+'</a></td>'<<
747
+ '</tr>'
748
+ end
749
+ end
750
+ end
751
+ if File::directory?(folder.to_s+'/files')==true
752
+ d=Dir.entries(folder.to_s+'/files')
753
+ html_body=html_body<<
754
+ '<tr>'<<
755
+ '<td style="font-weight: 700">'<<
756
+ 'Monitored files</td>'<<
757
+ '</tr>'
758
+ d.each do |x|
759
+ if (x !='.' && x != '..')
760
+ html_body=html_body<<
761
+ '<tr>'<<
762
+ '<td style="font-weight: 700">'<<
763
+ '&nbsp;</td>'<<
764
+ '<td>'<<
765
+ '<a href="files/'<<
766
+ x<<
767
+ '">'+x+'</a></td>'<<
768
+ '</tr>'
769
+ end
770
+ end
771
+ end
772
+ html_body=html_body<<
773
+ '<tr><td style="font-weight: 700">'<<
774
+ '&nbsp;</td>'
775
+ html_body=html_body<<
776
+ '</tr>'<<
777
+ '</table>'
778
+ if @test_case_behaviour_log.length > 0
779
+ html_body=html_body<<
780
+ '<dl class="togList">'<<
781
+ '<dt onclick="tog(this)" style="background-color: #CCCCCC;"><b style="font-size: large"><span><input id="Button1" type="button" value="Open" class="btn" /></span> Behaviours</b></dt>'<<
782
+ '<dd style="font-size: small">'<<
783
+ format_behaviour_log(@test_case_behaviour_log)<<
784
+ '</dd>'<<
785
+ '</dl>'
786
+ end
787
+ if @test_case_user_data!=nil && !@test_case_user_data.empty?
788
+ html_body=html_body<<
789
+ '<dl class="togList">'<<
790
+ '<dt onclick="tog(this)" style="background-color: #CCCCCC;"><b style="font-size: large"><span><input id="Button1" type="button" value="Open" class="btn" /></span> User Data</b></dt>'<<
791
+ '<dd style="font-size: small">'<<
792
+ format_user_log_table( @test_case_user_data,@test_case_user_data_columns)<<
793
+ '</dd>'<<
794
+ '</dl>'
795
+ end
796
+ html_body=html_body<<
797
+ '</div>'
798
+ File.open(page, 'a') do |f2|
799
+ f2.puts html_body
800
+ end
801
+ html_body=nil
802
+ @test_case_execution_log=nil
803
+ @test_case_behaviour_log=nil
804
+ @test_case_user_data=nil
805
+ @test_case_user_data_columns=nil
806
+ end
807
+ def tog_list_begin(name)
808
+ html_body='<dl class="togList">'<<
809
+ '<dt onclick="tog(this)"><b><span>+</span>'<<
810
+ name<<
811
+ '</b></dt>'<<
812
+ '<dd>'
813
+ html_body
814
+ end
815
+ def tog_list_end()
816
+ html_body='</dd>'<<
817
+ '</dl>'
818
+ html_body
819
+ end
820
+ def write_duration_graph(page, folder, graph_file_name, tc_arr)
821
+
822
+ tdriver_group=ReportingStatistics.new(tc_arr)
823
+ tdriver_group.generate_duration_graph(folder + '/cases/' + graph_file_name)
824
+
825
+ html_body=Array.new
826
+ html_body << '<div>'
827
+ html_body << '<H1 ALIGN=center><img border="0" src="./'+graph_file_name+'"/></H1>'
828
+ html_body << '</div>'
829
+ File.open(page, 'a') do |f2|
830
+ f2.puts html_body
831
+ end
832
+ tdriver_group = nil
833
+ html_body=nil
834
+ GC.start
835
+ end
836
+ def write_test_case_summary_body(page,status,tc_arr,chronological_page=nil,report_page=nil)
837
+ html_body=Array.new
838
+ case status
839
+ when 'passed'
840
+ title='<div class="page_title"><center><h1>Passed</h1></center></div>'<<
841
+ '<div class="summary_passed">' <<
842
+ '<form action="save_total_run_results" >'
843
+ tdriver_group=ReportingGroups.new(@reporting_groups,tc_arr)
844
+ tdriver_group.parse_groups()
845
+ html_result=tdriver_group.generate_report(@pass_statuses.first)
846
+ html_body << title
847
+ html_body << html_result
848
+ html_body << "<input type=\"submit\" name=\"save_changes\" value=\"Save changes\" />" if @report_editable=='true'
849
+ html_body << "</form>"
850
+ html_body << '<form action="save_results_to" ><input type="submit" name="save_results_to" value="Download report" /></form>' if @report_editable=='true'
851
+ tdriver_group=nil
852
+ html_result=nil
853
+ when 'failed'
854
+ title='<div class="page_title"><center><h1>Failed</h1></center></div>'<<
855
+ '<div class="summary_failed">' <<
856
+ '<form action="save_total_run_results" >'
857
+ tdriver_group=ReportingGroups.new(@reporting_groups,tc_arr)
858
+ tdriver_group.parse_groups()
859
+ html_result=tdriver_group.generate_report(@fail_statuses.first)
860
+ html_body << title
861
+ html_body << html_result
862
+ html_body << "<input type=\"submit\" name=\"save_changes\" value=\"Save changes\" />" if @report_editable=='true'
863
+ html_body << "</form>"
864
+ html_body << '<form action="save_results_to" ><input type="submit" name="save_results_to" value="Download report" /></form>' if @report_editable=='true'
865
+ tdriver_group=nil
866
+ html_result=nil
867
+ when 'not_run'
868
+ title='<div class="page_title"><center><h1>Not run</h1></center></div>'<<
869
+ '<div class="summary_not_run">' <<
870
+ '<form action="save_total_run_results" >'
871
+ tdriver_group=ReportingGroups.new(@reporting_groups,tc_arr)
872
+ tdriver_group.parse_groups()
873
+ html_result=tdriver_group.generate_report(@not_run_statuses.first)
874
+ html_body << title
875
+ html_body << html_result
876
+ html_body << "<input type=\"submit\" name=\"save_changes\" value=\"Save changes\" />" if @report_editable=='true'
877
+ html_body << "</form>"
878
+ html_body << '<form action="save_results_to" ><input type="submit" name="save_results_to" value="Download report" /></form>' if @report_editable=='true'
879
+ tdriver_group=nil
880
+ html_result=nil
881
+ when 'crash'
882
+ title='<div class="page_title"><center><h1>Crash</h1></center></div>'<<
883
+ '<div class="summary_crash">' <<
884
+ '<form action="save_total_run_results" >'
885
+ tdriver_group=ReportingGroups.new(@reporting_groups,tc_arr,false)
886
+ tdriver_group.parse_groups()
887
+ html_result=tdriver_group.generate_report('all')
888
+ html_body << title
889
+ html_body << html_result
890
+ html_body << "<input type=\"submit\" name=\"save_changes\" value=\"Save changes\" />" if @report_editable=='true'
891
+ html_body << "</form>"
892
+ html_body << '<form action="save_results_to" ><input type="submit" name="save_results_to" value="Download report" /></form>' if @report_editable=='true'
893
+ tdriver_group=nil
894
+ html_result=nil
895
+ when 'reboot'
896
+ title='<div class="page_title"><center><h1>Reboot</h1></center></div>'<<
897
+ '<div class="summary_reboot">' <<
898
+ '<form action="save_total_run_results" >'
899
+ tdriver_group=ReportingGroups.new(@reporting_groups,tc_arr,false)
900
+ tdriver_group.parse_groups()
901
+ html_result=tdriver_group.generate_report('all')
902
+ html_body << title
903
+ html_body << html_result
904
+ html_body << "<input type=\"submit\" name=\"save_changes\" value=\"Save changes\" />" if @report_editable=='true'
905
+ html_body << "</form>"
906
+ html_body << '<form action="save_results_to" ><input type="submit" name="save_results_to" value="Download report" /></form>' if @report_editable=='true'
907
+ tdriver_group=nil
908
+ html_result=nil
909
+ when 'statistics'
910
+ title='<div class="page_title"><center><h1>Statistics</h1></center></div>'<<
911
+ '<div class="statistics">'
912
+ tdriver_group=ReportingStatistics.new(tc_arr)
913
+ html_result=tdriver_group.generate_statistics_table()
914
+ html_body << title
915
+ html_body << html_result
916
+ tdriver_group=nil
917
+ html_result=nil
918
+ else
919
+ chronological_html_body=Array.new
920
+ title='<div class="page_title"><center><h1>Total run</h1></center></div>'
921
+ view_selection='<div class="summary_view_select"><center><input type="button" value="Grouped view" ONCLICK="location.assign(\''+report_page.to_s+'_total_run_index.html\');"/>'<<
922
+ '<input type="button" value="Chronological view" ONCLICK="location.assign(\''+report_page.to_s+'_chronological_total_run_index.html\');"/></center></div>'<<
923
+ '<div class="summary_total_run">' <<
924
+ '<form action="save_total_run_results" >'
925
+ title << view_selection
926
+ tdriver_group=ReportingGroups.new(@reporting_groups,tc_arr)
927
+ tdriver_group.parse_groups()
928
+ html_result=tdriver_group.generate_report('all')
929
+ html_body << title
930
+ html_body << html_result
931
+ html_body << "<input type=\"submit\" name=\"save_changes\" value=\"Save changes\" />" if @report_editable=='true'
932
+ html_body << "</form>"
933
+ html_body << '<form action="save_results_to" ><input type="submit" name="save_results_to" value="Download report" /></form>' if @report_editable=='true'
934
+ html_body << '<form action="export_results_to_excel" ><input type="submit" name="export_results_to_excel" value="Export to Excel" /></form>' if @report_editable=='true'
935
+
936
+ tdriver_group=nil
937
+ html_result=nil
938
+ tdriver_group=ReportingGroups.new(@reporting_groups,tc_arr,false)
939
+ tdriver_group.parse_groups()
940
+ chronological_html_result=tdriver_group.generate_report('all')
941
+ chronological_html_body << title
942
+ chronological_html_body << chronological_html_result
943
+ chronological_html_body << "<input type=\"submit\" name=\"save_changes\" value=\"Save changes\" />" if @report_editable=='true'
944
+ chronological_html_body << "</form>"
945
+ chronological_html_body << '<form action="save_results_to" ><input type="submit" name="save_results_to" value="Download report" /></form>' if @report_editable=='true'
946
+ chronological_html_body << '<form action="export_results_to_excel" ><input type="submit" name="export_results_to_excel" value="Export to Excel" /></form>' if @report_editable=='true'
947
+ chronological_html_body << "</div>"
948
+
949
+ File.open(chronological_page, 'a') do |f2|
950
+ f2.puts chronological_html_body
951
+ end
952
+ tdriver_group=nil
953
+ chronological_html_result=nil
954
+ chronological_html_body=nil
955
+ end
956
+ html_body << '</div>'
957
+ File.open(page, 'a') do |f2|
958
+ f2.puts html_body
959
+ end
960
+ html_body=nil
961
+ GC.start
962
+ end
963
+
964
+ def write_summary_body(page,start_time,end_time,run_time,total_run,total_passed,total_failed,total_not_run,total_crash_files,total_device_resets,summary_arr=nil)
965
+ fail_rate=0
966
+ pass_rate=0
967
+ if total_run.to_i > 0
968
+ fail_rate=(total_failed.to_f/total_run.to_f)*100
969
+ pass_rate=(total_passed.to_f/total_run.to_f)*100
970
+ end
971
+
972
+ html_body='<div class="page_title"><center><h1>TDriver test results</h1></center></div>'<<
973
+ '<div class="summary"><table align="center" style="width:80%;" border="0">'<<
974
+ '<tr>'<<
975
+ '<td><b>Started</b></td>'<<
976
+ '<td>'+start_time.strftime("%d.%m.%Y %H:%M:%S")+'</td>'<<
977
+ '</tr>'<<
978
+ '<tr>'<<
979
+ '<td><b>Ended</b></td>'
980
+ begin
981
+ html_body+='<td>'+end_time.strftime("%d.%m.%Y %H:%M:%S")+'</td>'
982
+ rescue
983
+ html_body+='<td>'+end_time.to_s+'</td>'
984
+ end
985
+ html_body+='</tr>'<<
986
+ '<tr>'<<
987
+ '<td><b>Runtime</b></td>'<<
988
+ '<td>'+format_duration(run_time)+'</td>'<<
989
+ '</tr>'<<
990
+ '<tr>'<<
991
+ '<td><a href="cases/1_total_run_index.html"><b>Total run</b></a></td>'<<
992
+ '<td>'+total_run.to_s+'</td>'<<
993
+ '</tr>'<<
994
+ '<tr>'<<
995
+ '<td><a href="cases/1_passed_index.html"><b>Passed</b></a></td>'<<
996
+ '<td>'+total_passed.to_s+'</td>'<<
997
+ '</tr>'<<
998
+ '<tr>'<<
999
+ '<td><a href="cases/1_failed_index.html"><b>Failed</b></a></td>'<<
1000
+ '<td>'+total_failed.to_s+'</td>'<<
1001
+ '</tr>'<<
1002
+ '<tr>'<<
1003
+ '<td><a href="cases/1_not_run_index.html"><b>Not run</b></a></td>'<<
1004
+ '<td>'+total_not_run.to_s+'</td>'<<
1005
+ '</tr>'<<
1006
+ '<tr>'<<
1007
+ '<td><b>Total crash files captured</b></td>'<<
1008
+ '<td>'+total_crash_files.to_s+'</td>'<<
1009
+ '</tr>'<<
1010
+ '<tr>'<<
1011
+ '<td><b>Total device resets</b></td>'<<
1012
+ '<td>'+total_device_resets.to_s+'</td>'<<
1013
+ '</tr>'
1014
+ $tdriver_reporter.total_dump_count.each do |item|
1015
+ html_body << '<tr>'<<
1016
+ "<td><b>Total dump count from sut #{item[0].to_s}</b></td>"<<
1017
+ '<td>'+item[1].to_s+'</td>'<<
1018
+ '</tr>'
1019
+ end
1020
+ $tdriver_reporter.total_sent_data.each do |item|
1021
+ html_body << '<tr>'<<
1022
+ "<td><b>Total bytes sent from sut #{item[0].to_s}</b></td>"<<
1023
+ '<td>'+item[1].to_s+'</td>'<<
1024
+ '</tr>'
1025
+ end
1026
+ $tdriver_reporter.total_received_data.each do |item|
1027
+ html_body << '<tr>'<<
1028
+ "<td><b>Total bytes received from sut #{item[0].to_s}</b></td>"<<
1029
+ '<td>'+item[1].to_s+'</td>'<<
1030
+ '</tr>'
1031
+ end
1032
+ html_body << '<tr>'<<
1033
+ '<td><b>Pass %</b></td>'<<
1034
+ '<td>'+pass_rate.to_f.to_s+'%</td>'<<
1035
+ '</tr>'<<
1036
+ '<tr>'<<
1037
+ '<td><b>Fail %</b></td>'<<
1038
+ '<td>'+fail_rate.to_f.to_s+'%</td>'<<
1039
+ '</tr>'<<
1040
+ '</table></div><p />'
1041
+ if summary_arr
1042
+ html_body << '<div class="statistics">'
1043
+ tdriver_group=ReportingStatistics.new(summary_arr,true)
1044
+ html_result=tdriver_group.generate_statistics_table()
1045
+ html_body << html_result << '</div>'
1046
+ end
1047
+
1048
+ File.open(page, 'a') do |f2|
1049
+ f2.puts html_body
1050
+ end
1051
+ html_body=nil
1052
+ end
1053
+ def create_behaviour_links()
1054
+ folder=@report_folder+'/environment/behaviours'
1055
+ links=' '
1056
+ if File::directory?(folder.to_s)==true
1057
+ d=Dir.entries(folder.to_s)
1058
+ d.each do |x|
1059
+ if (x !='.' && x != '..')
1060
+ if x.include? '.xml'
1061
+ links << '<a href="behaviours/'+x+'">'+x+'</a> <br />'
1062
+ end
1063
+ end
1064
+ end
1065
+ end
1066
+ links
1067
+ end
1068
+
1069
+ def create_templates_links()
1070
+ folder=@report_folder+'/environment/templates'
1071
+ links=' '
1072
+ if File::directory?(folder.to_s)==true
1073
+ d=Dir.entries(folder.to_s)
1074
+ d.each do |x|
1075
+ if (x !='.' && x != '..')
1076
+ if x.include? '.xml'
1077
+ links << '<a href="templates/'+x+'">'+x+'</a> <br />'
1078
+ end
1079
+ end
1080
+ end
1081
+ end
1082
+ links
1083
+ end
1084
+
1085
+ def write_environment_body(page,os,sw,variant,product,language,loc)
1086
+ begin
1087
+ used_memory_difference=@memory_amount_start.to_i-@memory_amount_end.to_i
1088
+ rescue
1089
+ used_memory_difference='-'
1090
+ end
1091
+
1092
+ tdriver_version=ENV['TDRIVER_VERSION']
1093
+ tdriver_version='TDRIVER_VERSION environment variable not found' if tdriver_version==nil
1094
+ html_body='<div class="page_title"><center><h1>TDriver test environment</h1></center></div>'<<
1095
+ '<div class="environment"><table align="center" style="width:80%;" border="0">'<<
1096
+ '<tr><td><b>OS</b></td><td>'<<
1097
+ os<<
1098
+ '</td></tr>'<<
1099
+ '<tr><td><b>TDriver version</b></td><td>'<<
1100
+ tdriver_version<<
1101
+ '</td></tr>'<<
1102
+ '<tr><td><b>SW Version</b></td><td>'<<
1103
+ sw<<
1104
+ '</td></tr>'<<
1105
+ '<tr><td><b>Variant</b></td><td>'<<
1106
+ variant<<
1107
+ '</td></tr>'<<
1108
+ '<tr><td><b>Product</b></td><td>'<<
1109
+ product<<
1110
+ '</td></tr>'<<
1111
+ '<tr><td><b>Language</b></td><td>'<<
1112
+ language<<
1113
+ '</td></tr>'<<
1114
+ '<tr><td><b>Localization</b></td><td>'<<
1115
+ loc<<
1116
+ '</td></tr>'<<
1117
+ '<tr><td><b>Total memory</b></td><td>'<<
1118
+ @memory_amount_total.to_s<<
1119
+ '</td></tr>'<<
1120
+ '<tr><td><b>Used memory at beginning</b></td><td>'<<
1121
+ @memory_amount_start.to_s<<
1122
+ '</td></tr>'<<
1123
+ '<tr><td><b>Used memory at end</b></td><td>'<<
1124
+ @memory_amount_end.to_s<<
1125
+ '</td></tr>'<<
1126
+ '<tr><td><b>Used memory difference</b></td><td>'<<
1127
+ used_memory_difference.to_s<<
1128
+ '</td></tr>'<<
1129
+ "<tr><td><b>Behaviours</b></td><td>#{create_behaviour_links()}</td></tr>"<<
1130
+ '<tr><td><b>Parameters</b></td><td><a href="tdriver_parameters.xml">tdriver_parameters.xml</a></td></tr>'<<
1131
+ "<tr><td><b>Templates</b></td><td>#{create_templates_links()}</td></tr>"<<
1132
+ '</table></div>'
1133
+ create_behaviour_links()
1134
+ File.open(page, 'a') do |f2|
1135
+ f2.puts html_body
1136
+ end
1137
+ html_body=nil
1138
+ end
1139
+ def write_tdriver_log_body(page,log)
1140
+ if log.length > 0
1141
+ log_summary=behaviour_log_summary(log,'array')
1142
+ formatted_log=format_behaviour_log(log,'array')
1143
+ File.open(page, 'a') do |f|
1144
+ f.write('<div class="page_title"><center><h1>TDriver Log</h1></center></div>')
1145
+ f.write('<div class="environment">')
1146
+ f.write('<center><H2>Summary</H2>')
1147
+ log_summary.each do |entry|
1148
+ f.write(entry)
1149
+ end
1150
+ f.write('</center><br /><br /></div><br />')
1151
+ f.write('<div class="environment">')
1152
+ formatted_log.each do |entry|
1153
+ f.write(entry)
1154
+ end
1155
+ f.write('</div>')
1156
+ end
1157
+ else
1158
+ File.open(page, 'a') do |f|
1159
+ f.write('<div class="page_title"><center><h1>TDriver Log</h1></center></div>')
1160
+ f.write('<div class="environment">')
1161
+ f.write('<center><H2>Log is empty</H2>')
1162
+ f.write('</center><br /><br /></div><br />')
1163
+ end
1164
+ end
1165
+ end
1166
+ def write_navigation_menu(page,title,report_page=nil,report_pages=nil)
1167
+ case title
1168
+ when "TDriver test results"
1169
+ tdriver_test_results_link='index.html" class="current"'
1170
+ tdriver_test_environment_link='environment/index.html"'
1171
+ tdriver_log_link='cases/tdriver_log_index.html"'
1172
+ total_run_link="cases/1_total_run_index.html\""
1173
+ statistics_link="cases/statistics_index.html\""
1174
+ passed_link="cases/1_passed_index.html\""
1175
+ failed_link="cases/1_failed_index.html\""
1176
+ not_run_link="cases/1_not_run_index.html\""
1177
+ when "TDriver test environment"
1178
+ tdriver_test_results_link='../index.html"'
1179
+ tdriver_test_environment_link='index.html" class="current"'
1180
+ tdriver_log_link='../cases/tdriver_log_index.html"'
1181
+ total_run_link="../cases/1_total_run_index.html\""
1182
+ statistics_link='../cases/statistics_index.html"'
1183
+ passed_link="../cases/1_passed_index.html\""
1184
+ failed_link="../cases/1_failed_index.html\""
1185
+ not_run_link="../cases/1_not_run_index.html\""
1186
+ when "Total run"
1187
+ tdriver_test_results_link='../index.html"'
1188
+ tdriver_test_environment_link='../environment/index.html"'
1189
+ tdriver_log_link='tdriver_log_index.html"'
1190
+ total_run_link="#{report_page}_total_run_index.html\" class=\"current\""
1191
+ statistics_link="statistics_index.html\""
1192
+ passed_link="1_passed_index.html\""
1193
+ failed_link="1_failed_index.html\""
1194
+ not_run_link="1_not_run_index.html\""
1195
+ when "Statistics"
1196
+ tdriver_test_results_link='../index.html"'
1197
+ tdriver_test_environment_link='../environment/index.html"'
1198
+ tdriver_log_link='tdriver_log_index.html"'
1199
+ total_run_link="1_total_run_index.html\""
1200
+ statistics_link='statistics_index.html" class="current"'
1201
+ passed_link="1_passed_index.html\""
1202
+ failed_link="1_failed_index.html\""
1203
+ not_run_link="1_not_run_index.html\""
1204
+ when "Passed"
1205
+ tdriver_test_results_link='../index.html"'
1206
+ tdriver_test_environment_link='../environment/index.html"'
1207
+ tdriver_log_link='tdriver_log_index.html"'
1208
+ total_run_link="1_total_run_index.html\""
1209
+ statistics_link='statistics_index.html"'
1210
+ passed_link="#{report_page}_passed_index.html\" class=\"current\""
1211
+ failed_link="1_failed_index.html\""
1212
+ not_run_link="1_not_run_index.html\""
1213
+ when "Failed","Crash","Reboot"
1214
+ tdriver_test_results_link='../index.html"'
1215
+ tdriver_test_environment_link='../environment/index.html"'
1216
+ tdriver_log_link='tdriver_log_index.html"'
1217
+ total_run_link="1_total_run_index.html\""
1218
+ statistics_link='statistics_index.html"'
1219
+ passed_link="1_passed_index.html\""
1220
+ failed_link="#{report_page}_failed_index.html\" class=\"current\""
1221
+ not_run_link="1_not_run_index.html\""
1222
+ when "Not run"
1223
+ tdriver_test_results_link='../index.html"'
1224
+ tdriver_test_environment_link='../environment/index.html"'
1225
+ tdriver_log_link='tdriver_log_index.html"'
1226
+ total_run_link="1_total_run_index.html\""
1227
+ statistics_link='statistics_index.html"'
1228
+ passed_link="1_passed_index.html\""
1229
+ failed_link="1_failed_index.html\""
1230
+ not_run_link="#{report_page}_not_run_index.html\" class=\"current\""
1231
+ when "TDriver log"
1232
+ tdriver_test_results_link='../index.html"'
1233
+ tdriver_test_environment_link='../environment/index.html"'
1234
+ tdriver_log_link='tdriver_log_index.html" class="current"'
1235
+ total_run_link="#{report_page}_total_run_index.html\""
1236
+ statistics_link='statistics_index.html"'
1237
+ passed_link="#{report_page}_passed_index.html\""
1238
+ failed_link="#{report_page}_failed_index.html\""
1239
+ not_run_link="#{report_page}_not_run_index.html\""
1240
+ else
1241
+ tdriver_test_results_link='../../index.html"'
1242
+ tdriver_test_environment_link='../../environment/index.html"'
1243
+ tdriver_log_link='../tdriver_log_index.html"'
1244
+ total_run_link="../1_total_run_index.html\""
1245
+ statistics_link='../statistics_index.html"'
1246
+ passed_link="../1_passed_index.html\""
1247
+ failed_link="../1_failed_index.html\""
1248
+ not_run_link="../1_not_run_index.html\""
1249
+ end
1250
+ html_body='<div class="navigation_section"><div class="navigation_tabs">'<<
1251
+ '<ul id="navigation_tabs_ul">'<<
1252
+ '<li><a href="'<<
1253
+ tdriver_test_results_link<<
1254
+ '>TDriver test results</a></li>'<<
1255
+ '<li><a href="'<<
1256
+ tdriver_test_environment_link<<
1257
+ '>TDriver test environment</a></li>'<<
1258
+ '<li><a href="'<<
1259
+ statistics_link<<
1260
+ '>Statistics</a></li>'<<
1261
+ '<li><a href="'<<
1262
+ total_run_link<<
1263
+ '>Total run</a></li>'<<
1264
+ '<li><a href="'<<
1265
+ passed_link<<
1266
+ '>Passed</a></li>'<<
1267
+ '<li><a href="'<<
1268
+ failed_link<<
1269
+ '>Failed</a></li>'<<
1270
+ '<li><a href="'<<
1271
+ not_run_link<<
1272
+ '>Not run</a></li>'<<
1273
+ '</ul>'<<
1274
+ '</div></div>'
1275
+ File.open(page, 'a') do |f2|
1276
+ f2.puts html_body
1277
+ end
1278
+ html_body=nil
1279
+ end
1280
+
1281
+ def write_page_navigation_div(page,report_page,report_pages)
1282
+ page_with_no_number=page.gsub("#{report_page}_","")
1283
+ page_base_name=File.basename(page_with_no_number)
1284
+ div_body=Array.new
1285
+ div_body<<"<div class=\"page_navigation_section\"><center>"<<
1286
+ "<ul id=\"navigation\">"
1287
+ max=10
1288
+ start_page=report_page/max
1289
+ if start_page==0
1290
+ start_page=1
1291
+ else
1292
+ if (report_page%max)!=0
1293
+ start_page=(start_page*max)+1
1294
+ else
1295
+ start_page=(start_page*max)+1-max
1296
+ end
1297
+ end
1298
+ if (start_page+max)<report_pages
1299
+ end_page=(start_page+max)-1
1300
+ else
1301
+ end_page=report_pages
1302
+ end
1303
+
1304
+ div_body<<"<li><a href=\"#{start_page-max}_#{page_base_name}\">Previous</a></li>" if start_page!=1
1305
+
1306
+ for i in (start_page..end_page)
1307
+ div_body<<"<li><a href=\""
1308
+ if i==report_page
1309
+ div_body<<"#{i}_#{page_base_name}\" class=\"current\""
1310
+ else
1311
+ div_body<<"#{i}_#{page_base_name}\""
1312
+ end
1313
+ div_body<<">#{i}</a></li>"
1314
+ end
1315
+ div_body<<"<li><a href=\"#{end_page+1}_#{page_base_name}\">Next</a></li>" if end_page < report_pages
1316
+ div_body<<"</ul></center></div>"
1317
+ div_body
1318
+ end
1319
+
1320
+ def write_page_end(page,report_page=nil,report_pages=nil)
1321
+ page_ready=nil
1322
+ if report_page!=nil
1323
+ navigation_div="#{write_page_navigation_div(page,report_page,report_pages)}"
1324
+ html_end="#{navigation_div}</body></html>"
1325
+ doc = Nokogiri::HTML(open(page))
1326
+ b_div_found=false
1327
+ doc.xpath('//div[@class="page_navigation_section"]').each do |div|
1328
+ if div.text.include?('Next')
1329
+ page_ready=report_page
1330
+ end
1331
+ b_div_found=true
1332
+ div.replace(Nokogiri.make(navigation_div))
1333
+ end
1334
+ if b_div_found==false
1335
+ File.open(page, 'a') do |f|
1336
+ f.puts html_end
1337
+ end
1338
+ else
1339
+ File.open(page, 'w') do |f|
1340
+ f.puts doc
1341
+ end
1342
+ end
1343
+ else
1344
+ html_end="</body></html>"
1345
+ File.open(page, 'a') do |f|
1346
+ f.puts html_end
1347
+ end
1348
+ end
1349
+ html_end=nil
1350
+ page_ready
1351
+ end
1352
+ def get_java_script()
1353
+ java_script='<script type="text/javascript">'<<
1354
+ '/* Only set closed if JS-enabled */'<<
1355
+ "document.getElementsByTagName('html')[0].className = 'isJS';"<<
1356
+ 'function tog(dt)'<<
1357
+ '{'<<
1358
+ 'var display, dd=dt;'<<
1359
+ '/* get dd */'<<
1360
+ "do{ dd = dd.nextSibling } while(dd.tagName!='DD');"<<
1361
+ 'toOpen =!dd.style.display;'<<
1362
+ "dd.style.display = toOpen? 'block':'';"<<
1363
+ "dt.getElementsByTagName('span')[0].innerHTML"<<
1364
+ "= toOpen? '<input id=\"Button1\" type=\"button\" value=\"Close\" class=\"btn\" style=\"background-color: #FFFFFF\" />':'<input id=\"Button1\" type=\"button\" value=\"Open\" class=\"btn\" />' ;"<<
1365
+ '}'<<
1366
+ '</script>'
1367
+ java_script
1368
+ end
1369
+ def format_user_log_table(user_data_rows,user_data_columns)
1370
+ begin
1371
+ formatted_user_data=Array.new
1372
+ formatted_user_data << '<div><table align="center" style="width:100%;" border="1">'
1373
+ header='<tr class="user_data_table_title">'
1374
+ user_data_columns.sort.each do |column|
1375
+ header=header+'<td><b>'+column.to_s+'</b></td>'
1376
+ end
1377
+ formatted_user_data << header +'</tr>'
1378
+
1379
+ #first need to add empty values for those columns that donot exist
1380
+
1381
+ user_data_rows.each do |row_hash|
1382
+ keys_need_adding = user_data_columns - row_hash.keys
1383
+ keys_need_adding.each do |new_key|
1384
+ row_hash[new_key] = " - "
1385
+ end
1386
+ end
1387
+
1388
+ #create the table rows
1389
+ user_data_rows.each do |row_hash|
1390
+ row = '<tr>'
1391
+ row_hash.sort{|a,b| a[0]<=>b[0]}.each do |value|
1392
+ row=row+'<td>'+value[1].to_s+'</td>'
1393
+ end
1394
+ formatted_user_data << row+'</tr>'
1395
+ end
1396
+ formatted_user_data << '</table></div>'
1397
+ formatted_user_data.to_s
1398
+ rescue Exception => e
1399
+ '-'
1400
+ end
1401
+ end
1402
+
1403
+ end #end TDriverReportWriter
1404
+
1405
+