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.
- checksums.yaml +7 -0
- data/README.md +16 -0
- data/bin/start_app_perf +200 -0
- data/bin/tdriver-devtools +3 -0
- data/config/sut_parameters.rb +52 -0
- data/config/sut_setup.rb +32 -0
- data/config/sut_teardown.rb +32 -0
- data/config/tdriver_custom_error_recovery.rb +83 -0
- data/ext/extconf.rb +70 -0
- data/ext/native_extensions.c +315 -0
- data/lib/matti.rb +25 -0
- data/lib/tdriver-devtools/behaviour/old/xml/example/flick-example.rb +120 -0
- data/lib/tdriver-devtools/behaviour/old/xml/example/impl.rb_invalid +194 -0
- data/lib/tdriver-devtools/behaviour/old/xml/generate_behaviour_xml.rb +95 -0
- data/lib/tdriver-devtools/behaviour/old/xml/lib/tdriver_generator.rb +722 -0
- data/lib/tdriver-devtools/behaviour/old/xml/qdoc_generator.rb +321 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.method.template +43 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.module.template +54 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.argument.template +7 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.argument_type.template +7 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.exception.template +5 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.howto.line.template +2 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.howto.template +5 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.method.template +23 -0
- data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.template +14 -0
- data/lib/tdriver-devtools/behaviour/old/xml/update +3 -0
- data/lib/tdriver-devtools/behaviour/xml/generate.rb +88 -0
- data/lib/tdriver-devtools/behaviour/xml/rdoc_behaviour_xml_generator.rb +1945 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument.default.template +1 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument.template +3 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument_type.template +4 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.exception.template +4 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.arguments.template +4 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.deprecated.template +3 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.exceptions.template +3 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.info.template +1 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.returns.template +3 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.tables.template +3 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.template +12 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.returns.template +5 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.item.template +1 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.row.template +2 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.template +8 -0
- data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.template +14 -0
- data/lib/tdriver-devtools/doc/behaviour_xml/QtExampleGestureBehaviour.xml +138 -0
- data/lib/tdriver-devtools/doc/behaviour_xml/created.rid +1 -0
- data/lib/tdriver-devtools/doc/behaviour_xml/tdriver.hash +1 -0
- data/lib/tdriver-devtools/doc/feature_xml/qt_widget_hold.feature.xml +9 -0
- data/lib/tdriver-devtools/doc/feature_xml/qt_widget_tap.feature.xml +9 -0
- data/lib/tdriver-devtools/doc/generate.rb +917 -0
- data/lib/tdriver-devtools/doc/update +1 -0
- data/lib/tdriver-devtools/doc/xslt/html.rb +7 -0
- data/lib/tdriver-devtools/doc/xslt/template.xsl +2170 -0
- data/lib/tdriver-devtools/doc/xslt/update +3 -0
- data/lib/tdriver-devtools/plugin/placeholder.txt +1 -0
- data/lib/tdriver-devtools/tdriver-devtools.rb +404 -0
- data/lib/tdriver-devtools/tests/feature_tests/example/behaviour_example.rb +100 -0
- data/lib/tdriver-devtools/tests/feature_tests/generate.rb +82 -0
- data/lib/tdriver-devtools/tests/feature_tests/lib/custom_rdoc_generator.rb +468 -0
- data/lib/tdriver-devtools/tests/feature_tests/templates/feature_attribute.template +5 -0
- data/lib/tdriver-devtools/tests/feature_tests/templates/feature_method.template +5 -0
- data/lib/tdriver-devtools/tests/feature_tests/templates/scenario_attribute.template +5 -0
- data/lib/tdriver-devtools/tests/feature_tests/templates/scenario_method.template +5 -0
- data/lib/tdriver-devtools/tests/feature_tests/update +3 -0
- data/lib/tdriver.rb +23 -0
- data/lib/tdriver/base/behaviour/abstract.rb +29 -0
- data/lib/tdriver/base/behaviour/behaviours/object_abstract.rb +107 -0
- data/lib/tdriver/base/behaviour/behaviours/object_behaviour_composition.rb +99 -0
- data/lib/tdriver/base/behaviour/behaviours/object_behaviour_description.rb +278 -0
- data/lib/tdriver/base/behaviour/behaviours/object_composition.rb +119 -0
- data/lib/tdriver/base/behaviour/factory.rb +495 -0
- data/lib/tdriver/base/behaviour/loader.rb +46 -0
- data/lib/tdriver/base/command_data/command_data.rb +51 -0
- data/lib/tdriver/base/command_data/loader.rb +29 -0
- data/lib/tdriver/base/controller/abstraction.rb +56 -0
- data/lib/tdriver/base/controller/loader.rb +21 -0
- data/lib/tdriver/base/errors.rb +134 -0
- data/lib/tdriver/base/loader.rb +47 -0
- data/lib/tdriver/base/state_object.rb +373 -0
- data/lib/tdriver/base/sut/adapter.rb +54 -0
- data/lib/tdriver/base/sut/controller.rb +151 -0
- data/lib/tdriver/base/sut/factory.rb +339 -0
- data/lib/tdriver/base/sut/generic/behaviours/agent.rb +77 -0
- data/lib/tdriver/base/sut/generic/behaviours/application.rb +427 -0
- data/lib/tdriver/base/sut/generic/behaviours/controller.rb +67 -0
- data/lib/tdriver/base/sut/generic/behaviours/find.rb +107 -0
- data/lib/tdriver/base/sut/generic/behaviours/flash_behaviour.rb +337 -0
- data/lib/tdriver/base/sut/generic/behaviours/sut.rb +1888 -0
- data/lib/tdriver/base/sut/generic/behaviours/switchbox_behaviour.rb +210 -0
- data/lib/tdriver/base/sut/generic/behaviours/verification.rb +222 -0
- data/lib/tdriver/base/sut/generic/commands/agent.rb +43 -0
- data/lib/tdriver/base/sut/generic/commands/application.rb +274 -0
- data/lib/tdriver/base/sut/generic/commands/fixture.rb +47 -0
- data/lib/tdriver/base/sut/generic/commands/key_sequence.rb +94 -0
- data/lib/tdriver/base/sut/generic/commands/screen_capture.rb +64 -0
- data/lib/tdriver/base/sut/generic/plugin.rb +97 -0
- data/lib/tdriver/base/sut/loader.rb +35 -0
- data/lib/tdriver/base/sut/sut.rb +98 -0
- data/lib/tdriver/base/test_object/abstract.rb +208 -0
- data/lib/tdriver/base/test_object/adapter.rb +740 -0
- data/lib/tdriver/base/test_object/behaviours/syncronization.rb +144 -0
- data/lib/tdriver/base/test_object/behaviours/test_object.rb +1047 -0
- data/lib/tdriver/base/test_object/cache.rb +134 -0
- data/lib/tdriver/base/test_object/factory.rb +684 -0
- data/lib/tdriver/base/test_object/loader.rb +51 -0
- data/lib/tdriver/base/test_object/verification.rb +178 -0
- data/lib/tdriver/base/test_object/xml/abstraction.rb +63 -0
- data/lib/tdriver/base/test_object/xml/adapter.rb +773 -0
- data/lib/tdriver/env.rb +21 -0
- data/lib/tdriver/loader.rb +57 -0
- data/lib/tdriver/matti.rb +35 -0
- data/lib/tdriver/report/error_recovery/tdriver_custom_error_recovery.rb +83 -0
- data/lib/tdriver/report/error_recovery/tdriver_error_recovery.rb +168 -0
- data/lib/tdriver/report/error_recovery/tdriver_error_recovery_settings.rb +106 -0
- data/lib/tdriver/report/report.rb +61 -0
- data/lib/tdriver/report/report_api.rb +348 -0
- data/lib/tdriver/report/report_combine.rb +86 -0
- data/lib/tdriver/report/report_crash_file_capture.rb +178 -0
- data/lib/tdriver/report/report_creator.rb +665 -0
- data/lib/tdriver/report/report_cucumber.rb +158 -0
- data/lib/tdriver/report/report_cucumber_listener.rb +184 -0
- data/lib/tdriver/report/report_cucumber_reporter.rb +181 -0
- data/lib/tdriver/report/report_data_presentation.rb +156 -0
- data/lib/tdriver/report/report_data_table.rb +64 -0
- data/lib/tdriver/report/report_execution_statistics.rb +400 -0
- data/lib/tdriver/report/report_file_capture.rb +159 -0
- data/lib/tdriver/report/report_graph_generator.rb +59 -0
- data/lib/tdriver/report/report_grouping.rb +541 -0
- data/lib/tdriver/report/report_javascript.rb +199 -0
- data/lib/tdriver/report/report_junit_xml.rb +147 -0
- data/lib/tdriver/report/report_rspec.rb +108 -0
- data/lib/tdriver/report/report_test_case_run.rb +725 -0
- data/lib/tdriver/report/report_test_run.rb +1476 -0
- data/lib/tdriver/report/report_test_unit.rb +223 -0
- data/lib/tdriver/report/report_writer.rb +1621 -0
- data/lib/tdriver/tdriver.rb +209 -0
- data/lib/tdriver/util/agent/loader.rb +22 -0
- data/lib/tdriver/util/agent/service.rb +107 -0
- data/lib/tdriver/util/common/array.rb +39 -0
- data/lib/tdriver/util/common/boolean.rb +48 -0
- data/lib/tdriver/util/common/crc16.rb +149 -0
- data/lib/tdriver/util/common/environment.rb +154 -0
- data/lib/tdriver/util/common/error.rb +40 -0
- data/lib/tdriver/util/common/exception.rb +53 -0
- data/lib/tdriver/util/common/exceptions.rb +12 -0
- data/lib/tdriver/util/common/file.rb +328 -0
- data/lib/tdriver/util/common/gem.rb +109 -0
- data/lib/tdriver/util/common/hash.rb +288 -0
- data/lib/tdriver/util/common/kernel.rb +253 -0
- data/lib/tdriver/util/common/loader.rb +47 -0
- data/lib/tdriver/util/common/numeric.rb +159 -0
- data/lib/tdriver/util/common/object.rb +159 -0
- data/lib/tdriver/util/common/retryable.rb +179 -0
- data/lib/tdriver/util/common/stackable.rb +185 -0
- data/lib/tdriver/util/common/string.rb +174 -0
- data/lib/tdriver/util/database/access.rb +240 -0
- data/lib/tdriver/util/database/connection.rb +44 -0
- data/lib/tdriver/util/database/error.rb +34 -0
- data/lib/tdriver/util/database/loader.rb +28 -0
- data/lib/tdriver/util/filters/attribute_filter.rb +121 -0
- data/lib/tdriver/util/filters/loader.rb +29 -0
- data/lib/tdriver/util/fixture/loader.rb +22 -0
- data/lib/tdriver/util/fixture/service.rb +211 -0
- data/lib/tdriver/util/hooking/hooking.rb +477 -0
- data/lib/tdriver/util/keymap/keymap.rb +81 -0
- data/lib/tdriver/util/loader.rb +80 -0
- data/lib/tdriver/util/localisation/error.rb +31 -0
- data/lib/tdriver/util/localisation/loader.rb +25 -0
- data/lib/tdriver/util/localisation/localisation.rb +762 -0
- data/lib/tdriver/util/logger/loader.rb +22 -0
- data/lib/tdriver/util/logger/logger.rb +591 -0
- data/lib/tdriver/util/operator_data/error.rb +29 -0
- data/lib/tdriver/util/operator_data/loader.rb +27 -0
- data/lib/tdriver/util/operator_data/operator_data.rb +93 -0
- data/lib/tdriver/util/other/config.rb +221 -0
- data/lib/tdriver/util/parameter/error.rb +48 -0
- data/lib/tdriver/util/parameter/loader.rb +25 -0
- data/lib/tdriver/util/parameter/parameter.rb +1161 -0
- data/lib/tdriver/util/plugin/abstract.rb +61 -0
- data/lib/tdriver/util/plugin/error.rb +0 -0
- data/lib/tdriver/util/plugin/loader.rb +28 -0
- data/lib/tdriver/util/plugin/service.rb +319 -0
- data/lib/tdriver/util/recorder/loader.rb +25 -0
- data/lib/tdriver/util/recorder/recorder.rb +72 -0
- data/lib/tdriver/util/recorder/scripter.rb +294 -0
- data/lib/tdriver/util/statistics/statistics.rb +89 -0
- data/lib/tdriver/util/user_data/error.rb +28 -0
- data/lib/tdriver/util/user_data/loader.rb +25 -0
- data/lib/tdriver/util/user_data/user_data.rb +104 -0
- data/lib/tdriver/util/video/camera.rb +67 -0
- data/lib/tdriver/util/video/camera_linux.rb +153 -0
- data/lib/tdriver/util/video/camera_windows.rb +174 -0
- data/lib/tdriver/util/video/loader.rb +31 -0
- data/lib/tdriver/util/video/video_utils.rb +139 -0
- data/lib/tdriver/util/xml/abstraction.rb +117 -0
- data/lib/tdriver/util/xml/attribute.rb +32 -0
- data/lib/tdriver/util/xml/builder.rb +53 -0
- data/lib/tdriver/util/xml/comment.rb +32 -0
- data/lib/tdriver/util/xml/document.rb +32 -0
- data/lib/tdriver/util/xml/element.rb +32 -0
- data/lib/tdriver/util/xml/error.rb +46 -0
- data/lib/tdriver/util/xml/loader.rb +62 -0
- data/lib/tdriver/util/xml/nil_node.rb +95 -0
- data/lib/tdriver/util/xml/nodeset.rb +32 -0
- data/lib/tdriver/util/xml/parsers/libxml/libxml.rb +140 -0
- data/lib/tdriver/util/xml/parsers/loader.rb +21 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/abstraction.rb +167 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/attribute.rb +66 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/builder.rb +64 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/comment.rb +39 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/document.rb +66 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/element.rb +39 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/loader.rb +58 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/node.rb +212 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/nodeset.rb +237 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/text.rb +39 -0
- data/lib/tdriver/util/xml/text.rb +32 -0
- data/lib/tdriver/util/xml/xml.rb +332 -0
- data/lib/tdriver/verify/verify.rb +2398 -0
- data/lib/tdriver/version.rb +21 -0
- data/xml/behaviours/generic.xml +530 -0
- data/xml/defaults/generic.xml +11 -0
- data/xml/defaults/sut_generic.xml +8 -0
- data/xml/parameters/tdriver_parameters.xml +23 -0
- data/xml/templates/generic.xml +292 -0
- 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
|