cutedriver-driver 2.0.0.20210120164037

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +16 -0
  3. data/bin/start_app_perf +200 -0
  4. data/bin/tdriver-devtools +3 -0
  5. data/config/sut_parameters.rb +52 -0
  6. data/config/sut_setup.rb +32 -0
  7. data/config/sut_teardown.rb +32 -0
  8. data/config/tdriver_custom_error_recovery.rb +83 -0
  9. data/ext/extconf.rb +70 -0
  10. data/ext/native_extensions.c +315 -0
  11. data/lib/matti.rb +25 -0
  12. data/lib/tdriver-devtools/behaviour/old/xml/example/flick-example.rb +120 -0
  13. data/lib/tdriver-devtools/behaviour/old/xml/example/impl.rb_invalid +194 -0
  14. data/lib/tdriver-devtools/behaviour/old/xml/generate_behaviour_xml.rb +95 -0
  15. data/lib/tdriver-devtools/behaviour/old/xml/lib/tdriver_generator.rb +722 -0
  16. data/lib/tdriver-devtools/behaviour/old/xml/qdoc_generator.rb +321 -0
  17. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.method.template +43 -0
  18. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.module.template +54 -0
  19. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.argument.template +7 -0
  20. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.argument_type.template +7 -0
  21. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.exception.template +5 -0
  22. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.howto.line.template +2 -0
  23. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.howto.template +5 -0
  24. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.method.template +23 -0
  25. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.template +14 -0
  26. data/lib/tdriver-devtools/behaviour/old/xml/update +3 -0
  27. data/lib/tdriver-devtools/behaviour/xml/generate.rb +88 -0
  28. data/lib/tdriver-devtools/behaviour/xml/rdoc_behaviour_xml_generator.rb +1945 -0
  29. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument.default.template +1 -0
  30. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument.template +3 -0
  31. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument_type.template +4 -0
  32. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.exception.template +4 -0
  33. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.arguments.template +4 -0
  34. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.deprecated.template +3 -0
  35. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.exceptions.template +3 -0
  36. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.info.template +1 -0
  37. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.returns.template +3 -0
  38. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.tables.template +3 -0
  39. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.template +12 -0
  40. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.returns.template +5 -0
  41. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.item.template +1 -0
  42. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.row.template +2 -0
  43. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.template +8 -0
  44. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.template +14 -0
  45. data/lib/tdriver-devtools/doc/behaviour_xml/QtExampleGestureBehaviour.xml +138 -0
  46. data/lib/tdriver-devtools/doc/behaviour_xml/created.rid +1 -0
  47. data/lib/tdriver-devtools/doc/behaviour_xml/tdriver.hash +1 -0
  48. data/lib/tdriver-devtools/doc/feature_xml/qt_widget_hold.feature.xml +9 -0
  49. data/lib/tdriver-devtools/doc/feature_xml/qt_widget_tap.feature.xml +9 -0
  50. data/lib/tdriver-devtools/doc/generate.rb +917 -0
  51. data/lib/tdriver-devtools/doc/update +1 -0
  52. data/lib/tdriver-devtools/doc/xslt/html.rb +7 -0
  53. data/lib/tdriver-devtools/doc/xslt/template.xsl +2170 -0
  54. data/lib/tdriver-devtools/doc/xslt/update +3 -0
  55. data/lib/tdriver-devtools/plugin/placeholder.txt +1 -0
  56. data/lib/tdriver-devtools/tdriver-devtools.rb +404 -0
  57. data/lib/tdriver-devtools/tests/feature_tests/example/behaviour_example.rb +100 -0
  58. data/lib/tdriver-devtools/tests/feature_tests/generate.rb +82 -0
  59. data/lib/tdriver-devtools/tests/feature_tests/lib/custom_rdoc_generator.rb +468 -0
  60. data/lib/tdriver-devtools/tests/feature_tests/templates/feature_attribute.template +5 -0
  61. data/lib/tdriver-devtools/tests/feature_tests/templates/feature_method.template +5 -0
  62. data/lib/tdriver-devtools/tests/feature_tests/templates/scenario_attribute.template +5 -0
  63. data/lib/tdriver-devtools/tests/feature_tests/templates/scenario_method.template +5 -0
  64. data/lib/tdriver-devtools/tests/feature_tests/update +3 -0
  65. data/lib/tdriver.rb +23 -0
  66. data/lib/tdriver/base/behaviour/abstract.rb +29 -0
  67. data/lib/tdriver/base/behaviour/behaviours/object_abstract.rb +107 -0
  68. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_composition.rb +99 -0
  69. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_description.rb +278 -0
  70. data/lib/tdriver/base/behaviour/behaviours/object_composition.rb +119 -0
  71. data/lib/tdriver/base/behaviour/factory.rb +495 -0
  72. data/lib/tdriver/base/behaviour/loader.rb +46 -0
  73. data/lib/tdriver/base/command_data/command_data.rb +51 -0
  74. data/lib/tdriver/base/command_data/loader.rb +29 -0
  75. data/lib/tdriver/base/controller/abstraction.rb +56 -0
  76. data/lib/tdriver/base/controller/loader.rb +21 -0
  77. data/lib/tdriver/base/errors.rb +134 -0
  78. data/lib/tdriver/base/loader.rb +47 -0
  79. data/lib/tdriver/base/state_object.rb +373 -0
  80. data/lib/tdriver/base/sut/adapter.rb +54 -0
  81. data/lib/tdriver/base/sut/controller.rb +151 -0
  82. data/lib/tdriver/base/sut/factory.rb +339 -0
  83. data/lib/tdriver/base/sut/generic/behaviours/agent.rb +77 -0
  84. data/lib/tdriver/base/sut/generic/behaviours/application.rb +427 -0
  85. data/lib/tdriver/base/sut/generic/behaviours/controller.rb +67 -0
  86. data/lib/tdriver/base/sut/generic/behaviours/find.rb +107 -0
  87. data/lib/tdriver/base/sut/generic/behaviours/flash_behaviour.rb +337 -0
  88. data/lib/tdriver/base/sut/generic/behaviours/sut.rb +1888 -0
  89. data/lib/tdriver/base/sut/generic/behaviours/switchbox_behaviour.rb +210 -0
  90. data/lib/tdriver/base/sut/generic/behaviours/verification.rb +222 -0
  91. data/lib/tdriver/base/sut/generic/commands/agent.rb +43 -0
  92. data/lib/tdriver/base/sut/generic/commands/application.rb +274 -0
  93. data/lib/tdriver/base/sut/generic/commands/fixture.rb +47 -0
  94. data/lib/tdriver/base/sut/generic/commands/key_sequence.rb +94 -0
  95. data/lib/tdriver/base/sut/generic/commands/screen_capture.rb +64 -0
  96. data/lib/tdriver/base/sut/generic/plugin.rb +97 -0
  97. data/lib/tdriver/base/sut/loader.rb +35 -0
  98. data/lib/tdriver/base/sut/sut.rb +98 -0
  99. data/lib/tdriver/base/test_object/abstract.rb +208 -0
  100. data/lib/tdriver/base/test_object/adapter.rb +740 -0
  101. data/lib/tdriver/base/test_object/behaviours/syncronization.rb +144 -0
  102. data/lib/tdriver/base/test_object/behaviours/test_object.rb +1047 -0
  103. data/lib/tdriver/base/test_object/cache.rb +134 -0
  104. data/lib/tdriver/base/test_object/factory.rb +684 -0
  105. data/lib/tdriver/base/test_object/loader.rb +51 -0
  106. data/lib/tdriver/base/test_object/verification.rb +178 -0
  107. data/lib/tdriver/base/test_object/xml/abstraction.rb +63 -0
  108. data/lib/tdriver/base/test_object/xml/adapter.rb +773 -0
  109. data/lib/tdriver/env.rb +21 -0
  110. data/lib/tdriver/loader.rb +57 -0
  111. data/lib/tdriver/matti.rb +35 -0
  112. data/lib/tdriver/report/error_recovery/tdriver_custom_error_recovery.rb +83 -0
  113. data/lib/tdriver/report/error_recovery/tdriver_error_recovery.rb +168 -0
  114. data/lib/tdriver/report/error_recovery/tdriver_error_recovery_settings.rb +106 -0
  115. data/lib/tdriver/report/report.rb +61 -0
  116. data/lib/tdriver/report/report_api.rb +348 -0
  117. data/lib/tdriver/report/report_combine.rb +86 -0
  118. data/lib/tdriver/report/report_crash_file_capture.rb +178 -0
  119. data/lib/tdriver/report/report_creator.rb +665 -0
  120. data/lib/tdriver/report/report_cucumber.rb +158 -0
  121. data/lib/tdriver/report/report_cucumber_listener.rb +184 -0
  122. data/lib/tdriver/report/report_cucumber_reporter.rb +181 -0
  123. data/lib/tdriver/report/report_data_presentation.rb +156 -0
  124. data/lib/tdriver/report/report_data_table.rb +64 -0
  125. data/lib/tdriver/report/report_execution_statistics.rb +400 -0
  126. data/lib/tdriver/report/report_file_capture.rb +159 -0
  127. data/lib/tdriver/report/report_graph_generator.rb +59 -0
  128. data/lib/tdriver/report/report_grouping.rb +541 -0
  129. data/lib/tdriver/report/report_javascript.rb +199 -0
  130. data/lib/tdriver/report/report_junit_xml.rb +147 -0
  131. data/lib/tdriver/report/report_rspec.rb +108 -0
  132. data/lib/tdriver/report/report_test_case_run.rb +725 -0
  133. data/lib/tdriver/report/report_test_run.rb +1476 -0
  134. data/lib/tdriver/report/report_test_unit.rb +223 -0
  135. data/lib/tdriver/report/report_writer.rb +1621 -0
  136. data/lib/tdriver/tdriver.rb +209 -0
  137. data/lib/tdriver/util/agent/loader.rb +22 -0
  138. data/lib/tdriver/util/agent/service.rb +107 -0
  139. data/lib/tdriver/util/common/array.rb +39 -0
  140. data/lib/tdriver/util/common/boolean.rb +48 -0
  141. data/lib/tdriver/util/common/crc16.rb +149 -0
  142. data/lib/tdriver/util/common/environment.rb +154 -0
  143. data/lib/tdriver/util/common/error.rb +40 -0
  144. data/lib/tdriver/util/common/exception.rb +53 -0
  145. data/lib/tdriver/util/common/exceptions.rb +12 -0
  146. data/lib/tdriver/util/common/file.rb +328 -0
  147. data/lib/tdriver/util/common/gem.rb +109 -0
  148. data/lib/tdriver/util/common/hash.rb +288 -0
  149. data/lib/tdriver/util/common/kernel.rb +253 -0
  150. data/lib/tdriver/util/common/loader.rb +47 -0
  151. data/lib/tdriver/util/common/numeric.rb +159 -0
  152. data/lib/tdriver/util/common/object.rb +159 -0
  153. data/lib/tdriver/util/common/retryable.rb +179 -0
  154. data/lib/tdriver/util/common/stackable.rb +185 -0
  155. data/lib/tdriver/util/common/string.rb +174 -0
  156. data/lib/tdriver/util/database/access.rb +240 -0
  157. data/lib/tdriver/util/database/connection.rb +44 -0
  158. data/lib/tdriver/util/database/error.rb +34 -0
  159. data/lib/tdriver/util/database/loader.rb +28 -0
  160. data/lib/tdriver/util/filters/attribute_filter.rb +121 -0
  161. data/lib/tdriver/util/filters/loader.rb +29 -0
  162. data/lib/tdriver/util/fixture/loader.rb +22 -0
  163. data/lib/tdriver/util/fixture/service.rb +211 -0
  164. data/lib/tdriver/util/hooking/hooking.rb +477 -0
  165. data/lib/tdriver/util/keymap/keymap.rb +81 -0
  166. data/lib/tdriver/util/loader.rb +80 -0
  167. data/lib/tdriver/util/localisation/error.rb +31 -0
  168. data/lib/tdriver/util/localisation/loader.rb +25 -0
  169. data/lib/tdriver/util/localisation/localisation.rb +762 -0
  170. data/lib/tdriver/util/logger/loader.rb +22 -0
  171. data/lib/tdriver/util/logger/logger.rb +591 -0
  172. data/lib/tdriver/util/operator_data/error.rb +29 -0
  173. data/lib/tdriver/util/operator_data/loader.rb +27 -0
  174. data/lib/tdriver/util/operator_data/operator_data.rb +93 -0
  175. data/lib/tdriver/util/other/config.rb +221 -0
  176. data/lib/tdriver/util/parameter/error.rb +48 -0
  177. data/lib/tdriver/util/parameter/loader.rb +25 -0
  178. data/lib/tdriver/util/parameter/parameter.rb +1161 -0
  179. data/lib/tdriver/util/plugin/abstract.rb +61 -0
  180. data/lib/tdriver/util/plugin/error.rb +0 -0
  181. data/lib/tdriver/util/plugin/loader.rb +28 -0
  182. data/lib/tdriver/util/plugin/service.rb +319 -0
  183. data/lib/tdriver/util/recorder/loader.rb +25 -0
  184. data/lib/tdriver/util/recorder/recorder.rb +72 -0
  185. data/lib/tdriver/util/recorder/scripter.rb +294 -0
  186. data/lib/tdriver/util/statistics/statistics.rb +89 -0
  187. data/lib/tdriver/util/user_data/error.rb +28 -0
  188. data/lib/tdriver/util/user_data/loader.rb +25 -0
  189. data/lib/tdriver/util/user_data/user_data.rb +104 -0
  190. data/lib/tdriver/util/video/camera.rb +67 -0
  191. data/lib/tdriver/util/video/camera_linux.rb +153 -0
  192. data/lib/tdriver/util/video/camera_windows.rb +174 -0
  193. data/lib/tdriver/util/video/loader.rb +31 -0
  194. data/lib/tdriver/util/video/video_utils.rb +139 -0
  195. data/lib/tdriver/util/xml/abstraction.rb +117 -0
  196. data/lib/tdriver/util/xml/attribute.rb +32 -0
  197. data/lib/tdriver/util/xml/builder.rb +53 -0
  198. data/lib/tdriver/util/xml/comment.rb +32 -0
  199. data/lib/tdriver/util/xml/document.rb +32 -0
  200. data/lib/tdriver/util/xml/element.rb +32 -0
  201. data/lib/tdriver/util/xml/error.rb +46 -0
  202. data/lib/tdriver/util/xml/loader.rb +62 -0
  203. data/lib/tdriver/util/xml/nil_node.rb +95 -0
  204. data/lib/tdriver/util/xml/nodeset.rb +32 -0
  205. data/lib/tdriver/util/xml/parsers/libxml/libxml.rb +140 -0
  206. data/lib/tdriver/util/xml/parsers/loader.rb +21 -0
  207. data/lib/tdriver/util/xml/parsers/nokogiri/abstraction.rb +167 -0
  208. data/lib/tdriver/util/xml/parsers/nokogiri/attribute.rb +66 -0
  209. data/lib/tdriver/util/xml/parsers/nokogiri/builder.rb +64 -0
  210. data/lib/tdriver/util/xml/parsers/nokogiri/comment.rb +39 -0
  211. data/lib/tdriver/util/xml/parsers/nokogiri/document.rb +66 -0
  212. data/lib/tdriver/util/xml/parsers/nokogiri/element.rb +39 -0
  213. data/lib/tdriver/util/xml/parsers/nokogiri/loader.rb +58 -0
  214. data/lib/tdriver/util/xml/parsers/nokogiri/node.rb +212 -0
  215. data/lib/tdriver/util/xml/parsers/nokogiri/nodeset.rb +237 -0
  216. data/lib/tdriver/util/xml/parsers/nokogiri/text.rb +39 -0
  217. data/lib/tdriver/util/xml/text.rb +32 -0
  218. data/lib/tdriver/util/xml/xml.rb +332 -0
  219. data/lib/tdriver/verify/verify.rb +2398 -0
  220. data/lib/tdriver/version.rb +21 -0
  221. data/xml/behaviours/generic.xml +530 -0
  222. data/xml/defaults/generic.xml +11 -0
  223. data/xml/defaults/sut_generic.xml +8 -0
  224. data/xml/parameters/tdriver_parameters.xml +23 -0
  225. data/xml/templates/generic.xml +292 -0
  226. metadata +324 -0
@@ -0,0 +1,119 @@
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 MobyBehaviour
21
+
22
+ # == description
23
+ # Generic methods for test object and SUT composition
24
+ #
25
+ # == behaviour
26
+ # GenericObjectComposition
27
+ #
28
+ # == requires
29
+ # *
30
+ #
31
+ # == input_type
32
+ # *
33
+ #
34
+ # == sut_type
35
+ # *
36
+ #
37
+ # == sut_version
38
+ # *
39
+ #
40
+ # == objects
41
+ # *;sut
42
+ #
43
+ module ObjectComposition
44
+
45
+ include MobyBehaviour::Behaviour
46
+
47
+ # The parent attribute accessor is deprecated, parent_object() should be used instead.
48
+ #def parent
49
+
50
+ # $stderr.puts "#{ caller(0).last.to_s } warning: TestObject#parent is deprecated, please use TestObject#parent_object instead."
51
+ # @parent
52
+
53
+ #end
54
+
55
+ # == nodoc
56
+ # Adds a object as a parent of this object
57
+ # === params
58
+ # parent_object Object to be added
59
+ # === returns
60
+ # ?
61
+ # === raises
62
+ def add_parent( parent_object )
63
+
64
+ warn("warning: Deprecated method, use store to @parent instead of using this method")
65
+
66
+ @parent = parent_object
67
+
68
+ end
69
+
70
+ # == nodoc
71
+ # removes association to parent object from self
72
+ # === params
73
+ # none
74
+ # === returns
75
+ # ?
76
+ def remove_parent()
77
+
78
+ warn("warning: Deprecated method, set @parent to nil instead of using this method")
79
+
80
+ @parent = nil
81
+
82
+ end
83
+
84
+ # == nodoc
85
+ # Adds a test object as a child of this object
86
+ # === params
87
+ # new_child_object:: Object to be added
88
+ # === returns
89
+ # ?
90
+ # === raises
91
+ def add_child( new_child_object )
92
+
93
+ warn("warning: Deprecated method, use @child_object_cache.add_object instead of this method")
94
+
95
+ @_child_object_cache.merge!( new_child_object.hash => new_child_object )
96
+
97
+ end
98
+
99
+ # == nodoc
100
+ # Removes target_child_object from the Set of child objects
101
+ # === params
102
+ # target_test_object:: TestObject to be removed
103
+ # === returns
104
+ # ?
105
+ # === raises
106
+ def remove_child( target_child_object )
107
+
108
+ warn("warning: Deprecated method, use @child_object_cache.add_object instead of this method")
109
+
110
+ @_child_object_cache.delete( target_child_object.hash )
111
+
112
+ end
113
+
114
+ # enable hooking for performance measurement & debug logging
115
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
116
+
117
+ end # ObjectComposition
118
+
119
+ end # MobyBehaviour
@@ -0,0 +1,495 @@
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 TDriver
21
+
22
+ class BehaviourFactory
23
+
24
+ class << self
25
+
26
+ public
27
+
28
+ # initialize behaviours factory
29
+ def init( options )
30
+
31
+ # verify that argument is type of hash
32
+ options.check_type Hash, 'wrong argument type $1 for TDriver::BehaviourFactory#init options argument (expected $2)'
33
+
34
+ # load behaviour configuration files
35
+ load_behaviours(
36
+
37
+ options.require_key( :path, 'required key $1 not found from TDriver::BehaviourFactory#init options argument' )
38
+
39
+ )
40
+
41
+ end
42
+
43
+ # reset class configuration
44
+ def reset
45
+
46
+ # reset default values
47
+ initialize_class
48
+
49
+ end
50
+
51
+ def remove_behaviours( object )
52
+
53
+ object.check_type [ MobyBase::TestObject, MobyBase::SUT ], 'wrong argument type $1 for target object (expected $2)'
54
+
55
+ # add behaviour information to test object
56
+ behaviour_index = object.instance_variable_get( :@object_behaviours )
57
+
58
+ collect_behaviours( :index => behaviour_index ).collect{ | behaviour |
59
+
60
+ _module = behaviour[ :module ]
61
+
62
+ instance_methods = [
63
+ _module.instance_methods( false ),
64
+ _module.private_instance_methods( false ),
65
+ _module.protected_instance_methods( false )
66
+ ].inject([]){ | result, methods |
67
+
68
+ result.concat( methods )
69
+
70
+ }
71
+
72
+ # remove behaviour instance methods from target object
73
+ instance_methods.each do | method_name |
74
+
75
+ object.instance_eval( "undef :#{ method_name.to_s }") # if respond_to?(:#{ method_name.to_s })" )
76
+
77
+ end
78
+
79
+ behaviour_index.delete( behaviour[ :index ] )
80
+
81
+ }
82
+
83
+ behaviour_index = object.instance_variable_set( :@object_behaviours, behaviour_index )
84
+
85
+ object
86
+
87
+ end
88
+
89
+ # TODO: document me
90
+ def apply_behaviour( rule )
91
+
92
+ # verify that rule is given as hash
93
+ rule.check_type Hash, 'wrong argument type $1 for TDriver::BehaviourFactory#apply_behaviour rule argument (expected $2)'
94
+
95
+ # empty collected indexes variable
96
+ collected_indexes = []
97
+
98
+ # retrieve object from hash
99
+ _object = rule[ :object ]
100
+
101
+ # generate cache key, drop :object value from hash
102
+ cache_key = rule.reject{ | key, value | key == :object }.hash
103
+
104
+ # retrieve behaviour from cache if found
105
+ if @behaviours_cache.has_key?( cache_key )
106
+
107
+ behaviours = @behaviours_cache[ cache_key ]
108
+
109
+ else
110
+
111
+ # collect behaviours that meets given rules
112
+ behaviours = collect_behaviours( rule )
113
+
114
+ # store behaviour collection to cache for future reuse
115
+ @behaviours_cache[ cache_key ] = behaviours
116
+
117
+ end
118
+
119
+ # iterate through each collected behaviour
120
+ behaviours.each do | behaviour |
121
+
122
+ begin
123
+
124
+ # retrieve module from hash
125
+ _module = behaviour[ :module ]
126
+
127
+ unless _module.kind_of?( Module )
128
+
129
+ # retrieve behaviour module
130
+ _module = MobyUtil::KernelHelper.get_constant( _module.to_s )
131
+
132
+ # store pointer to module (implementation) back to hash
133
+ behaviour[ :module ] = _module
134
+
135
+ end
136
+
137
+ # extend target object with behaviour module
138
+ _object.extend( _module )
139
+
140
+ # store behaviour indexes
141
+ collected_indexes << behaviour[ :index ]
142
+
143
+ rescue NameError
144
+
145
+ raise NameError, "Implementation for #{ behaviour[ :name ] } behaviour does not exist. (#{ _module })"
146
+
147
+ rescue
148
+
149
+ raise RuntimeError, "Error while applying #{ behaviour[ :name ] } (#{ _module }) behaviour to target object due to #{ $!.message } (#{ $!.class })"
150
+
151
+ end
152
+
153
+ end # behaviours.each
154
+
155
+ # retrieve objects behaviour index array if already set
156
+ collected_indexes = _object.instance_variable_get( :@object_behaviours ) | collected_indexes if _object.instance_variable_defined?( :@object_behaviours )
157
+
158
+ # add behaviour information to test object
159
+ _object.instance_variable_set( :@object_behaviours, collected_indexes )
160
+
161
+ end
162
+
163
+ # TODO: document me
164
+ def collect_behaviours( rule )
165
+
166
+ # retrieve enabled plugins from PluginService
167
+ enabled_plugins = TDriver::PluginService.enabled_plugins
168
+
169
+ # default value for rule if not defined
170
+ rule.default = [ '*' ]
171
+
172
+ # store as local variable for less AST lookups
173
+ _index = rule.fetch( :index, [] )
174
+ _object_type = rule[ :object_type ]
175
+ _input_type = rule[ :input_type ]
176
+ _env = rule[ :env ]
177
+ _version = rule[ :version ]
178
+
179
+ _name = rule[ :name ]
180
+ _any = [ '*' ]
181
+
182
+ # collect behaviours
183
+ enabled_plugins.inject([]){ | result, plugin |
184
+
185
+ @behaviours_per_plugin.fetch( plugin, [] ).each do | behaviour |
186
+
187
+ # match other rules if no exact index given
188
+ if _index.empty?
189
+
190
+ case _name
191
+
192
+ when behaviour[ :name ]
193
+
194
+ # exact match with name
195
+ result << behaviour
196
+
197
+ when _any
198
+
199
+ # compare rules and behaviour attributes
200
+ if !( _object_type & behaviour[ :object_type ] ).empty? &&
201
+ !( _input_type & behaviour[ :input_type ] ).empty? &&
202
+ !( _env & behaviour[ :env ] ).empty? &&
203
+ !( _version & behaviour[ :version ] ).empty?
204
+
205
+ result << behaviour
206
+
207
+ end
208
+
209
+ else
210
+
211
+ false
212
+
213
+ end
214
+
215
+ else
216
+
217
+ # index given
218
+ result << behaviour if Array( _index ).include?( behaviour[ :index ] )
219
+
220
+ end
221
+
222
+ end
223
+
224
+ result
225
+
226
+ }
227
+
228
+ =begin
229
+
230
+ @behaviours.select do | behaviour |
231
+
232
+ # skip if required plugin is not registered or enabled; compare requires array and enabled_plugins array
233
+ next unless ( behaviour[ :requires ] - enabled_plugins ).empty?
234
+
235
+ # match other rules if no exact index given
236
+ if _index.empty?
237
+
238
+ case _name
239
+
240
+ when behaviour[ :name ]
241
+
242
+ # exact match with name
243
+ true
244
+
245
+ when _any
246
+
247
+ # compare rules and behaviour attributes
248
+ !( _object_type & behaviour[ :object_type ] ).empty? &&
249
+ !( _input_type & behaviour[ :input_type ] ).empty? &&
250
+ !( _env & behaviour[ :env ] ).empty? &&
251
+ !( _version & behaviour[ :version ] ).empty?
252
+
253
+ else
254
+
255
+ false
256
+
257
+ end
258
+
259
+ else
260
+
261
+ # index given
262
+ true if Array( _index ).include?( behaviour[ :index ] )
263
+
264
+ end
265
+
266
+ end # behaviours.select
267
+ =end
268
+
269
+ end
270
+
271
+ # remove me when migration ready
272
+ def apply_behaviour!( *args )
273
+
274
+ warn_caller '$1:$2 warning: deprecated method apply_behaviour!; please use TDriver::BehaviourFactory.apply_behaviour instead'
275
+
276
+ apply_behaviour( *args )
277
+
278
+ end
279
+
280
+ # TODO: document me
281
+ def to_xml( rule )
282
+
283
+ MobyUtil::XML.build{ | xml |
284
+
285
+ # root element
286
+ xml.behaviours{
287
+
288
+ # iterate each behaviour that meets the rule
289
+ collect_behaviours( rule ).each{ | behaviour |
290
+
291
+ # behaviour element
292
+ xml.behaviour( :name => behaviour[ :name ], :object_type => behaviour[ :object_type ].sort.join(";") ){
293
+
294
+ # behaviour methods element
295
+ xml.object_methods{
296
+
297
+ behaviour[ :methods ].each_pair{ | key, value |
298
+
299
+ xml.object_method( :name => key.to_s ){
300
+
301
+ xml.description value[ :description ]
302
+ xml.example value[ :example ]
303
+
304
+ } # object_method
305
+
306
+ } # methods.each_pair
307
+
308
+ } # object_methods
309
+
310
+ } # behaviour
311
+
312
+ } # behaviours.each
313
+
314
+ } # root
315
+
316
+ }.to_xml
317
+
318
+ end
319
+
320
+ # TODO: document me
321
+ def reset_cache
322
+
323
+ # reset behaviour cache
324
+ @behaviours_cache = {}
325
+
326
+ end
327
+
328
+ private
329
+
330
+ # private methods and variables
331
+ def initialize_class
332
+
333
+ # behaviours container
334
+ @behaviours = []
335
+
336
+ @behaviours_per_plugin = {}
337
+
338
+ # behaviour cache; re-collecting behaviours is not required for similar target objects
339
+ @behaviours_cache = {}
340
+
341
+ end
342
+
343
+ # TODO: document me
344
+ def store( behaviour_data )
345
+
346
+ behaviour_data[ :requires ].each{ | plugin |
347
+
348
+ # retrieve array of plugin specific behaviours
349
+ behaviours_array = @behaviours_per_plugin[ plugin ] || []
350
+
351
+ # apply empty array unless already exist
352
+ @behaviours_per_plugin[ plugin ] = behaviours_array if behaviours_array.empty?
353
+
354
+ behaviours_array << behaviour_data
355
+
356
+ }
357
+
358
+ end
359
+
360
+ # load and parse behaviours files
361
+ def load_behaviours( path )
362
+
363
+ # behaviour xml files path
364
+ Dir.glob( File.join( path, '*.xml' ) ){ | filename |
365
+
366
+ begin
367
+
368
+ # read file contents
369
+ content = MobyUtil::FileHelper.get_file( filename )
370
+
371
+ # skip when empty file
372
+ next if content.empty?
373
+
374
+ # parse behaviour xml and process each behaviours element
375
+ MobyUtil::XML.parse_string( content ).root.xpath( '/behaviours' ).each do | behaviours |
376
+
377
+ # retrieve root attributes
378
+ root_attributes = behaviours.attributes
379
+
380
+ # process each behaviour element
381
+ behaviours.xpath( './behaviour' ).each do | behaviour |
382
+
383
+ # retrieve behaviour attributes - set default values if not found from element
384
+ attributes = behaviour.attributes.default_values(
385
+ 'name' => '',
386
+ 'object_type' => '',
387
+ 'input_type' => '',
388
+ 'sut_type' => '',
389
+ 'version' => '',
390
+ 'env' => '*'
391
+ )
392
+
393
+ # verify that behaviour attributes are not empty
394
+ attributes.each_pair do | key, value |
395
+
396
+ value.not_empty "behaviour element attribute #{ key.inspect } is not defined or empty", RuntimeError
397
+
398
+ end
399
+
400
+ # retrieve implementation/module name
401
+ module_name = behaviour.at_xpath( 'module/@name' ).to_s
402
+
403
+ # verify that module name is defined
404
+ module_name.not_empty "behaviour #{ attributes[ "name" ].inspect } does not have module name defined or is empty", RuntimeError
405
+
406
+ # store behaviour
407
+ behaviour_data = {
408
+
409
+ :index => @behaviours.count,
410
+
411
+ :name => attributes[ 'name' ],
412
+ :object_type => attributes[ 'object_type' ].split(';'),
413
+ :input_type => attributes[ 'input_type' ].split(';'),
414
+ :version => attributes[ 'version' ].split(';'),
415
+ :env => attributes[ 'env' ].split(';'),
416
+
417
+ :requires => root_attributes[ 'plugin' ].to_s.split(';'),
418
+
419
+ :module => module_name,
420
+ :file => behaviour.at_xpath( 'module/text()' ).to_s, # optional
421
+
422
+ :methods => Hash[
423
+ # collect method details from behaviour
424
+ behaviour.xpath( 'methods/method' ).collect{ | method |
425
+ [
426
+ method.attribute( 'name' ),
427
+ {
428
+ :description => method.at_xpath( 'description/text()' ).to_s,
429
+ :example => method.at_xpath( 'example/text()' ).to_s
430
+ }
431
+ ]
432
+ }
433
+ ]
434
+
435
+ }
436
+
437
+ store behaviour_data
438
+
439
+ @behaviours << behaviour_data
440
+
441
+ end # behaviour.each
442
+
443
+ end # behaviours.each
444
+
445
+ rescue MobyUtil::FileNotFoundError
446
+
447
+ raise
448
+
449
+ rescue MobyUtil::XML::ParseError
450
+
451
+ raise MobyUtil::XML::ParseError, "Error while parsing behaviours file #{ filename } due to #{ $!.message }"
452
+
453
+ rescue
454
+
455
+ raise RuntimeError, "Error while processing behaviours file #{ filename } due to #{ $!.message }"
456
+
457
+ end
458
+
459
+ } # Dir.glob
460
+
461
+ end # behaviours
462
+
463
+ end # self
464
+
465
+ # initialize behaviour factory
466
+ initialize_class
467
+
468
+ # enable hooking for performance measurement & debug logging
469
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
470
+
471
+ end # BehaviourFactory
472
+
473
+ end # TDriver
474
+
475
+ # backwards compatibility; e.g. if visualizer is too old
476
+ module MobyBase
477
+
478
+ # TODO: document me
479
+ class BehaviourFactory
480
+
481
+ class << self
482
+
483
+ def instance
484
+
485
+ warn_caller "$1:$2 warning: deprecated class MobyBase::BehaviourFactory; please use TDriver::BehaviourFactory instead"
486
+
487
+ TDriver::BehaviourFactory
488
+
489
+ end
490
+
491
+ end
492
+
493
+ end # BehaviourFactory
494
+
495
+ end # MobyBase