testability-driver 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +1 -0
- data/bin/start_app_perf +199 -0
- data/bin/tdriver-devtools +3 -0
- data/config/sut_parameters.rb +39 -0
- data/ext/extconf.rb +67 -0
- data/ext/native_extensions.c +70 -0
- data/lib/matti.rb +30 -0
- data/lib/tdriver-devtools/behaviour/old/xml/example/flick-example.rb +223 -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 +1924 -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/behaviour/xml_generator/example/flick-example.rb +245 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/example/sut.rb +964 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/generate.rb +68 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/lib/custom_rdoc_generator.rb +1865 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.argument.default.template +1 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.argument.template +3 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.argument_type.template +4 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.exception.template +4 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.arguments.template +4 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.deprecated.template +3 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.exceptions.template +3 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.info.template +1 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.returns.template +3 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.tables.template +3 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.template +12 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.returns.template +5 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.table.item.template +1 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.table.row.template +2 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.table.template +7 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.template +14 -0
- data/lib/tdriver-devtools/behaviour/xml_generator/update +3 -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 +892 -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 +1861 -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/flick-example.rb +233 -0
- data/lib/tdriver-devtools/tests/feature_tests/example/impl.rb +194 -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 +26 -0
- data/lib/tdriver/base/behaviour/behaviour.rb +32 -0
- data/lib/tdriver/base/behaviour/behaviours/object_behaviour_composition.rb +94 -0
- data/lib/tdriver/base/behaviour/behaviours/object_behaviour_description.rb +262 -0
- data/lib/tdriver/base/behaviour/behaviours/object_composition.rb +111 -0
- data/lib/tdriver/base/behaviour/factory.rb +380 -0
- data/lib/tdriver/base/behaviour/loader.rb +28 -0
- data/lib/tdriver/base/command_data/command_data.rb +51 -0
- data/lib/tdriver/base/command_data/loader.rb +25 -0
- data/lib/tdriver/base/errors.rb +131 -0
- data/lib/tdriver/base/loader.rb +38 -0
- data/lib/tdriver/base/state_object.rb +270 -0
- data/lib/tdriver/base/sut/adapter.rb +28 -0
- data/lib/tdriver/base/sut/controller.rb +119 -0
- data/lib/tdriver/base/sut/factory.rb +287 -0
- data/lib/tdriver/base/sut/generic/behaviours/application.rb +243 -0
- data/lib/tdriver/base/sut/generic/behaviours/controller.rb +67 -0
- data/lib/tdriver/base/sut/generic/behaviours/find.rb +96 -0
- data/lib/tdriver/base/sut/generic/behaviours/flash_behaviour.rb +346 -0
- data/lib/tdriver/base/sut/generic/behaviours/sut.rb +1268 -0
- data/lib/tdriver/base/sut/generic/behaviours/switchbox_behaviour.rb +182 -0
- data/lib/tdriver/base/sut/generic/behaviours/verification.rb +119 -0
- data/lib/tdriver/base/sut/generic/commands/application.rb +219 -0
- data/lib/tdriver/base/sut/generic/commands/key_sequence.rb +82 -0
- data/lib/tdriver/base/sut/generic/commands/screen_capture.rb +58 -0
- data/lib/tdriver/base/sut/generic/plugin.rb +96 -0
- data/lib/tdriver/base/sut/loader.rb +35 -0
- data/lib/tdriver/base/sut/sut.rb +67 -0
- data/lib/tdriver/base/test_object/abstract.rb +179 -0
- data/lib/tdriver/base/test_object/behaviours/syncronization.rb +94 -0
- data/lib/tdriver/base/test_object/behaviours/test_object.rb +787 -0
- data/lib/tdriver/base/test_object/factory.rb +618 -0
- data/lib/tdriver/base/test_object/identificator.rb +511 -0
- data/lib/tdriver/base/test_object/loader.rb +37 -0
- data/lib/tdriver/env.rb +21 -0
- data/lib/tdriver/loader.rb +36 -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 +158 -0
- data/lib/tdriver/report/error_recovery/tdriver_error_recovery_settings.rb +98 -0
- data/lib/tdriver/report/report.rb +47 -0
- data/lib/tdriver/report/report_api.rb +207 -0
- data/lib/tdriver/report/report_combine.rb +86 -0
- data/lib/tdriver/report/report_crash_file_capture.rb +167 -0
- data/lib/tdriver/report/report_creator.rb +571 -0
- data/lib/tdriver/report/report_cucumber.rb +158 -0
- data/lib/tdriver/report/report_cucumber_listener.rb +337 -0
- data/lib/tdriver/report/report_cucumber_reporter.rb +335 -0
- data/lib/tdriver/report/report_data_presentation.rb +152 -0
- data/lib/tdriver/report/report_data_table.rb +64 -0
- data/lib/tdriver/report/report_execution_statistics.rb +284 -0
- data/lib/tdriver/report/report_file_capture.rb +159 -0
- data/lib/tdriver/report/report_grouping.rb +539 -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 +621 -0
- data/lib/tdriver/report/report_test_run.rb +1286 -0
- data/lib/tdriver/report/report_test_unit.rb +175 -0
- data/lib/tdriver/report/report_writer.rb +1405 -0
- data/lib/tdriver/tdriver.rb +158 -0
- data/lib/tdriver/util/common.rb +24 -0
- data/lib/tdriver/util/common/array.rb +39 -0
- data/lib/tdriver/util/common/crc16.rb +100 -0
- data/lib/tdriver/util/common/environment.rb +153 -0
- data/lib/tdriver/util/common/error.rb +39 -0
- data/lib/tdriver/util/common/file.rb +315 -0
- data/lib/tdriver/util/common/gem.rb +108 -0
- data/lib/tdriver/util/common/kernel.rb +189 -0
- data/lib/tdriver/util/common/loader.rb +39 -0
- data/lib/tdriver/util/common/retryable.rb +98 -0
- data/lib/tdriver/util/common/string.rb +77 -0
- data/lib/tdriver/util/dbaccess/dbaccess.rb +188 -0
- data/lib/tdriver/util/dbaccess/dbconnection.rb +41 -0
- data/lib/tdriver/util/dbaccess/error.rb +35 -0
- data/lib/tdriver/util/dbaccess/loader.rb +29 -0
- data/lib/tdriver/util/dynamic_attribute_filter.rb +182 -0
- data/lib/tdriver/util/hooking.rb +434 -0
- data/lib/tdriver/util/loader.rb +65 -0
- data/lib/tdriver/util/localisation.rb +24 -0
- data/lib/tdriver/util/localisation/error.rb +32 -0
- data/lib/tdriver/util/localisation/loader.rb +28 -0
- data/lib/tdriver/util/localisation/localisation.rb +479 -0
- data/lib/tdriver/util/logger.rb +377 -0
- data/lib/tdriver/util/operator_data/error.rb +29 -0
- data/lib/tdriver/util/operator_data/loader.rb +26 -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.rb +24 -0
- data/lib/tdriver/util/parameter/error.rb +45 -0
- data/lib/tdriver/util/parameter/loader.rb +37 -0
- data/lib/tdriver/util/parameter/parameter.rb +285 -0
- data/lib/tdriver/util/parameter/parameter_hash.rb +101 -0
- data/lib/tdriver/util/parameter/parameter_template.rb +120 -0
- data/lib/tdriver/util/parameter/parameter_user_api.rb +84 -0
- data/lib/tdriver/util/parameter/parameter_xml.rb +247 -0
- data/lib/tdriver/util/plugin/abstract.rb +60 -0
- data/lib/tdriver/util/plugin/error.rb +25 -0
- data/lib/tdriver/util/plugin/loader.rb +28 -0
- data/lib/tdriver/util/plugin/service.rb +200 -0
- data/lib/tdriver/util/recorder.rb +292 -0
- data/lib/tdriver/util/stats.rb +90 -0
- data/lib/tdriver/util/user_data/error.rb +29 -0
- data/lib/tdriver/util/user_data/loader.rb +26 -0
- data/lib/tdriver/util/user_data/user_data.rb +103 -0
- data/lib/tdriver/util/video_rec.rb +264 -0
- data/lib/tdriver/util/xml/abstraction.rb +47 -0
- data/lib/tdriver/util/xml/builder.rb +54 -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 +46 -0
- data/lib/tdriver/util/xml/nil_element.rb +89 -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 +22 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/abstraction.rb +111 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/attribute.rb +54 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/builder.rb +58 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/document.rb +58 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/element.rb +147 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/loader.rb +42 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/nodeset.rb +187 -0
- data/lib/tdriver/util/xml/xml.rb +170 -0
- data/lib/tdriver/verify/verify.rb +687 -0
- data/lib/tdriver/verify/verify.rb_org +630 -0
- data/lib/tdriver/version.rb +21 -0
- data/xml/behaviours/generic.xml +495 -0
- data/xml/defaults/generic.xml +97 -0
- data/xml/defaults/sut_generic.xml +36 -0
- data/xml/parameters/tdriver_parameters.xml +23 -0
- data/xml/templates/generic.xml +227 -0
- metadata +327 -0
|
@@ -0,0 +1,111 @@
|
|
|
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
|
+
@parent = parent_object
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# == nodoc
|
|
69
|
+
# removes association to parent object from self
|
|
70
|
+
# === params
|
|
71
|
+
# none
|
|
72
|
+
# === returns
|
|
73
|
+
# ?
|
|
74
|
+
def remove_parent()
|
|
75
|
+
|
|
76
|
+
@parent = nil
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# == nodoc
|
|
81
|
+
# Adds a test object as a child of this object
|
|
82
|
+
# === params
|
|
83
|
+
# new_child_object:: Object to be added
|
|
84
|
+
# === returns
|
|
85
|
+
# ?
|
|
86
|
+
# === raises
|
|
87
|
+
def add_child( new_child_object )
|
|
88
|
+
|
|
89
|
+
@_child_object_cache.merge!( new_child_object.hash => new_child_object )
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# == nodoc
|
|
94
|
+
# Removes target_child_object from the Set of child objects
|
|
95
|
+
# === params
|
|
96
|
+
# target_test_object:: TestObject to be removed
|
|
97
|
+
# === returns
|
|
98
|
+
# ?
|
|
99
|
+
# === raises
|
|
100
|
+
def remove_child( target_child_object )
|
|
101
|
+
|
|
102
|
+
@_child_object_cache.delete( target_child_object.hash )
|
|
103
|
+
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# enable hooking for performance measurement & debug logging
|
|
107
|
+
MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
|
|
108
|
+
|
|
109
|
+
end # ObjectComposition
|
|
110
|
+
|
|
111
|
+
end # MobyBehaviour
|
|
@@ -0,0 +1,380 @@
|
|
|
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 MobyBase
|
|
21
|
+
|
|
22
|
+
# TODO: document BehaviourFactory class
|
|
23
|
+
class BehaviourFactory
|
|
24
|
+
|
|
25
|
+
include Singleton
|
|
26
|
+
|
|
27
|
+
def initialize
|
|
28
|
+
|
|
29
|
+
@@behaviours = []
|
|
30
|
+
@@behaviours_cache = {}
|
|
31
|
+
@@modules_cache = {}
|
|
32
|
+
|
|
33
|
+
# behaviour xml files path
|
|
34
|
+
@@path = File.join( MobyUtil::FileHelper.tdriver_home, '/behaviours/*.xml' )
|
|
35
|
+
|
|
36
|
+
parse_behaviour_files(
|
|
37
|
+
|
|
38
|
+
load_behaviours( @@path )
|
|
39
|
+
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
public
|
|
45
|
+
|
|
46
|
+
def to_xml( rules = {} )
|
|
47
|
+
|
|
48
|
+
@_method_index = nil
|
|
49
|
+
|
|
50
|
+
rules.default = [ '*' ]
|
|
51
|
+
|
|
52
|
+
rules.each_pair{ | key, value |
|
|
53
|
+
|
|
54
|
+
rules[ key ] = [ value ] if value.kind_of?( String )
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
MobyUtil::XML.build{
|
|
59
|
+
|
|
60
|
+
behaviours{
|
|
61
|
+
|
|
62
|
+
@@behaviours.each_index{ | index |
|
|
63
|
+
|
|
64
|
+
@_method_index = index
|
|
65
|
+
|
|
66
|
+
behaviour = @@behaviours[ @_method_index ]
|
|
67
|
+
|
|
68
|
+
if ( ( rules[ :name ] == behaviour[ :name ] ) ||
|
|
69
|
+
|
|
70
|
+
( rules[ :name ] == [ '*' ] ) &&
|
|
71
|
+
|
|
72
|
+
( !( rules[ :sut_type ] & behaviour[ :sut_type ] ).empty? ) &&
|
|
73
|
+
( !( rules[ :input_type ] & behaviour[ :input_type ] ).empty? ) &&
|
|
74
|
+
( !( rules[ :object_type ] & behaviour[ :object_type ] ).empty? ) &&
|
|
75
|
+
( !( rules[ :version ] & behaviour[ :version ] ).empty? )
|
|
76
|
+
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
behaviour( :name => @@behaviours[ @_method_index ][ :name ], :object_type => @@behaviours[ @_method_index ][ :object_type ].join(";") ){
|
|
80
|
+
object_methods{
|
|
81
|
+
@@behaviours[ @_method_index ][ :methods ].each { | key, value |
|
|
82
|
+
object_method( :name => key.to_s ) {
|
|
83
|
+
description( value[:description] )
|
|
84
|
+
example( value[:example] )
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
}.to_xml
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def get_behaviour_at_index( index )
|
|
101
|
+
|
|
102
|
+
result = @@behaviours[ index ]
|
|
103
|
+
|
|
104
|
+
if result.nil?
|
|
105
|
+
|
|
106
|
+
Kernel::raise RuntimeError.new( "No behaviour at index #{ index }" )
|
|
107
|
+
|
|
108
|
+
else
|
|
109
|
+
|
|
110
|
+
result
|
|
111
|
+
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def apply_behaviour!( rules = {} )
|
|
117
|
+
|
|
118
|
+
# merge user-defined rules on top of default rules set
|
|
119
|
+
#rules = { :sut_type => ['*'], :object_type => ['*'], :input_type => ['*'], :version => ['*'] }.merge!( rules )
|
|
120
|
+
|
|
121
|
+
rules.default = ['*']
|
|
122
|
+
|
|
123
|
+
Kernel::raise ArgumentError.new( "No target object defined in rules hash" ) if rules[ :object ].nil?
|
|
124
|
+
|
|
125
|
+
# apply behaviours to target object
|
|
126
|
+
( get_object_behaviours( rules ) ).each{ | behaviour_index |
|
|
127
|
+
|
|
128
|
+
behaviour_data = @@behaviours[ behaviour_index ]
|
|
129
|
+
|
|
130
|
+
# skip if required plugin is not registered or enabled
|
|
131
|
+
next if behaviour_data[ :requires ].collect{ | plugin |
|
|
132
|
+
|
|
133
|
+
#MobyUtil::PluginService.instance.plugin_registered?( plugin ) && MobyUtil::PluginService.instance.plugin_enabled?( plugin )
|
|
134
|
+
|
|
135
|
+
# verify if plugin is enabled -- exception will be catched if plugin is not registered
|
|
136
|
+
MobyUtil::PluginService.instance.plugin_enabled?( plugin ) rescue false
|
|
137
|
+
|
|
138
|
+
}.include?( false )
|
|
139
|
+
|
|
140
|
+
begin
|
|
141
|
+
|
|
142
|
+
#behaviour_module = MobyUtil::KernelHelper.get_constant( behaviour_data[ :module ][ :name ] )
|
|
143
|
+
|
|
144
|
+
# retrieve behaviour module from cache and extend target object
|
|
145
|
+
rules[ :object ].extend(
|
|
146
|
+
|
|
147
|
+
@@modules_cache.fetch( behaviour_data[ :module ][ :name ] ){ | name |
|
|
148
|
+
|
|
149
|
+
# ... or store to cache for the next time if not found
|
|
150
|
+
@@modules_cache[ name ] = MobyUtil::KernelHelper.get_constant( name )
|
|
151
|
+
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
rescue NameError => exception
|
|
157
|
+
|
|
158
|
+
Kernel::raise exception.class.new(
|
|
159
|
+
"Implementation for behaviour %s does not exist. (%s)" % [ behaviour_data[ :name ], behaviour_data[ :module ][ :name ] ]
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
rescue Exception => exception
|
|
163
|
+
|
|
164
|
+
Kernel::raise RuntimeError.new(
|
|
165
|
+
"Error while applying %s (%s) behaviour to target object. Reason: %s (%s)" % [
|
|
166
|
+
behaviour_data[ :name ],
|
|
167
|
+
behaviour_data[ :module ][ :name ],
|
|
168
|
+
exception.message,
|
|
169
|
+
exception.class
|
|
170
|
+
]
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# add behaviour information to test object
|
|
176
|
+
rules[ :object ].instance_exec{
|
|
177
|
+
|
|
178
|
+
@object_behaviours.push( behaviour_index ) unless @object_behaviours.include? behaviour_index
|
|
179
|
+
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
private
|
|
187
|
+
|
|
188
|
+
def load_behaviours( behaviour_files )
|
|
189
|
+
|
|
190
|
+
behaviours_data = []
|
|
191
|
+
|
|
192
|
+
@file_name = ""
|
|
193
|
+
|
|
194
|
+
begin
|
|
195
|
+
|
|
196
|
+
Dir.glob( behaviour_files ).each { | behaviour |
|
|
197
|
+
|
|
198
|
+
@file_name = behaviour
|
|
199
|
+
|
|
200
|
+
behaviours_data << { :filename => @file_name, :xml => MobyUtil::FileHelper.get_file( @file_name ) }
|
|
201
|
+
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
rescue MobyUtil::EmptyFilenameError
|
|
205
|
+
|
|
206
|
+
Kernel::raise EmptyFilenameError.new( "Unable to load behaviours xml file due to filename is empty or nil" )
|
|
207
|
+
|
|
208
|
+
rescue MobyUtil::FileNotFoundError => ex
|
|
209
|
+
|
|
210
|
+
Kernel::raise ex
|
|
211
|
+
|
|
212
|
+
rescue IOError => ex
|
|
213
|
+
|
|
214
|
+
Kernel::raise IOError.new("Error occured while loading behaviours xml file %s. Reason: %s" % [ @file_name, ex.message ] )
|
|
215
|
+
|
|
216
|
+
rescue => ex
|
|
217
|
+
|
|
218
|
+
Kernel::raise RuntimeError.new( "Error occured while parsing behaviours xml file %s. Reason: %s (%s)" % [ @file_name, ex.message, ex.class ] )
|
|
219
|
+
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
behaviours_data
|
|
223
|
+
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
def parse_behaviour_files( behaviour_files )
|
|
227
|
+
|
|
228
|
+
behaviour_files.each{ | behaviours |
|
|
229
|
+
|
|
230
|
+
begin
|
|
231
|
+
|
|
232
|
+
# parse behaviour xml
|
|
233
|
+
document = MobyUtil::XML.parse_string( behaviours[ :xml ] )
|
|
234
|
+
|
|
235
|
+
rescue => exception
|
|
236
|
+
|
|
237
|
+
Kernel::raise MobyUtil::XML::ParseError.new(
|
|
238
|
+
"Error occured while parsing behaviour XML file %s. Error: %s " % [ behaviours[ :filename ], exception.message ]
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
# retrieve root attributes
|
|
244
|
+
root_attributes = document.root.xpath( "/behaviours" ).first.attributes
|
|
245
|
+
|
|
246
|
+
# parse retrieve behaviour definitions
|
|
247
|
+
document.root.xpath( "/behaviours/behaviour" ).each{ | node |
|
|
248
|
+
|
|
249
|
+
# retrieve behaviour attributes & module node
|
|
250
|
+
attributes = node.attributes
|
|
251
|
+
|
|
252
|
+
name = attributes[ "name" ].to_s
|
|
253
|
+
object_type = attributes[ "object_type" ].to_s
|
|
254
|
+
input_type = attributes[ "input_type" ].to_s
|
|
255
|
+
sut_type = attributes[ "sut_type" ].to_s
|
|
256
|
+
version = attributes[ "version" ].to_s
|
|
257
|
+
|
|
258
|
+
# verify that all required attributes and nodes are found in behaviour xml node
|
|
259
|
+
Kernel::raise RuntimeError.new("Behaviour does not have a name, please see behaviour XML files") if name.empty?
|
|
260
|
+
Kernel::raise RuntimeError.new("Behaviour target object type not defined for #{ name } in XML") if object_type.empty?
|
|
261
|
+
Kernel::raise RuntimeError.new("Behaviour target object input type not defined for #{ name } in XML") if input_type.empty?
|
|
262
|
+
Kernel::raise RuntimeError.new("Behaviour target object sut type not defined for #{ name } in XML") if sut_type.empty?
|
|
263
|
+
Kernel::raise RuntimeError.new("Behaviour target object sut version not defined for #{ name } in XML") if version.empty?
|
|
264
|
+
|
|
265
|
+
module_node = node.xpath( 'module' ).first
|
|
266
|
+
|
|
267
|
+
Kernel::raise RuntimeError.new("Behaviour implementation module not defined for #{ name } in XML") if module_node.nil?
|
|
268
|
+
|
|
269
|
+
# retrieve module name & implementation filename
|
|
270
|
+
module_attributes = module_node.attributes
|
|
271
|
+
|
|
272
|
+
module_file = module_attributes[ "file" ].to_s # optional
|
|
273
|
+
module_name = module_attributes[ "name" ].to_s
|
|
274
|
+
|
|
275
|
+
Kernel::raise RuntimeError.new( "Behaviour implementation module name not defined for #{ name } in XML") if module_name.empty?
|
|
276
|
+
|
|
277
|
+
methods_hash = {}
|
|
278
|
+
|
|
279
|
+
# create hash of methods
|
|
280
|
+
node.xpath( 'methods/method' ).each{ | method |
|
|
281
|
+
|
|
282
|
+
# retrieve method description & example and store to methods hash
|
|
283
|
+
methods_hash[ method.attribute( "name" ).to_s.to_sym ] = {
|
|
284
|
+
|
|
285
|
+
:description => ( method.xpath( 'description' ).first.content rescue "" ),
|
|
286
|
+
:example => ( method.xpath( 'example' ).first.content rescue "" )
|
|
287
|
+
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
# create and store beahaviour hash
|
|
293
|
+
@@behaviours << {
|
|
294
|
+
|
|
295
|
+
:name => name,
|
|
296
|
+
:requires => root_attributes[ "plugin" ].to_s.split(";"),
|
|
297
|
+
:object_type => object_type.split(";"),
|
|
298
|
+
:input_type => input_type.split(";"),
|
|
299
|
+
:sut_type => sut_type.split(";"),
|
|
300
|
+
:version => version.split(";"),
|
|
301
|
+
|
|
302
|
+
:module => {
|
|
303
|
+
:file => module_file,
|
|
304
|
+
:name => module_name
|
|
305
|
+
},
|
|
306
|
+
|
|
307
|
+
:methods => methods_hash
|
|
308
|
+
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
def get_object_behaviours( rules )
|
|
318
|
+
|
|
319
|
+
# calculate hash for behaviour rules / hash value will be used to identify similar objects
|
|
320
|
+
behaviour_hash = Hash[ rules.select{ | key, value | key != :object } ].hash
|
|
321
|
+
|
|
322
|
+
if @@behaviours_cache.has_key?( behaviour_hash )
|
|
323
|
+
|
|
324
|
+
# retrieve behaviour module indexes from cache
|
|
325
|
+
@@behaviours_cache[ behaviour_hash ]
|
|
326
|
+
|
|
327
|
+
else
|
|
328
|
+
|
|
329
|
+
rules.default = [ '*' ]
|
|
330
|
+
|
|
331
|
+
extended_modules = []
|
|
332
|
+
|
|
333
|
+
@@behaviours.each_with_index{ | behaviour, index |
|
|
334
|
+
|
|
335
|
+
if ( ( rules[ :name ] == behaviour[ :name ] ) ||
|
|
336
|
+
|
|
337
|
+
( rules[ :name ] == [ '*' ] &&
|
|
338
|
+
|
|
339
|
+
( !( rules[ :sut_type ] & behaviour[ :sut_type ] ).empty? ) &&
|
|
340
|
+
( !( rules[ :object_type ] & behaviour[ :object_type ] ).empty? ) &&
|
|
341
|
+
( !( rules[ :input_type ] & behaviour[ :input_type ] ).empty? ) &&
|
|
342
|
+
( !( rules[ :version ] & behaviour[ :version ] ).empty? ) ) )
|
|
343
|
+
|
|
344
|
+
# retrieve list of extended modules
|
|
345
|
+
extended_modules << index
|
|
346
|
+
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
# store behaviour module indexes to cache
|
|
352
|
+
@@behaviours_cache[ behaviour_hash ] = extended_modules
|
|
353
|
+
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
def get_behaviour_from_cache( target, sut_type, object_type, sut_version, input_type )
|
|
359
|
+
|
|
360
|
+
if @_behaviour_cache.has_key?( object_type )
|
|
361
|
+
|
|
362
|
+
# apply modules to target object
|
|
363
|
+
@_behaviour_cache[ object_type ].each{ | module_name | target.instance_eval( "self.extend(#{ module_name })" ) }
|
|
364
|
+
|
|
365
|
+
# return true
|
|
366
|
+
true
|
|
367
|
+
|
|
368
|
+
else
|
|
369
|
+
# return false
|
|
370
|
+
false
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
# enable hooking for performance measurement & debug logging
|
|
376
|
+
MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
|
|
377
|
+
|
|
378
|
+
end # BehaviourGenerator
|
|
379
|
+
|
|
380
|
+
end # MobyBase
|