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,60 @@
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
+ module MobyUtil
21
+
22
+ # TDriver plugin abstraction class
23
+ class Plugin
24
+
25
+ ## plugin configuration, constructor and deconstructor methods
26
+ def self.plugin_name
27
+
28
+ Kernel::raise PluginError.new( "Plugin name not defined in implementation (%s)" % [ self.name ] )
29
+ end
30
+
31
+ def self.plugin_type
32
+
33
+ Kernel::raise PluginError.new( "Plugin type not defined in implementation (%s)" % [ self.name ] )
34
+
35
+ end
36
+
37
+ def self.plugin_required_tdriver_version
38
+
39
+ Kernel::raise PluginError.new( "Required TDriver version not defined in plugin implementation (%s)" % [ self.name ] )
40
+
41
+ end
42
+
43
+ def self.register_plugin
44
+
45
+ # this method will be called when plugin is registered
46
+
47
+ end
48
+
49
+ def self.unregister_plugin
50
+
51
+ # this method will be called when plugin is unregistered
52
+
53
+ end
54
+
55
+ # enable hooking for performance measurement & debug logging
56
+ MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
57
+
58
+ end # Plugin
59
+
60
+ end # MobyUtil
@@ -0,0 +1,25 @@
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
+ module MobyUtil
21
+
22
+ # plugin service related errors
23
+ class PluginError < MobyUtil::CustomError; end;
24
+
25
+ end # MobyUtil
@@ -0,0 +1,28 @@
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
+ # plugin service related errors
21
+ require File.expand_path( File.join( File.dirname( __FILE__ ), 'error.rb' ) )
22
+
23
+ # abstraction class for plugins
24
+ require File.expand_path( File.join( File.dirname( __FILE__ ), 'abstract.rb' ) )
25
+
26
+ # plugin service module
27
+ require File.expand_path( File.join( File.dirname( __FILE__ ), 'service.rb' ) )
28
+
@@ -0,0 +1,200 @@
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
+ module MobyUtil
21
+
22
+ # Plugin service implementation
23
+ class PluginService
24
+
25
+ include Singleton
26
+
27
+ # intialize plugin service
28
+ def initialize
29
+
30
+ @@registered_plugins = {}
31
+
32
+ end
33
+
34
+ # return all or plugins of given type
35
+ def registered_plugins( type = nil )
36
+
37
+ # return all or plugins of given type
38
+ Hash[ @@registered_plugins.select{ | key, value | type.nil? || value[ :type ] == type } ]
39
+
40
+ end
41
+
42
+ # returns true if plugin is registered, plugin type can be given as optional parameter
43
+ def plugin_registered?( plugin_name, type = nil )
44
+
45
+ # check if given plugin is registered
46
+ if @@registered_plugins.has_key?( plugin_name )
47
+
48
+ unless type.nil?
49
+
50
+ # plugin registered, compare that given plugin type matches
51
+ @@registered_plugins[ plugin_name ][ :type ] == type
52
+
53
+ else
54
+
55
+ # plugin registered, no specific plugin type given
56
+ true
57
+
58
+ end
59
+
60
+ else
61
+
62
+ # plugin not registered, not found from @@registered_plugins hash
63
+ false
64
+
65
+ end
66
+
67
+ end
68
+
69
+ def enable_plugin( plugin_name )
70
+
71
+ ( @@registered_plugins[ plugin_name ][ :enabled ] = true ) rescue Kernel::raise( ArgumentError.new( "No such plugin registered %s" % [ plugin_name ] ) )
72
+
73
+ end
74
+
75
+ def disable_plugin( plugin_name )
76
+
77
+ ( @@registered_plugins[ plugin_name ][ :enabled ] = false ) rescue Kernel::raise( ArgumentError.new( "No such plugin registered %s" % [ plugin_name ] ) )
78
+
79
+ end
80
+
81
+ def plugin_enabled?( plugin_name )
82
+
83
+ ( @@registered_plugins[ plugin_name ][ :enabled ] ) rescue false
84
+
85
+ end
86
+
87
+ def register_plugin( plugin_module )
88
+
89
+ # retrieve plugin name
90
+ plugin_name = plugin_data_value( plugin_module, :plugin_name )
91
+
92
+ # throw exception if plugin is already registered
93
+ Kernel::raise ArgumentError.new( "Plugin %s is already registered" % [ plugin_name ] ) if @@registered_plugins.has_key?( plugin_name )
94
+
95
+ # plugin configuration
96
+ @@registered_plugins[ plugin_name ] = {
97
+ :type => plugin_data_value( plugin_module, :plugin_type ),
98
+ :plugin_module => plugin_module,
99
+ :enabled => true
100
+ }
101
+
102
+ # register plugin
103
+ plugin_module.register_plugin
104
+
105
+ end
106
+
107
+ def unregister_plugin( plugin_name )
108
+
109
+ # unregister plugin, raise exception if plugin is not registered
110
+ ( @@registered_plugins[ plugin_name ][ :plugin_module ].unregister_plugin ) rescue Kernel::raise( ArgumentError.new( "Unregister failed due to plugin %s is not registered" % [ plugin_name ] ) )
111
+
112
+ # remove from the plugins hash
113
+ @@registered_plugins.delete( plugin_name )
114
+
115
+ end
116
+
117
+ def load_plugin( plugin_name )
118
+
119
+ begin
120
+
121
+ # load plugin implementation
122
+ require plugin_name
123
+
124
+ rescue LoadError => exception
125
+
126
+ Kernel::raise RuntimeError.new(
127
+
128
+ "Error while loading plugin %s. Please verify that the plugin is installed properly (%s: %s)" % [ plugin_name, exception.class, exception.message ]
129
+
130
+ )
131
+
132
+ end
133
+
134
+ end
135
+
136
+ def call_plugin_method( plugin_name, method_name, *args )
137
+
138
+ begin
139
+
140
+ plugin_module = @@registered_plugins[ plugin_name ][ :plugin_module ]
141
+
142
+ rescue
143
+
144
+ Kernel::raise( ArgumentError.new( "No such plugin registered %s" % [ plugin_name ] ) )
145
+
146
+ end
147
+
148
+ begin
149
+
150
+ plugin_module.send( method_name.to_sym, *args )
151
+
152
+ rescue Exception => exception
153
+
154
+ raise PluginError.new( "Error occured during calling %s method for %s (%s: %s)" % [ method_name, plugin_name, exception.class, exception.message ] )
155
+
156
+ end
157
+
158
+ end
159
+
160
+ private
161
+
162
+ def reset_plugins_list
163
+
164
+ @@registered_plugins = {}
165
+
166
+ end
167
+
168
+ def delete_plugin( plugin_name )
169
+
170
+ # remove from the plugins hash
171
+ @@registered_plugins.delete( plugin_name )
172
+
173
+ end
174
+
175
+ def plugin_data_value( plugin_module, value_name, optional = false )
176
+
177
+ begin
178
+
179
+ result = plugin_module.send( value_name.to_sym )
180
+
181
+ rescue NoMethodError
182
+
183
+ Kernel::raise RuntimeError.new( "Plugin must have %s value defined" % [ value_name.to_s ] ) if !optional
184
+
185
+ rescue => exception
186
+
187
+ Kernel::raise exception
188
+
189
+ end
190
+
191
+ result
192
+
193
+ end
194
+
195
+ # enable hooking for performance measurement & debug logging
196
+ MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
197
+
198
+ end # PluginService
199
+
200
+ end # MobyUtil
@@ -0,0 +1,292 @@
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
+
22
+ # Class for recording scripts from qt applications.
23
+ # Complete test script recording not supported.
24
+ # Application must be running when recording is started and
25
+ # must not be closed as a during the recording.
26
+
27
+ module MobyUtil
28
+
29
+ class Recorder
30
+
31
+ #TODO detect app start for later versions...
32
+ def self.start_rec(app)
33
+
34
+ Kernel::raise ArgumentError.new("Application must be defined.") unless app
35
+ app.start_recording
36
+
37
+ end
38
+
39
+ # Prints the recorded events as an tdriver script fragment.
40
+ def self.print_script(sut, app, object_identificators = ['text','icontext','label'])
41
+
42
+ Kernel::raise ArgumentError.new("Sut must be defined.") unless sut
43
+ Kernel::raise ArgumentError.new("Application must be defined.") unless app
44
+ Kernel::raise ArgumentError.new("Object identificators must be set, use defaults if not sure what the use.") unless object_identificators
45
+
46
+ xml_source = app.print_recordings
47
+ app.stop_recording
48
+ xml_as_object = MobyBase::StateObject.new( xml_source )
49
+ scripter = Scripter.new(sut.id, object_identificators)
50
+
51
+ scripter.write_fragment(xml_as_object, app.name)
52
+
53
+ end
54
+
55
+
56
+ end # Recorder
57
+
58
+ class Scripter
59
+
60
+ def initialize(sut_id, object_identificators)
61
+
62
+ @_object_identificators = object_identificators
63
+
64
+ @_tap_max_time = Parameter[sut_id][:record_tap_time_treshold].to_i
65
+ @_tap_min_distance = Parameter[sut_id][:record_move_treshold].to_i
66
+
67
+ end
68
+
69
+ def write_fragment(xml_as_object, app_name)
70
+
71
+ script = "# Insert the script fragment below into your test \n"
72
+ script << "# Add verification points if needed. \n \n"
73
+ script << "# For testing the script! Do not include in your own test scripts. \n"
74
+ script << "@app = sut.application(:name =>'" << app_name << "') \n"
75
+ script << "# To test the script make sure the application is in the same state as it was when recording was started. \n\n"
76
+ script << "#################################### \n"
77
+ script << "# Begin recorded script \n"
78
+ script << "#################################### \n \n"
79
+
80
+ event_list = xml_as_object.events
81
+ event_count = event_list.attribute('eventCount').to_i
82
+
83
+ mouse_down = false
84
+ points = Array.new
85
+ active_target = nil
86
+ scripting = false;
87
+ mouse_status = 0
88
+ previous_time = nil
89
+ event = nil
90
+
91
+ for i in 0...event_count
92
+
93
+ event = event_list.event(:id => i.to_s)
94
+ type = event.name
95
+
96
+ previous_time = event.attribute('timeStamp').to_i unless previous_time
97
+
98
+ if type == 'MouseButtonPress'
99
+ active_target = get_target_details(event.child(:id => i.to_s))
100
+ scripting = true
101
+ mouse_status = 1
102
+ end
103
+
104
+ duration = get_duration(previous_time, event.attribute('timeStamp').to_i)
105
+
106
+ point = {'x' => event.attribute('windowX'), 'y' => event.attribute('windowY'), 'interval' => duration}
107
+ points.push(point) if scripting
108
+
109
+ previous_time = event.attribute('timeStamp').to_i
110
+
111
+ if type == 'MouseButtonRelease' and scripting
112
+
113
+ #mouse status based on the previous (if target changed no press)
114
+ mouse_status = 3 if mouse_status == 1
115
+ mouse_status = 2 if mouse_status == 0
116
+ script << generate_command(active_target, points, mouse_status) << "\n"
117
+ points.clear
118
+ active_target = nil
119
+ scripting = false
120
+
121
+ end
122
+ end
123
+
124
+ if scripting and event
125
+
126
+ script << generate_command(active_target, points, mouse_status) << "\n"
127
+
128
+ end
129
+
130
+ script << "\n"
131
+ script << "#################################### \n"
132
+ script << "# End recorded script \n"
133
+ script << "#################################### \n"
134
+ script
135
+
136
+ end
137
+
138
+ private
139
+
140
+ def add_command( mouse_status, active_target, points, duration )
141
+
142
+ fragment << fragment
143
+
144
+ end
145
+
146
+ def get_target_details(test_object)
147
+
148
+ target = test_object.type
149
+ params = Array.new
150
+
151
+ params.push(":name=>'#{ test_object.name }'")
152
+
153
+ if test_object.name.empty?
154
+
155
+ params.clear
156
+
157
+ @_object_identificators.each do |attribute|
158
+
159
+ begin
160
+
161
+ value = test_object.attribute(attribute)
162
+ params.push(":#{ attribute } => '#{ value }'") unless value == ""
163
+
164
+ rescue MobyBase::AttributeNotFoundError
165
+
166
+ end
167
+
168
+ end
169
+
170
+ end
171
+
172
+ if params.size > 0
173
+
174
+ target << "( "
175
+
176
+ until params.size == 0
177
+
178
+ target << params.pop
179
+ target << ", " if params.size > 0
180
+
181
+ end
182
+
183
+ target << " )"
184
+
185
+ end
186
+
187
+ target
188
+ end
189
+
190
+ # mouse_status:
191
+ # 0 = no press or release
192
+ # 1 = press, no release
193
+ # 2 = release, no press
194
+ # 3 = press and release
195
+ def generate_command(target_details, points, mouse_status)
196
+
197
+ command = "@app."
198
+
199
+ if valid_gesture?(points)
200
+
201
+ command << target_details << ".gesture_points(\n\t[\n"
202
+ duration = 0
203
+
204
+ for i in 0...points.size
205
+
206
+ value = points[ i ]
207
+ command << "\t\t{'x' => " << value[ "x" ].to_s << ", 'y' => " << value[ "y" ].to_s << ", 'interval' => " << value[ "interval" ].to_s << " }"
208
+ command << ", \n" unless i == points.size - 1
209
+ duration = duration + value[ 'interval' ]
210
+
211
+ end
212
+
213
+ command << "\n\t], \n\t" << duration.to_s << ", \n\t"
214
+
215
+ case mouse_status
216
+ when 0
217
+ command << "{ :press => false, :release => false }"
218
+ when 1
219
+ command << "{ :press => true, :release => false }"
220
+ when 2
221
+ command << "{ :press => false, :release => true }"
222
+ when 3
223
+ command << "{ :press => true, :release => true }"
224
+ end
225
+
226
+ command << "\n)"
227
+
228
+ command
229
+
230
+ elsif mouse_status > 0
231
+
232
+ duration = 0
233
+
234
+ points.each{|value| duration = duration + value['interval']}
235
+
236
+ if mouse_status == 1
237
+
238
+ command << target_details << ".tap_down"
239
+
240
+ elsif duration < @_tap_max_time
241
+
242
+ command << target_details << ".tap"
243
+
244
+ else
245
+
246
+ command << target_details << ".long_tap( " << duration.to_s << " )"
247
+
248
+ end
249
+
250
+ end
251
+ end
252
+
253
+ def valid_gesture?(points)
254
+
255
+ return false if points.size < 2
256
+
257
+ min_x = -1
258
+ max_x = -1
259
+ min_y = -1
260
+ max_y = -1
261
+
262
+ for i in 0...points.size
263
+
264
+ value = points[i]
265
+
266
+ x = value['x'].to_i
267
+ y = value['y'].to_i
268
+
269
+ min_x = x if x < min_x or min_x == -1
270
+ max_x = x if x > max_x or max_x == -1
271
+ min_y = y if y < min_y or min_y == -1
272
+ max_y = y if y > max_y or max_y == -1
273
+
274
+ end
275
+
276
+ return false if (max_x - min_x).abs < @_tap_min_distance and (max_y - min_y).abs < @_tap_min_distance
277
+
278
+ true
279
+ end
280
+
281
+
282
+ def get_duration(start_time, end_time)
283
+ duration_millis = end_time - start_time
284
+ #we want this in second
285
+ duration_millis = duration_millis.to_f
286
+ duration_secs = duration_millis / 1000
287
+ duration_secs
288
+ end
289
+
290
+ end # Scripter
291
+
292
+ end