testability-driver 0.9.2

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 (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
+