testability-driver 1.0.3 → 1.0.4
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/lib/tdriver-devtools/behaviour/xml/rdoc_behaviour_xml_generator.rb +2 -2
- data/lib/tdriver-devtools/tdriver-devtools.rb +1 -1
- data/lib/tdriver-devtools/tests/feature_tests/lib/custom_rdoc_generator.rb +3 -3
- data/lib/tdriver/base/behaviour/behaviours/object_behaviour_composition.rb +6 -1
- data/lib/tdriver/base/behaviour/behaviours/object_behaviour_description.rb +5 -3
- data/lib/tdriver/base/behaviour/behaviours/object_composition.rb +1 -1
- data/lib/tdriver/base/behaviour/factory.rb +225 -225
- data/lib/tdriver/base/errors.rb +1 -1
- data/lib/tdriver/base/state_object.rb +227 -179
- data/lib/tdriver/base/sut/controller.rb +2 -2
- data/lib/tdriver/base/sut/factory.rb +190 -182
- data/lib/tdriver/base/sut/generic/behaviours/application.rb +69 -25
- data/lib/tdriver/base/sut/generic/behaviours/controller.rb +1 -1
- data/lib/tdriver/base/sut/generic/behaviours/find.rb +4 -4
- data/lib/tdriver/base/sut/generic/behaviours/flash_behaviour.rb +3 -3
- data/lib/tdriver/base/sut/generic/behaviours/sut.rb +350 -165
- data/lib/tdriver/base/sut/generic/behaviours/switchbox_behaviour.rb +9 -9
- data/lib/tdriver/base/sut/generic/behaviours/verification.rb +191 -103
- data/lib/tdriver/base/sut/generic/commands/application.rb +1 -1
- data/lib/tdriver/base/sut/generic/commands/key_sequence.rb +1 -1
- data/lib/tdriver/base/sut/generic/commands/screen_capture.rb +1 -1
- data/lib/tdriver/base/sut/generic/plugin.rb +1 -1
- data/lib/tdriver/base/sut/sut.rb +5 -1
- data/lib/tdriver/base/test_object/abstract.rb +136 -151
- data/lib/tdriver/base/test_object/adapter.rb +293 -82
- data/lib/tdriver/base/test_object/behaviours/syncronization.rb +20 -17
- data/lib/tdriver/base/test_object/behaviours/test_object.rb +159 -532
- data/lib/tdriver/base/test_object/cache.rb +1 -1
- data/lib/tdriver/base/test_object/factory.rb +254 -605
- data/lib/tdriver/base/test_object/identificator.rb +1 -1
- data/lib/tdriver/base/test_object/loader.rb +1 -1
- data/lib/tdriver/base/test_object/verification.rb +17 -17
- data/lib/tdriver/loader.rb +20 -9
- data/lib/tdriver/report/report.rb +5 -0
- data/lib/tdriver/report/report_creator.rb +2 -2
- data/lib/tdriver/report/report_cucumber_listener.rb +4 -4
- data/lib/tdriver/report/report_cucumber_reporter.rb +4 -4
- data/lib/tdriver/report/report_execution_statistics.rb +22 -22
- data/lib/tdriver/report/report_grouping.rb +2 -2
- data/lib/tdriver/report/report_javascript.rb +11 -4
- data/lib/tdriver/report/report_test_case_run.rb +2 -2
- data/lib/tdriver/report/report_test_run.rb +5 -5
- data/lib/tdriver/report/report_test_unit.rb +74 -26
- data/lib/tdriver/report/report_writer.rb +70 -13
- data/lib/tdriver/tdriver.rb +17 -8
- data/lib/tdriver/util/common/array.rb +1 -1
- data/lib/tdriver/util/common/crc16.rb +1 -1
- data/lib/tdriver/util/common/environment.rb +1 -1
- data/lib/tdriver/util/common/file.rb +18 -9
- data/lib/tdriver/util/common/gem.rb +1 -1
- data/lib/tdriver/util/common/hash.rb +21 -0
- data/lib/tdriver/util/common/kernel.rb +1 -1
- data/lib/tdriver/util/common/loader.rb +5 -2
- data/lib/tdriver/util/common/numeric.rb +54 -3
- data/lib/tdriver/util/common/retryable.rb +30 -12
- data/lib/tdriver/util/common/stackable.rb +185 -0
- data/lib/tdriver/util/common/string.rb +21 -5
- data/lib/tdriver/util/{dbaccess/dbaccess.rb → database/access.rb} +4 -1
- data/lib/tdriver/util/{dbaccess/dbconnection.rb → database/connection.rb} +3 -0
- data/lib/tdriver/util/{dbaccess → database}/error.rb +0 -1
- data/lib/tdriver/util/{dbaccess → database}/loader.rb +5 -6
- data/lib/tdriver/util/{dynamic_attribute_filter.rb → filters/dynamic_attributes.rb} +1 -1
- data/lib/tdriver/util/hooking/hooking.rb +477 -0
- data/lib/tdriver/util/loader.rb +35 -29
- data/lib/tdriver/util/localisation/error.rb +0 -1
- data/lib/tdriver/util/localisation/loader.rb +1 -4
- data/lib/tdriver/util/localisation/localisation.rb +30 -27
- data/lib/tdriver/util/{common.rb → logger/loader.rb} +2 -4
- data/lib/tdriver/util/logger/logger.rb +574 -0
- data/lib/tdriver/util/operator_data/loader.rb +4 -3
- data/lib/tdriver/util/operator_data/operator_data.rb +5 -5
- data/lib/tdriver/util/parameter/parameter.rb +7 -1
- data/lib/tdriver/util/parameter/parameter_hash.rb +1 -1
- data/lib/tdriver/util/parameter/parameter_template.rb +1 -1
- data/lib/tdriver/util/parameter/parameter_user_api.rb +28 -20
- data/lib/tdriver/util/parameter/parameter_xml.rb +1 -1
- data/lib/tdriver/util/plugin/abstract.rb +1 -1
- data/lib/tdriver/util/plugin/service.rb +1 -1
- data/lib/tdriver/util/{localisation.rb → recorder/loader.rb} +4 -3
- data/lib/tdriver/util/recorder/recorder.rb +66 -0
- data/lib/tdriver/util/recorder/scripter.rb +258 -0
- data/lib/tdriver/util/{stats.rb → statistics/statistics.rb} +7 -8
- data/lib/tdriver/util/user_data/error.rb +0 -1
- data/lib/tdriver/util/user_data/loader.rb +1 -2
- data/lib/tdriver/util/user_data/user_data.rb +6 -6
- data/lib/tdriver/util/video/camera.rb +67 -0
- data/lib/tdriver/util/video/camera_linux.rb +139 -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 +56 -5
- data/lib/tdriver/util/xml/builder.rb +2 -5
- data/lib/tdriver/util/{parameter.rb → xml/comment.rb} +10 -2
- data/lib/tdriver/util/xml/loader.rb +32 -22
- data/lib/tdriver/util/xml/nil_node.rb +2 -2
- data/lib/tdriver/util/xml/parsers/loader.rb +0 -1
- data/lib/tdriver/util/xml/parsers/nokogiri/abstraction.rb +18 -44
- data/lib/tdriver/util/xml/parsers/nokogiri/attribute.rb +9 -13
- data/lib/tdriver/util/xml/parsers/nokogiri/builder.rb +9 -3
- data/lib/tdriver/util/xml/parsers/nokogiri/comment.rb +39 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/document.rb +6 -11
- data/lib/tdriver/util/xml/parsers/nokogiri/element.rb +2 -122
- data/lib/tdriver/util/xml/parsers/nokogiri/loader.rb +26 -16
- data/lib/tdriver/util/xml/parsers/nokogiri/node.rb +203 -0
- data/lib/tdriver/util/xml/parsers/nokogiri/nodeset.rb +1 -2
- data/lib/tdriver/util/xml/parsers/nokogiri/text.rb +2 -20
- data/lib/tdriver/util/xml/xml.rb +52 -20
- data/lib/tdriver/verify/verify.rb +238 -81
- data/xml/behaviours/generic.xml +12 -10
- metadata +156 -180
- data/lib/tdriver/base/test_object/factory_new.rb +0 -202
- data/lib/tdriver/util/hooking.rb +0 -434
- data/lib/tdriver/util/logger.rb +0 -506
- data/lib/tdriver/util/recorder.rb +0 -297
- data/lib/tdriver/util/video_utils.rb +0 -384
- data/lib/tdriver/util/xml/nil_element.rb +0 -89
|
@@ -86,12 +86,6 @@ module MobyBehaviour
|
|
|
86
86
|
#
|
|
87
87
|
def wait_child( attributes = {}, timeout_secs = 10, retry_interval = 0.5 )
|
|
88
88
|
|
|
89
|
-
#Kernel::raise ArgumentError.new( "Argument attributes was not a valid. Expected: Hash" ) unless attributes.kind_of?( Hash )
|
|
90
|
-
#Kernel::raise ArgumentError.new( "Argument type was not a valid. Expected: String" ) unless attributes[ :type ].kind_of?( String ) && attributes[ :type ].length > 0
|
|
91
|
-
#Kernel::raise ArgumentError.new( "Argument timeout_secs was not a valid. Expected: Integer, Fixnum or Float" ) unless [ Integer, Fixnum, Float ].include? timeout_secs.class
|
|
92
|
-
#Kernel::raise ArgumentError.new( "Argument retry_interval was not a valid. Expected: Integer, Fixnum or Float" ) unless [ Integer, Fixnum, Float ].include? retry_interval.class
|
|
93
|
-
|
|
94
|
-
|
|
95
89
|
# verify that attributes is type of Hash
|
|
96
90
|
attributes.check_type( Hash, "Wrong argument type $1 for attributes (expected $2)" )
|
|
97
91
|
|
|
@@ -108,20 +102,29 @@ module MobyBehaviour
|
|
|
108
102
|
retry_interval.check_type( [ Integer, Fixnum, Float ], "Wrong argument type $1 for retry interval (expected $2)" )
|
|
109
103
|
|
|
110
104
|
begin
|
|
105
|
+
|
|
106
|
+
dynamic_attributes = attributes.strip_dynamic_attributes!
|
|
107
|
+
|
|
108
|
+
# try to identify desired child test object
|
|
109
|
+
@test_object_factory.identify_object(
|
|
110
|
+
:object_attributes_hash => attributes,
|
|
111
|
+
:identification_directives => dynamic_attributes.default_values(
|
|
112
|
+
:__timeout => timeout_secs,
|
|
113
|
+
:__retry_interval => retry_interval,
|
|
114
|
+
:__refresh_arguments => self.kind_of?( MobyBase::SUT ) ? attributes : { :id => self.get_application_id }
|
|
115
|
+
),
|
|
116
|
+
:parent => self
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
rescue MobyBase::TestObjectNotFoundError
|
|
111
120
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
#self.refresh( attributes )
|
|
115
|
-
|
|
116
|
-
self.refresh( self.kind_of?( MobyBase::SUT ) ? attributes : { :id => self.get_application_id } )
|
|
121
|
+
# the child object was not found in the specified timeout
|
|
122
|
+
raise MobyBase::SyncTimeoutError, "Synchronization timed out (#{ timeout_secs }) before the defined child object could be found."
|
|
117
123
|
|
|
118
|
-
|
|
124
|
+
rescue # unexpected errors
|
|
119
125
|
|
|
120
|
-
}
|
|
121
|
-
rescue
|
|
126
|
+
raise RuntimeError, "Synchronization failed due to #{ $!.message } (#{ $!.class })"
|
|
122
127
|
|
|
123
|
-
# the child object was not found in the specified timeout
|
|
124
|
-
Kernel::raise MobyBase::SyncTimeoutError.new( "Synchronization timed out (%i) before the defined child object could be found." % timeout_secs )
|
|
125
128
|
end
|
|
126
129
|
|
|
127
130
|
self
|
|
@@ -129,7 +132,7 @@ module MobyBehaviour
|
|
|
129
132
|
end
|
|
130
133
|
|
|
131
134
|
# enable hooking for performance measurement & debug logging
|
|
132
|
-
|
|
135
|
+
TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
|
|
133
136
|
|
|
134
137
|
end # TDriverSyncronization
|
|
135
138
|
|
|
@@ -51,6 +51,16 @@ module MobyBehaviour
|
|
|
51
51
|
# example: { :name => 'Triangle1', :type => :Triangle }
|
|
52
52
|
attr_accessor :creation_attributes
|
|
53
53
|
|
|
54
|
+
=begin
|
|
55
|
+
# == nodoc
|
|
56
|
+
# == description
|
|
57
|
+
# attr_reader
|
|
58
|
+
# == returns
|
|
59
|
+
# Hash
|
|
60
|
+
# description: Parent application test object
|
|
61
|
+
# example: <MobyBase::TestObject>
|
|
62
|
+
attr_reader :parent_application
|
|
63
|
+
=end
|
|
54
64
|
|
|
55
65
|
# == nodoc
|
|
56
66
|
# == description
|
|
@@ -89,12 +99,24 @@ module MobyBehaviour
|
|
|
89
99
|
# attributes_hash = @test_app.Triangle( :name => 'Triangle1' ).attributes # retrieve all attribute for triangle object
|
|
90
100
|
def attributes
|
|
91
101
|
|
|
102
|
+
# retrieve sut parameters
|
|
103
|
+
sut_parameters = $parameters[ @sut.id ]
|
|
104
|
+
|
|
105
|
+
# retrieve sut attribute filter type
|
|
106
|
+
filter_type = sut_parameters[ :filter_type, 'none' ]
|
|
107
|
+
|
|
108
|
+
# temporarly disable attribute filter to retrieve all test object attributes
|
|
109
|
+
sut_parameters[ :filter_type ] = 'none'
|
|
110
|
+
|
|
92
111
|
begin
|
|
93
112
|
|
|
113
|
+
# raise exception to refresh test object ui state if filter_type was something else than 'none'
|
|
114
|
+
raise MobyBase::TestObjectNotFoundError unless filter_type == 'none'
|
|
115
|
+
|
|
94
116
|
# retrieve xml data, performs xpath to sut xml_data
|
|
95
117
|
_xml_data = xml_data
|
|
96
118
|
|
|
97
|
-
rescue MobyBase::TestObjectNotFoundError
|
|
119
|
+
rescue MobyBase::TestObjectNotFoundError
|
|
98
120
|
|
|
99
121
|
# attributes used to refresh parent application
|
|
100
122
|
if @creation_attributes[ :type ] == 'application'
|
|
@@ -115,6 +137,11 @@ module MobyBehaviour
|
|
|
115
137
|
# retrieve updated xml data
|
|
116
138
|
_xml_data = xml_data
|
|
117
139
|
|
|
140
|
+
ensure
|
|
141
|
+
|
|
142
|
+
# restore attributes filter type
|
|
143
|
+
sut_parameters[ :filter_type ] = filter_type
|
|
144
|
+
|
|
118
145
|
end
|
|
119
146
|
|
|
120
147
|
# return hash of test object attributes
|
|
@@ -151,8 +178,8 @@ module MobyBehaviour
|
|
|
151
178
|
# TODO: add behaviour logging?
|
|
152
179
|
|
|
153
180
|
# raise exception if attribute name variable type is other than string
|
|
154
|
-
name.check_type( [ String, Symbol ], "Wrong argument type
|
|
155
|
-
|
|
181
|
+
name.check_type( [ String, Symbol ], "Wrong argument type $1 for attribute (expected $2)" )
|
|
182
|
+
|
|
156
183
|
# convert name to string if variable type is symbol
|
|
157
184
|
name = name.to_s if name.kind_of?( Symbol )
|
|
158
185
|
|
|
@@ -214,90 +241,9 @@ module MobyBehaviour
|
|
|
214
241
|
enable_optimizer
|
|
215
242
|
|
|
216
243
|
parent
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
=begin
|
|
220
|
-
|
|
221
|
-
# return current test object if it's type of application
|
|
222
|
-
return self if application?
|
|
223
|
-
|
|
224
|
-
@sut.refresh if disable_optimizer
|
|
225
|
-
|
|
226
|
-
# find parent id
|
|
227
|
-
element_set = @sut.xml_data.xpath( "//object/objects/object[@id='#{ @id }']/../.." )
|
|
228
|
-
|
|
229
|
-
kid = nil
|
|
230
|
-
|
|
231
|
-
if( element_set == nil or element_set.size == 0 )
|
|
232
|
-
|
|
233
|
-
# return self if there is not parent object available
|
|
234
|
-
kid = self
|
|
235
|
-
|
|
236
|
-
else
|
|
237
|
-
|
|
238
|
-
element = element_set.first
|
|
239
|
-
|
|
240
|
-
#if app set look for the item under the app to make sure app id is available
|
|
241
|
-
|
|
242
|
-
if self.get_application_id && element.attribute( "type" ) != 'application'
|
|
243
|
-
|
|
244
|
-
kid = @sut.child(
|
|
245
|
-
:id => get_application_id,
|
|
246
|
-
:type => 'application'
|
|
247
|
-
).child(
|
|
248
|
-
:id => element.attribute( "id" ),
|
|
249
|
-
:name => element.attribute( "name" ),
|
|
250
|
-
:type => element.attribute( "type" ),
|
|
251
|
-
:__index => 0 # there was a case when the same parent was included twice in the ui dump
|
|
252
|
-
)
|
|
253
|
-
|
|
254
|
-
else
|
|
255
|
-
|
|
256
|
-
kid = @sut.child(
|
|
257
|
-
:id => element.attribute( "id" ),
|
|
258
|
-
:name => element.attribute( "name" ),
|
|
259
|
-
:type => element.attribute( "type" )
|
|
260
|
-
)
|
|
261
|
-
|
|
262
|
-
end
|
|
263
|
-
|
|
264
|
-
end
|
|
265
|
-
|
|
266
|
-
enable_optimizer
|
|
267
|
-
|
|
268
|
-
kid
|
|
269
|
-
=end
|
|
270
244
|
|
|
271
245
|
end
|
|
272
246
|
|
|
273
|
-
# == nodoc
|
|
274
|
-
# Updates this test object to match the data in the provided xml document
|
|
275
|
-
# Propagates updating to all child TestObjects
|
|
276
|
-
# If TestObject is not identified, then current TO is deactivated, as is all the Child objects, as defined in TestObject#deactivate.
|
|
277
|
-
# === params
|
|
278
|
-
# xml_document:: LibXML::XML::Node describing the new state of this test object
|
|
279
|
-
# === returns
|
|
280
|
-
# ?
|
|
281
|
-
# === raises
|
|
282
|
-
# nothing
|
|
283
|
-
def update( xml_document )
|
|
284
|
-
|
|
285
|
-
begin
|
|
286
|
-
|
|
287
|
-
if !( _xml_data = MobyBase::TestObjectIdentificator.new( :type => @type, :id => @id, :name => @name ).find_object_data( xml_document ) ).eql?( xml_data )
|
|
288
|
-
|
|
289
|
-
@_child_objects.each { | test_object | test_object.update( ( xml_data = _xml_data ) ) }
|
|
290
|
-
|
|
291
|
-
end
|
|
292
|
-
|
|
293
|
-
rescue MobyBase::TestObjectNotFoundError, MobyBase::MultipleTestObjectsIdentifiedError
|
|
294
|
-
|
|
295
|
-
deactivate
|
|
296
|
-
|
|
297
|
-
end
|
|
298
|
-
|
|
299
|
-
end
|
|
300
|
-
|
|
301
247
|
# == nodoc
|
|
302
248
|
# Function refreshes test objects to correspond with the current state of the device.
|
|
303
249
|
#
|
|
@@ -309,13 +255,7 @@ module MobyBehaviour
|
|
|
309
255
|
# TestObjectNotFoundError:: if TestObject is not identified within synch timeout.
|
|
310
256
|
def refresh( refresh_args = {} )
|
|
311
257
|
|
|
312
|
-
@sut.refresh(
|
|
313
|
-
|
|
314
|
-
refresh_args,
|
|
315
|
-
|
|
316
|
-
@test_object_factory.get_parent_params( parent ) << @test_object_factory.make_object_search_params( @creation_attributes )
|
|
317
|
-
|
|
318
|
-
)
|
|
258
|
+
@sut.refresh( refresh_args, @test_object_factory.make_object_search_params( parent, @creation_attributes ) )
|
|
319
259
|
|
|
320
260
|
end
|
|
321
261
|
|
|
@@ -331,7 +271,7 @@ module MobyBehaviour
|
|
|
331
271
|
# TestObjectNotFoundError:: if TestObject is not identified within synch timeout.
|
|
332
272
|
def force_refresh( refresh_args = {} )
|
|
333
273
|
|
|
334
|
-
refresh(refresh_args)
|
|
274
|
+
refresh( refresh_args )
|
|
335
275
|
|
|
336
276
|
end
|
|
337
277
|
|
|
@@ -345,6 +285,10 @@ module MobyBehaviour
|
|
|
345
285
|
# parent_app = @app.Node( :name => 'Node1' ).get_application() #get application for some test object, this should return @app.
|
|
346
286
|
def get_application
|
|
347
287
|
|
|
288
|
+
# test object should have @parent_application always
|
|
289
|
+
return @parent_application if @parent_application
|
|
290
|
+
|
|
291
|
+
# workaround: fetch application from sut, this part of code should not be executed ever
|
|
348
292
|
return self if application?
|
|
349
293
|
|
|
350
294
|
test_object = @parent
|
|
@@ -359,7 +303,6 @@ module MobyBehaviour
|
|
|
359
303
|
|
|
360
304
|
# return application object or nil if no parent found
|
|
361
305
|
# Does is make sense to return nil - should n't all test objects belong to an application? Maybe throw exception if application not found
|
|
362
|
-
|
|
363
306
|
return @sut.child( :type => 'application' ) rescue nil
|
|
364
307
|
|
|
365
308
|
end
|
|
@@ -373,8 +316,10 @@ module MobyBehaviour
|
|
|
373
316
|
# puts @app.Node( :name => 'Node1' ).get_application_id() #print the application id, this should print @app.id
|
|
374
317
|
def get_application_id
|
|
375
318
|
|
|
376
|
-
return @
|
|
377
|
-
|
|
319
|
+
return @parent_application.id if @parent_application
|
|
320
|
+
|
|
321
|
+
# workaround
|
|
322
|
+
# What about the case when get_application returns nil? This line will throw an exception in that case.
|
|
378
323
|
get_application.id
|
|
379
324
|
|
|
380
325
|
end
|
|
@@ -406,174 +351,6 @@ module MobyBehaviour
|
|
|
406
351
|
|
|
407
352
|
end
|
|
408
353
|
|
|
409
|
-
# == nodoc
|
|
410
|
-
# == description
|
|
411
|
-
# Translates all symbol values in hash using SUT's translate method.
|
|
412
|
-
#
|
|
413
|
-
# == arguments
|
|
414
|
-
# hash
|
|
415
|
-
# Hash
|
|
416
|
-
# description: containing key and value pairs. The hash will get modified if symbols are found from values
|
|
417
|
-
# example: {:text=>:translate_me}
|
|
418
|
-
#
|
|
419
|
-
# == returns
|
|
420
|
-
# Hash
|
|
421
|
-
# description: Translated hash
|
|
422
|
-
# example: {:text=>'translated_text'}
|
|
423
|
-
# == exceptions
|
|
424
|
-
# LanguageNotFoundError
|
|
425
|
-
# description: In case of language is not found
|
|
426
|
-
#
|
|
427
|
-
# LogicalNameNotFoundError
|
|
428
|
-
# description: In case of logical name is not found for current language
|
|
429
|
-
#
|
|
430
|
-
# MySqlConnectError
|
|
431
|
-
# description: In case problems with the db connectivity
|
|
432
|
-
#
|
|
433
|
-
def translate!( hash, file_name = nil, plurality = nil, numerus = nil, lengthvariant = nil )
|
|
434
|
-
|
|
435
|
-
hash.each_pair do | _key, _value |
|
|
436
|
-
|
|
437
|
-
next if [ :name, :type, :id ].include?( _key )
|
|
438
|
-
|
|
439
|
-
hash[ _key ] = sut.translate( _value, file_name, plurality, numerus, lengthvariant ) if _value.kind_of?( Symbol )
|
|
440
|
-
|
|
441
|
-
end if !hash.nil?
|
|
442
|
-
|
|
443
|
-
end
|
|
444
|
-
|
|
445
|
-
=begin
|
|
446
|
-
# == description
|
|
447
|
-
# Creates a child test object of this test object. Caller object will be associated as child test objects parent.\n
|
|
448
|
-
# \n
|
|
449
|
-
# [b]NOTE:[/b] Subsequent calls to TestObject#child( rule ) always returns reference to same Testobject:\n
|
|
450
|
-
# [code]a = to.child( :type => 'Button', :text => '1' )
|
|
451
|
-
# b = to.child( :type => 'Button', :text => '1' )
|
|
452
|
-
# a.eql?( b ) # => true[/code]
|
|
453
|
-
# == arguments
|
|
454
|
-
# attributes
|
|
455
|
-
# Hash
|
|
456
|
-
# description: Hash object holding information for identifying which child to create
|
|
457
|
-
# example: { :type => :slider }
|
|
458
|
-
#
|
|
459
|
-
# == returns
|
|
460
|
-
# MobyBase::TestObject
|
|
461
|
-
# description: new child test object or reference to existing child
|
|
462
|
-
# example: -
|
|
463
|
-
#
|
|
464
|
-
# == exceptions
|
|
465
|
-
# TypeError
|
|
466
|
-
# description: Wrong argument type %s for attributes (expected Hash)
|
|
467
|
-
#
|
|
468
|
-
# MultipleTestObjectsIdentifiedError
|
|
469
|
-
# description: raised if multiple objects found that match the given attributes
|
|
470
|
-
#
|
|
471
|
-
# TestObjectNotFoundError
|
|
472
|
-
# description: raised if the child object could not be found
|
|
473
|
-
#
|
|
474
|
-
# TestObjectNotVisibleError
|
|
475
|
-
# description: rasied if the parent test object is no longer visible
|
|
476
|
-
def child( attributes )
|
|
477
|
-
|
|
478
|
-
# verify attributes argument format
|
|
479
|
-
#raise TypeError.new( 'Unexpected argument type (%s) for attributes, expecting %s' % [ attributes.class, "Hash" ] ) unless attributes.kind_of?( Hash )
|
|
480
|
-
attributes.check_type( Hash, "Wrong argument type $1 for attributes (expected $2)" )
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
# retrieve child object
|
|
484
|
-
get_child_objects( attributes )
|
|
485
|
-
|
|
486
|
-
end
|
|
487
|
-
|
|
488
|
-
def child( attributes )
|
|
489
|
-
|
|
490
|
-
###############################################################################################################
|
|
491
|
-
#
|
|
492
|
-
# NOTICE: Please do not add anything unnessecery to this method, it might cause a major performance impact
|
|
493
|
-
#
|
|
494
|
-
|
|
495
|
-
# verify attributes argument format
|
|
496
|
-
attributes.check_type( Hash, "Wrong argument type $1 for attributes (expected $2)" )
|
|
497
|
-
|
|
498
|
-
# store original hash
|
|
499
|
-
creation_hash = attributes.clone
|
|
500
|
-
|
|
501
|
-
dynamic_attributes = creation_hash.strip_dynamic_attributes!
|
|
502
|
-
|
|
503
|
-
# raise exception if wrong value type given for ;__logging
|
|
504
|
-
dynamic_attributes[ :__logging ].check_type(
|
|
505
|
-
|
|
506
|
-
[ TrueClass, FalseClass ],
|
|
507
|
-
|
|
508
|
-
"Wrong value type $1 for :__logging test object creation directive (expected $2)"
|
|
509
|
-
|
|
510
|
-
) if dynamic_attributes.has_key?( :__logging )
|
|
511
|
-
|
|
512
|
-
# disable logging if requested, remove pair from creation_hash
|
|
513
|
-
MobyUtil::Logger.instance.push_enabled( dynamic_attributes[ :__logging ] || TDriver.logger.enabled )
|
|
514
|
-
|
|
515
|
-
# check if the hash contains symbols as values and translate those into strings
|
|
516
|
-
translate!( creation_hash, attributes[ :__fname ], attributes[ :__plurality ], attributes[ :__numerus ], attributes[ :__lengthvariant ] )
|
|
517
|
-
|
|
518
|
-
begin
|
|
519
|
-
|
|
520
|
-
# TODO: refactor me
|
|
521
|
-
child_test_object = @test_object_factory.make_object(
|
|
522
|
-
|
|
523
|
-
# current object as parent, can be either TestObject or SUT
|
|
524
|
-
:parent => self,
|
|
525
|
-
|
|
526
|
-
# test object identification hash
|
|
527
|
-
:object_attributes_hash => creation_hash,
|
|
528
|
-
|
|
529
|
-
:identification_directives => dynamic_attributes
|
|
530
|
-
|
|
531
|
-
)
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
rescue Exception => exception
|
|
535
|
-
|
|
536
|
-
if exception.kind_of?( MobyBase::MultipleTestObjectsIdentifiedError )
|
|
537
|
-
|
|
538
|
-
description = "Multiple child objects matched criteria."
|
|
539
|
-
|
|
540
|
-
elsif exception.kind_of?( MobyBase::TestObjectNotFoundError )
|
|
541
|
-
|
|
542
|
-
description = "The child object(s) could not be found."
|
|
543
|
-
|
|
544
|
-
elsif exception.kind_of?( MobyBase::TestObjectNotVisibleError )
|
|
545
|
-
|
|
546
|
-
description = "Parent test object no longer visible."
|
|
547
|
-
|
|
548
|
-
else
|
|
549
|
-
|
|
550
|
-
description = "Failed when trying to find child object(s)."
|
|
551
|
-
|
|
552
|
-
end
|
|
553
|
-
|
|
554
|
-
TDriver.logger.behaviour(
|
|
555
|
-
|
|
556
|
-
"%s;%s;%s;%s;%s" % [ "FAIL", description, identity, dynamic_attributes[ :__multiple_objects ] ? "children" : "child", attributes.inspect ]
|
|
557
|
-
|
|
558
|
-
)
|
|
559
|
-
|
|
560
|
-
Kernel::raise exception
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
ensure
|
|
564
|
-
|
|
565
|
-
# restore original logger state
|
|
566
|
-
MobyUtil::Logger.instance.pop_enabled
|
|
567
|
-
|
|
568
|
-
end
|
|
569
|
-
|
|
570
|
-
# return child test object
|
|
571
|
-
child_test_object
|
|
572
|
-
|
|
573
|
-
end
|
|
574
|
-
|
|
575
|
-
=end
|
|
576
|
-
|
|
577
354
|
# == description
|
|
578
355
|
# Creates a child test object of this test object. Caller object will be associated as child test objects parent.\n
|
|
579
356
|
# \n
|
|
@@ -652,150 +429,166 @@ module MobyBehaviour
|
|
|
652
429
|
# verify find_all_children argument format
|
|
653
430
|
find_all_children.check_type( [ TrueClass, FalseClass ], "Wrong argument type $1 for find_all_children (expected $2)" )
|
|
654
431
|
|
|
655
|
-
# If empty or only special attributes then add :type =>
|
|
656
|
-
attributes
|
|
432
|
+
# If empty or only special attributes then add :type => '*' to search all
|
|
433
|
+
attributes[ :type ] = '*' if attributes.select{ | key, value | key.to_s !~ /^__/ ? true : false }.empty?
|
|
657
434
|
|
|
658
435
|
# children method specific settings
|
|
659
436
|
attributes.merge!( :__multiple_objects => true, :__find_all_children => find_all_children )
|
|
660
437
|
|
|
661
438
|
# disable optimizer state if enabled
|
|
662
|
-
|
|
439
|
+
disable_optimizer
|
|
663
440
|
|
|
664
441
|
# retrieve child objects
|
|
665
442
|
result = get_child_objects( attributes )
|
|
666
443
|
|
|
667
444
|
# restore optimizer state if it was enabled
|
|
668
|
-
|
|
445
|
+
enable_optimizer
|
|
669
446
|
|
|
670
447
|
# return results
|
|
671
448
|
result
|
|
672
449
|
|
|
673
450
|
end
|
|
674
451
|
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
=begin
|
|
685
|
-
# == description
|
|
686
|
-
# Function similar to child, but returns an array of children test objects that meet the given criteria
|
|
687
|
-
#
|
|
688
|
-
# == arguments
|
|
689
|
-
# attributes
|
|
690
|
-
# Hash
|
|
691
|
-
# description: object holding information for identifying which child to create
|
|
692
|
-
# example: { :type => :slider }
|
|
693
|
-
#
|
|
694
|
-
# find_all_children
|
|
695
|
-
# TrueClass
|
|
696
|
-
# description: Boolean specifying whether all children under the test node or just immediate children should be retreived
|
|
697
|
-
# example: true
|
|
698
|
-
# FalseClass
|
|
699
|
-
# description: Boolean specifying whether all children under the test node or just immediate children should be retreived
|
|
700
|
-
# example: false
|
|
701
|
-
#
|
|
702
|
-
# == returns
|
|
703
|
-
# Array
|
|
704
|
-
# description: An array of test objects
|
|
705
|
-
# example: [ MobyBase::TestObject, MobyBase::TestObject, MobyBase::TestObject, ... ]
|
|
706
|
-
#
|
|
707
|
-
# == exceptions
|
|
708
|
-
# TypeError
|
|
709
|
-
# description: raised if agument is not a Hash
|
|
710
|
-
#
|
|
711
|
-
# TestObjectNotFoundError
|
|
712
|
-
# description: raised if the child object could not be found
|
|
713
|
-
#
|
|
714
|
-
# TestObjectNotVisibleError
|
|
715
|
-
# description: rasied if the parent test object is no longer visible
|
|
716
|
-
def children( attributes, find_all_children = true )
|
|
452
|
+
private
|
|
717
453
|
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
454
|
+
# == nodoc
|
|
455
|
+
# Updates this test object to match the data in the provided xml document
|
|
456
|
+
# Propagates updating to all child TestObjects
|
|
457
|
+
# If TestObject is not identified, then current TO is deactivated, as is all the Child objects, as defined in TestObject#deactivate.
|
|
458
|
+
# === params
|
|
459
|
+
# xml_document:: MobyUtil::XML::Node describing the new state of this test object
|
|
460
|
+
# === returns
|
|
461
|
+
# ?
|
|
462
|
+
# === raises
|
|
463
|
+
# nothing
|
|
464
|
+
def update( xml_document )
|
|
721
465
|
|
|
722
|
-
|
|
466
|
+
begin
|
|
723
467
|
|
|
724
|
-
|
|
725
|
-
|
|
468
|
+
# find object from new xml data
|
|
469
|
+
_xml_data, unused_rule = TDriver::TestObjectAdapter.get_objects( xml_document, { :type => @type, :id => @id, :name => @name }, true )
|
|
470
|
+
|
|
471
|
+
# deactivate if test object not found or multiple matches found
|
|
472
|
+
raise unless _xml_data.count == 1
|
|
726
473
|
|
|
727
|
-
|
|
728
|
-
|
|
474
|
+
# get first matching element
|
|
475
|
+
_xml_data = _xml_data.first
|
|
729
476
|
|
|
730
|
-
|
|
731
|
-
creation_attributes.merge!( :__multiple_objects => true, :__find_all_children => find_all_children )
|
|
477
|
+
#unless _xml_data.eql?( xml_data )
|
|
732
478
|
|
|
733
|
-
|
|
479
|
+
# store previous object environment value
|
|
480
|
+
previous_environment = @env
|
|
734
481
|
|
|
735
|
-
|
|
736
|
-
|
|
482
|
+
# update current test objects xml_data
|
|
483
|
+
__send__( :xml_data=, _xml_data )
|
|
737
484
|
|
|
738
|
-
|
|
485
|
+
# compare new environment value with previous
|
|
486
|
+
if @env != previous_environment
|
|
739
487
|
|
|
740
|
-
|
|
488
|
+
# reapply behaviours to test object if environment value has changed
|
|
489
|
+
MobyBase::BehaviourFactory.instance.apply_behaviour!(
|
|
741
490
|
|
|
742
|
-
|
|
743
|
-
|
|
491
|
+
:object => self,
|
|
492
|
+
:object_type => [ '*', @type ],
|
|
493
|
+
:input_type => [ '*', @sut.input.to_s ],
|
|
494
|
+
:env => [ '*', *@env.to_s.split(";") ],
|
|
495
|
+
:version => [ '*', @sut.ui_version.to_s ]
|
|
744
496
|
|
|
745
|
-
|
|
497
|
+
)
|
|
498
|
+
|
|
499
|
+
end
|
|
500
|
+
|
|
501
|
+
# update child objects
|
|
502
|
+
@child_object_cache.each_object{ | test_object |
|
|
503
|
+
|
|
504
|
+
# update test object with new xml_data
|
|
505
|
+
#test_object.update( _xml_data )
|
|
506
|
+
test_object.send( :update, _xml_data )
|
|
507
|
+
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
#end
|
|
511
|
+
|
|
512
|
+
rescue
|
|
513
|
+
|
|
514
|
+
# deactivate test object
|
|
515
|
+
deactivate
|
|
516
|
+
|
|
517
|
+
end
|
|
518
|
+
|
|
519
|
+
end
|
|
746
520
|
|
|
747
521
|
# TODO: document me
|
|
748
|
-
|
|
522
|
+
def disable_optimizer
|
|
749
523
|
|
|
750
|
-
sut_parameters =
|
|
524
|
+
sut_parameters = $parameters[ @sut.id ]
|
|
751
525
|
|
|
752
|
-
|
|
753
|
-
|
|
526
|
+
# disable optimizer for this call since it will not work
|
|
527
|
+
@_enable_optimizer = false
|
|
754
528
|
|
|
755
|
-
|
|
529
|
+
if sut_parameters[ :use_find_object, 'false' ] == 'true' and @sut.respond_to?( 'find_object' )
|
|
756
530
|
|
|
757
|
-
|
|
531
|
+
sut_parameters[ :use_find_object ] = 'false'
|
|
758
532
|
|
|
759
|
-
|
|
533
|
+
@_enable_optimizer = true
|
|
760
534
|
|
|
761
|
-
|
|
535
|
+
end
|
|
762
536
|
|
|
763
|
-
|
|
537
|
+
@_enable_optimizer
|
|
764
538
|
|
|
765
|
-
|
|
539
|
+
end
|
|
766
540
|
|
|
767
541
|
# TODO: document me
|
|
768
|
-
|
|
542
|
+
def enable_optimizer
|
|
769
543
|
|
|
770
|
-
|
|
544
|
+
$parameters[ @sut.id ][ :use_find_object ] = 'true' if @_enable_optimizer
|
|
771
545
|
|
|
772
|
-
|
|
546
|
+
@_enable_optimizer = false
|
|
773
547
|
|
|
774
|
-
|
|
548
|
+
end
|
|
775
549
|
|
|
776
550
|
# TODO: document me
|
|
777
551
|
# Tries to use the missing method id as a child object type and find an object based on it
|
|
778
552
|
def method_missing( method_id, *method_arguments )
|
|
779
553
|
|
|
780
|
-
#
|
|
781
|
-
|
|
782
|
-
# when :Button; method_id = [ :Button, :QToolButton, :DuiButton, :HbPushButton, :softkey ]
|
|
783
|
-
# when :List; method_id = [ :QList, :HbListWidgetView, :DuiList ]
|
|
784
|
-
#end
|
|
554
|
+
# create rules hash
|
|
555
|
+
rules_hash = method_arguments.first
|
|
785
556
|
|
|
786
|
-
|
|
557
|
+
# set rules hash to empty Hash if rules hash is not type of Hash
|
|
558
|
+
rules_hash = {} unless rules_hash.kind_of?( Hash )
|
|
787
559
|
|
|
560
|
+
# set test object type
|
|
561
|
+
rules_hash[ :type ] = method_id #.to_s
|
|
562
|
+
|
|
788
563
|
begin
|
|
789
564
|
|
|
790
|
-
child
|
|
565
|
+
# return created child object
|
|
566
|
+
child( rules_hash )
|
|
791
567
|
|
|
792
568
|
rescue MobyBase::TestObjectNotFoundError, MobyBase::TestObjectNotVisibleError
|
|
793
569
|
|
|
794
|
-
|
|
570
|
+
rules_hash_clone = rules_hash.clone
|
|
571
|
+
|
|
572
|
+
rules_hash_clone.delete(:type)
|
|
795
573
|
|
|
574
|
+
# string representation of used rule hash, remove curly braces
|
|
575
|
+
attributes_string = rules_hash_clone.inspect[ 1 .. -2 ]
|
|
576
|
+
|
|
577
|
+
if attributes_string.empty?
|
|
578
|
+
|
|
579
|
+
# do not show any attribute details if none given
|
|
580
|
+
attributes_string = ""
|
|
581
|
+
|
|
582
|
+
else
|
|
583
|
+
|
|
584
|
+
# show used attributes
|
|
585
|
+
attributes_string = " (attributes #{ attributes_string })"
|
|
586
|
+
|
|
587
|
+
end
|
|
588
|
+
|
|
589
|
+
# raise exception
|
|
796
590
|
Kernel::raise MobyBase::TestObjectNotFoundError.new(
|
|
797
|
-
|
|
798
|
-
[ @id, @type, @name, method_id.inspect, ( hash_rule.empty? ? "" : "attributes: #{ hash_rule.inspect }" ), @sut.id ]
|
|
591
|
+
"The test object (id: #{ @id }, type: #{ @type.inspect }, name: #{ @name.inspect }) has no child object with type or behaviour method with name #{ method_id.to_s.inspect }#{ attributes_string } on #{ @sut.id.inspect }"
|
|
799
592
|
)
|
|
800
593
|
|
|
801
594
|
end
|
|
@@ -825,22 +618,26 @@ module MobyBehaviour
|
|
|
825
618
|
) if dynamic_attributes.has_key?( :__logging )
|
|
826
619
|
|
|
827
620
|
# disable logging if requested, remove pair from creation_hash
|
|
828
|
-
|
|
621
|
+
$logger.push_enabled( dynamic_attributes[ :__logging ] || TDriver.logger.enabled )
|
|
829
622
|
|
|
830
|
-
|
|
831
|
-
|
|
623
|
+
# check if the hash contains symbols as values and translate those into strings
|
|
624
|
+
@sut.translate_values!( creation_hash, attributes[ :__fname ], attributes[ :__plurality ], attributes[ :__numerus ], attributes[ :__lengthvariant ] )
|
|
832
625
|
|
|
833
626
|
begin
|
|
834
627
|
|
|
835
628
|
# TODO: refactor me
|
|
836
629
|
child_test_object = @test_object_factory.get_test_objects(
|
|
837
630
|
|
|
838
|
-
# current
|
|
631
|
+
# current objec t as parent, can be either TestObject or SUT
|
|
839
632
|
:parent => self,
|
|
840
633
|
|
|
634
|
+
# pass parent application
|
|
635
|
+
:parent_application => @parent_application,
|
|
636
|
+
|
|
841
637
|
# test object identification hash
|
|
842
638
|
:object_attributes_hash => creation_hash,
|
|
843
|
-
|
|
639
|
+
|
|
640
|
+
# pass test object identification directives, e.g. :__index
|
|
844
641
|
:identification_directives => dynamic_attributes
|
|
845
642
|
|
|
846
643
|
)
|
|
@@ -865,7 +662,7 @@ module MobyBehaviour
|
|
|
865
662
|
|
|
866
663
|
end
|
|
867
664
|
|
|
868
|
-
|
|
665
|
+
$logger.behaviour(
|
|
869
666
|
|
|
870
667
|
"%s;%s;%s;%s;%s" % [
|
|
871
668
|
"FAIL",
|
|
@@ -882,7 +679,7 @@ module MobyBehaviour
|
|
|
882
679
|
ensure
|
|
883
680
|
|
|
884
681
|
# restore original logger state
|
|
885
|
-
|
|
682
|
+
$logger.pop_enabled
|
|
886
683
|
|
|
887
684
|
end
|
|
888
685
|
|
|
@@ -923,7 +720,6 @@ module MobyBehaviour
|
|
|
923
720
|
|
|
924
721
|
end
|
|
925
722
|
|
|
926
|
-
|
|
927
723
|
# TODO: refactor logging_enabled
|
|
928
724
|
# try to reactivate test object if currently not active
|
|
929
725
|
def reactivate_test_object( attributes )
|
|
@@ -944,181 +740,12 @@ module MobyBehaviour
|
|
|
944
740
|
|
|
945
741
|
end
|
|
946
742
|
|
|
947
|
-
=begin
|
|
948
|
-
# Strip dynamic attributes (such as :__timeout, :__logging) from hash and return those as hash
|
|
949
|
-
# == returns
|
|
950
|
-
# Hash:: Hash of dynamic attributes
|
|
951
|
-
def strip_dynamic_attributes!( attributes, exceptions = [] )
|
|
952
|
-
|
|
953
|
-
Hash[ attributes.select{ | key, value |
|
|
954
|
-
|
|
955
|
-
if /^__/.match( key.to_s ) and !exceptions.include?( key )
|
|
956
|
-
|
|
957
|
-
attributes.delete( key )
|
|
958
|
-
|
|
959
|
-
true
|
|
960
|
-
|
|
961
|
-
else
|
|
962
|
-
|
|
963
|
-
false
|
|
964
|
-
|
|
965
|
-
end
|
|
966
|
-
|
|
967
|
-
}]
|
|
968
|
-
|
|
969
|
-
end
|
|
970
|
-
|
|
971
|
-
def get_cached_test_object!( object )
|
|
972
|
-
|
|
973
|
-
if @child_object_cache.has_object?( object )
|
|
974
|
-
|
|
975
|
-
object = @child_object_cache[ object ]
|
|
976
|
-
|
|
977
|
-
true
|
|
978
|
-
|
|
979
|
-
else
|
|
980
|
-
|
|
981
|
-
false
|
|
982
|
-
|
|
983
|
-
end
|
|
984
|
-
|
|
985
|
-
end
|
|
986
|
-
=end
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
=begin
|
|
990
|
-
def get_child_objects( attributes )
|
|
991
|
-
|
|
992
|
-
# create copy of attributes hash
|
|
993
|
-
creation_data = attributes.clone
|
|
994
|
-
|
|
995
|
-
# strip all dynamic attributes such as :__timeout, :__logging etc.
|
|
996
|
-
dynamic_attributes = strip_dynamic_attributes!( creation_data )
|
|
997
|
-
|
|
998
|
-
# store and set logger state if given, use default value if none given
|
|
999
|
-
TDriver.logger.push_enabled( MobyUtil::KernelHelper.to_boolean( dynamic_attributes[ :__logging ], TDriver.logger.enabled ) )
|
|
1000
|
-
|
|
1001
|
-
# determine if multiple matches is allowed, default value is false
|
|
1002
|
-
multiple_objects = MobyUtil::KernelHelper.to_boolean( dynamic_attributes[ :__multiple_objects ], false )
|
|
1003
|
-
|
|
1004
|
-
find_all_children = MobyUtil::KernelHelper.to_boolean( dynamic_attributes[ :__find_all_children ], true )
|
|
1005
|
-
|
|
1006
|
-
# check if the hash contains symbols as values and translate those into strings
|
|
1007
|
-
file_name = dynamic_attributes[ :__fname ]
|
|
1008
|
-
plurality = dynamic_attributes[ :__plurality ]
|
|
1009
|
-
numerus = dynamic_attributes[ :__numerus ]
|
|
1010
|
-
lengthvariant = dynamic_attributes[ :__lengthvariant ]
|
|
1011
|
-
|
|
1012
|
-
translate!( creation_data, file_name, plurality, numerus, lengthvariant )
|
|
1013
|
-
|
|
1014
|
-
# use custom timeout if defined
|
|
1015
|
-
timeout = ( dynamic_attributes[ :__timeout ] || @test_object_factory.timeout ).to_i
|
|
1016
|
-
|
|
1017
|
-
# determine which application to refresh
|
|
1018
|
-
#application_id_hash = ( creation_data[ :type ] == 'application' ? { :name => creation_data[ :name ], :id => creation_data[ :id ] } : { :id => get_application_id } )
|
|
1019
|
-
|
|
1020
|
-
if creation_data[ :type ] == 'application'
|
|
1021
|
-
|
|
1022
|
-
application_id_hash = { :name => creation_data[ :name ], :id => creation_data[ :id ] }
|
|
1023
|
-
|
|
1024
|
-
else
|
|
1025
|
-
|
|
1026
|
-
application_id_hash = { :id => get_application_id }
|
|
1027
|
-
|
|
1028
|
-
end
|
|
1029
|
-
|
|
1030
|
-
# add symbols to dynamic attributes list -- to avoid IRB bug
|
|
1031
|
-
MobyUtil::DynamicAttributeFilter.instance.add_attributes( creation_data.keys )
|
|
1032
|
-
|
|
1033
|
-
begin
|
|
1034
|
-
|
|
1035
|
-
# try to reactivate test object if currently not active
|
|
1036
|
-
#reactivate_test_object( creation_data ) unless @_active
|
|
1037
|
-
|
|
1038
|
-
# retrieve test objects from xml
|
|
1039
|
-
child_objects = @test_object_factory.make_child_objects(
|
|
1040
|
-
|
|
1041
|
-
:attributes => creation_data,
|
|
1042
|
-
:dynamic_attributes => dynamic_attributes,
|
|
1043
|
-
|
|
1044
|
-
:parent => self,
|
|
1045
|
-
:sut => @sut,
|
|
1046
|
-
:application => application_id_hash,
|
|
1047
|
-
|
|
1048
|
-
:timeout => timeout,
|
|
1049
|
-
:multiple_objects => multiple_objects,
|
|
1050
|
-
:find_all_children => find_all_children
|
|
1051
|
-
|
|
1052
|
-
)
|
|
1053
|
-
|
|
1054
|
-
# Type information is stored in a separate member, not in the Hash
|
|
1055
|
-
#creation_data.delete( :type )
|
|
1056
|
-
|
|
1057
|
-
child_objects.each do | child_object |
|
|
1058
|
-
|
|
1059
|
-
# use cached test object if once already retrieved
|
|
1060
|
-
get_cached_test_object!( child_object ).tap{ | found_in_cache |
|
|
1061
|
-
|
|
1062
|
-
# Store/update the attributes that were used to create the child object.
|
|
1063
|
-
child_object.creation_attributes = creation_data
|
|
1064
|
-
|
|
1065
|
-
# add child to objects cache
|
|
1066
|
-
#add_child( child_object ) unless found_in_cache
|
|
1067
|
-
|
|
1068
|
-
@child_object_cache.add_object( child_object ) unless found_in_cache
|
|
1069
|
-
|
|
1070
|
-
}
|
|
1071
|
-
|
|
1072
|
-
end
|
|
1073
|
-
|
|
1074
|
-
# return test object(s)
|
|
1075
|
-
multiple_objects ? child_objects : child_objects.first
|
|
1076
|
-
|
|
1077
|
-
rescue Exception => exception
|
|
1078
|
-
|
|
1079
|
-
if exception.kind_of?( MobyBase::MultipleTestObjectsIdentifiedError )
|
|
1080
|
-
|
|
1081
|
-
description = "Multiple child objects matched criteria."
|
|
1082
|
-
|
|
1083
|
-
elsif exception.kind_of?( MobyBase::TestObjectNotFoundError )
|
|
1084
|
-
|
|
1085
|
-
description = "The child object(s) could not be found."
|
|
1086
|
-
|
|
1087
|
-
elsif exception.kind_of?( MobyBase::TestObjectNotVisibleError )
|
|
1088
|
-
|
|
1089
|
-
description = "Parent test object no longer visible."
|
|
1090
|
-
|
|
1091
|
-
else
|
|
1092
|
-
|
|
1093
|
-
description = "Failed when trying to find child object(s)."
|
|
1094
|
-
|
|
1095
|
-
end
|
|
1096
|
-
|
|
1097
|
-
TDriver.logger.behaviour(
|
|
1098
|
-
|
|
1099
|
-
"%s;%s;%s;%s;%s" % [ "FAIL", description, identity, multiple_objects ? "children" : "child", creation_data.inspect ]
|
|
1100
|
-
|
|
1101
|
-
)
|
|
1102
|
-
|
|
1103
|
-
Kernel::raise exception
|
|
1104
|
-
|
|
1105
|
-
ensure
|
|
1106
|
-
|
|
1107
|
-
# restore logger state
|
|
1108
|
-
MobyUtil::Logger.instance.pop_enabled
|
|
1109
|
-
|
|
1110
|
-
end
|
|
1111
|
-
|
|
1112
|
-
end
|
|
1113
|
-
=end
|
|
1114
|
-
|
|
1115
743
|
# Creates a string identifying this test object: sut, type, attributes used when created
|
|
1116
744
|
#
|
|
1117
745
|
# === returns
|
|
1118
746
|
# String:: String identifying this test object
|
|
1119
747
|
def identity
|
|
1120
748
|
|
|
1121
|
-
#"%s;%s;%s" % [ @sut.id, @type, @creation_attributes.inspect ]
|
|
1122
749
|
"#{ @sut.id };#{ @type };#{ @creation_attributes.inspect }"
|
|
1123
750
|
|
|
1124
751
|
end
|
|
@@ -1140,7 +767,7 @@ module MobyBehaviour
|
|
|
1140
767
|
# retrieve xml data, performs xpath to sut xml_data
|
|
1141
768
|
_xml_data = xml_data
|
|
1142
769
|
|
|
1143
|
-
rescue MobyBase::TestObjectNotFoundError
|
|
770
|
+
rescue MobyBase::TestObjectNotFoundError
|
|
1144
771
|
|
|
1145
772
|
# attributes used to refresh parent application
|
|
1146
773
|
if @creation_attributes[ :type ] == 'application'
|
|
@@ -1174,9 +801,7 @@ module MobyBehaviour
|
|
|
1174
801
|
rescue MobyBase::AttributeNotFoundError
|
|
1175
802
|
|
|
1176
803
|
Kernel::raise MobyBase::AttributeNotFoundError.new(
|
|
1177
|
-
|
|
1178
804
|
"Could not find attribute #{ name.inspect } for test object of type #{ @type.to_s }"
|
|
1179
|
-
|
|
1180
805
|
)
|
|
1181
806
|
|
|
1182
807
|
end
|
|
@@ -1211,6 +836,8 @@ module MobyBehaviour
|
|
|
1211
836
|
# initialize cache object
|
|
1212
837
|
@child_object_cache = TDriver::TestObjectCache.new
|
|
1213
838
|
|
|
839
|
+
@parent_application = nil
|
|
840
|
+
|
|
1214
841
|
# defaults
|
|
1215
842
|
@_application_id = nil
|
|
1216
843
|
@creation_attributes = nil
|
|
@@ -1246,7 +873,7 @@ module MobyBehaviour
|
|
|
1246
873
|
end
|
|
1247
874
|
|
|
1248
875
|
# enable hooking for performance measurement & debug logging
|
|
1249
|
-
|
|
876
|
+
TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
|
|
1250
877
|
|
|
1251
878
|
end # TestObject
|
|
1252
879
|
|