testability-driver 1.3.0 → 1.3.1
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/ext/native_extensions.c +53 -25
- data/lib/matti.rb +0 -5
- data/lib/tdriver/base/behaviour/behaviours/object_behaviour_description.rb +4 -4
- data/lib/tdriver/base/behaviour/factory.rb +120 -7
- data/lib/tdriver/base/errors.rb +1 -1
- data/lib/tdriver/base/state_object.rb +3 -2
- data/lib/tdriver/base/sut/controller.rb +2 -2
- data/lib/tdriver/base/sut/factory.rb +207 -201
- data/lib/tdriver/base/sut/generic/behaviours/application.rb +3 -6
- data/lib/tdriver/base/sut/generic/behaviours/find.rb +1 -1
- data/lib/tdriver/base/sut/generic/behaviours/flash_behaviour.rb +14 -14
- data/lib/tdriver/base/sut/generic/behaviours/sut.rb +5 -5
- data/lib/tdriver/base/sut/generic/behaviours/switchbox_behaviour.rb +14 -14
- data/lib/tdriver/base/sut/generic/behaviours/verification.rb +3 -18
- data/lib/tdriver/base/sut/generic/commands/key_sequence.rb +6 -6
- data/lib/tdriver/base/sut/generic/plugin.rb +4 -9
- data/lib/tdriver/base/sut/sut.rb +2 -6
- data/lib/tdriver/base/test_object/abstract.rb +1 -1
- data/lib/tdriver/base/test_object/adapter.rb +5 -5
- data/lib/tdriver/base/test_object/behaviours/syncronization.rb +7 -6
- data/lib/tdriver/base/test_object/behaviours/test_object.rb +18 -18
- data/lib/tdriver/base/test_object/factory.rb +147 -96
- data/lib/tdriver/base/test_object/verification.rb +6 -9
- data/lib/tdriver/base/test_object/xml/adapter.rb +5 -5
- data/lib/tdriver/matti.rb +1 -1
- data/lib/tdriver/report/error_recovery/tdriver_error_recovery.rb +17 -8
- data/lib/tdriver/report/error_recovery/tdriver_error_recovery_settings.rb +7 -7
- data/lib/tdriver/report/report_api.rb +172 -79
- data/lib/tdriver/report/report_crash_file_capture.rb +4 -7
- data/lib/tdriver/report/report_creator.rb +16 -20
- data/lib/tdriver/report/report_file_capture.rb +3 -3
- data/lib/tdriver/report/report_javascript.rb +3 -3
- data/lib/tdriver/report/report_test_case_run.rb +20 -10
- data/lib/tdriver/report/report_test_run.rb +11 -10
- data/lib/tdriver/report/report_writer.rb +13 -11
- data/lib/tdriver/tdriver.rb +6 -6
- data/lib/tdriver/util/common/array.rb +2 -2
- data/lib/tdriver/util/common/file.rb +9 -11
- data/lib/tdriver/util/common/gem.rb +1 -1
- data/lib/tdriver/util/common/kernel.rb +4 -4
- data/lib/tdriver/util/common/retryable.rb +2 -2
- data/lib/tdriver/util/common/string.rb +2 -3
- data/lib/tdriver/util/hooking/hooking.rb +2 -2
- data/lib/tdriver/util/localisation/localisation.rb +12 -12
- data/lib/tdriver/util/logger/logger.rb +7 -25
- data/lib/tdriver/util/operator_data/operator_data.rb +5 -5
- data/lib/tdriver/util/parameter/parameter.rb +2 -2
- data/lib/tdriver/util/plugin/abstract.rb +4 -3
- data/lib/tdriver/util/plugin/service.rb +31 -4
- data/lib/tdriver/util/recorder/recorder.rb +4 -4
- data/lib/tdriver/util/user_data/user_data.rb +5 -5
- data/lib/tdriver/util/video/camera_windows.rb +1 -1
- data/lib/tdriver/util/xml/builder.rb +3 -1
- data/lib/tdriver/util/xml/parsers/libxml/libxml.rb +1 -1
- data/lib/tdriver/util/xml/xml.rb +5 -5
- data/lib/tdriver/verify/verify.rb +26 -26
- data/lib/tdriver/version.rb +1 -1
- data/xml/behaviours/generic.xml +1 -2
- metadata +2 -3
- data/lib/tdriver/verify/verify.rb_org +0 -630
@@ -65,18 +65,18 @@ module MobyBehaviour
|
|
65
65
|
#
|
66
66
|
# == returns
|
67
67
|
# MobyBase::TestObject
|
68
|
-
# description: Returns
|
68
|
+
# description: Returns receiver object of this method, not the found object
|
69
69
|
# example: -
|
70
70
|
#
|
71
71
|
# == exceptions
|
72
72
|
# TypeError
|
73
|
-
# description: Wrong argument type
|
73
|
+
# description: Wrong argument type <class> for attributes (expected Hash)
|
74
74
|
#
|
75
75
|
# TypeError
|
76
|
-
# description: Wrong argument type
|
76
|
+
# description: Wrong argument type <class> for attribute :type (expected String)
|
77
77
|
#
|
78
78
|
# TypeError
|
79
|
-
# description: Wrong argument type
|
79
|
+
# description: Wrong argument type <class> for timeout (expected Integer, Fixnum or Float)
|
80
80
|
#
|
81
81
|
# ArgumentError
|
82
82
|
# description: Argument retry_interval was not a valid. Expected: Integer, Fixnum or Float
|
@@ -111,11 +111,12 @@ module MobyBehaviour
|
|
111
111
|
:identification_directives => dynamic_attributes.default_values(
|
112
112
|
:__timeout => timeout,
|
113
113
|
:__retry_interval => retry_interval,
|
114
|
-
:__refresh_arguments => self.kind_of?( MobyBase::SUT ) ? attributes : { :id => self.get_application_id }
|
114
|
+
:__refresh_arguments => self.kind_of?( MobyBase::SUT ) ? attributes : { :id => self.get_application_id },
|
115
|
+
:__parent_application => self.sut? == true ? nil : @parent_application
|
115
116
|
),
|
116
117
|
:parent => self
|
117
118
|
)
|
118
|
-
|
119
|
+
|
119
120
|
rescue MobyBase::TestObjectNotFoundError
|
120
121
|
|
121
122
|
# the child object was not found in the specified timeout
|
@@ -51,6 +51,17 @@ module MobyBehaviour
|
|
51
51
|
# example: { :name => 'Triangle1', :type => :Triangle }
|
52
52
|
attr_accessor :creation_attributes
|
53
53
|
|
54
|
+
=begin
|
55
|
+
# == description
|
56
|
+
# Returns the actual test object that was used as the parent when this object instance was created
|
57
|
+
#
|
58
|
+
# == returns
|
59
|
+
# TestObject
|
60
|
+
# description: test object that was used as parent when this object was created. Can also be of type SUT if sut was the parent (ie. application objects)
|
61
|
+
# example: -
|
62
|
+
attr_reader :parent
|
63
|
+
=end
|
64
|
+
|
54
65
|
=begin
|
55
66
|
# == nodoc
|
56
67
|
# == description
|
@@ -189,7 +200,7 @@ module MobyBehaviour
|
|
189
200
|
|
190
201
|
# == description
|
191
202
|
# Returns the parent test object for the current object in question, according to the UI object hierarchy. For getting the test object that was actually used
|
192
|
-
# as the parent when the test object instance was created, see
|
203
|
+
# as the parent when the test object instance was created, see [link="#GenericTestObject:parent"]parent[/link] method.
|
193
204
|
# == returns
|
194
205
|
# TestObject
|
195
206
|
# description: test object that is parent of this test object, self if no parent (ie. application objects)
|
@@ -419,7 +430,7 @@ module MobyBehaviour
|
|
419
430
|
#
|
420
431
|
# == exceptions
|
421
432
|
# TypeError
|
422
|
-
# description: Wrong argument type
|
433
|
+
# description: Wrong argument type <class> for attributes (expected Hash)
|
423
434
|
#
|
424
435
|
# MultipleTestObjectsIdentifiedError
|
425
436
|
# description: raised if multiple objects found that match the given attributes
|
@@ -767,19 +778,9 @@ module MobyBehaviour
|
|
767
778
|
|
768
779
|
end
|
769
780
|
|
770
|
-
$logger.behaviour
|
781
|
+
$logger.behaviour "FAIL;#{ description };#{ identity };#{ dynamic_attributes[ :__multiple_objects ] ? "children" : "child" };#{ attributes.inspect }"
|
771
782
|
|
772
|
-
|
773
|
-
"FAIL",
|
774
|
-
description,
|
775
|
-
identity,
|
776
|
-
dynamic_attributes[ :__multiple_objects ] ? "children" : "child",
|
777
|
-
attributes.inspect
|
778
|
-
]
|
779
|
-
|
780
|
-
)
|
781
|
-
|
782
|
-
Kernel::raise exception
|
783
|
+
raise exception
|
783
784
|
|
784
785
|
ensure
|
785
786
|
|
@@ -839,7 +840,7 @@ module MobyBehaviour
|
|
839
840
|
|
840
841
|
rescue MobyBase::TestObjectNotFoundError
|
841
842
|
|
842
|
-
|
843
|
+
raise MobyBase::TestObjectNotVisibleError
|
843
844
|
|
844
845
|
end
|
845
846
|
|
@@ -957,12 +958,12 @@ module MobyBehaviour
|
|
957
958
|
|
958
959
|
public
|
959
960
|
|
960
|
-
# This method is deprecated, please use [link="#GenericTestObject:parent"]TestObject#parent[/link] instead.
|
961
961
|
# == deprecated
|
962
962
|
# 0.8.x
|
963
963
|
#
|
964
964
|
# == description
|
965
965
|
# This method is deprecated, please use TestObject#parent
|
966
|
+
# This method is deprecated, please use [link="#GenericTestObject:parent"]TestObject#parent[/link] instead.
|
966
967
|
#
|
967
968
|
def parent_object
|
968
969
|
|
@@ -980,12 +981,11 @@ module MobyBehaviour
|
|
980
981
|
|
981
982
|
end
|
982
983
|
|
983
|
-
# This method is deprecated, please use [link="#GenericTestObject:state_object"]TestObject#state_object[/link] instead.
|
984
984
|
# == deprecated
|
985
985
|
# 1.1.1
|
986
986
|
#
|
987
987
|
# == description
|
988
|
-
# This method is deprecated, please use TestObject#state_object
|
988
|
+
# This method is deprecated, please use [link="#GenericTestObject:state_object"]TestObject#state_object[/link] instead.
|
989
989
|
#
|
990
990
|
def state
|
991
991
|
|
@@ -17,29 +17,95 @@
|
|
17
17
|
##
|
18
18
|
############################################################################
|
19
19
|
|
20
|
-
module
|
20
|
+
module TDriver
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
22
|
+
module TestObjectFactory
|
23
|
+
|
24
|
+
# private methods and variables
|
25
|
+
class << self
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
# TODO: document me
|
30
|
+
def initialize_class
|
31
|
+
|
32
|
+
reset
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
# TODO: document me
|
37
|
+
def get_object_params( creation_attributes )
|
38
|
+
|
39
|
+
if creation_attributes[ :type ] != 'application'
|
40
|
+
|
41
|
+
object_search_params = creation_attributes.clone
|
42
|
+
|
43
|
+
# see below lines how to do following easier
|
44
|
+
#object_search_params[ :className ] = object_search_params.delete( :type ) if creation_attributes.has_key?( :type )
|
45
|
+
#object_search_params[ :objectName ] = object_search_params.delete( :name ) if creation_attributes.has_key?( :name )
|
46
|
+
|
47
|
+
object_search_params.rename_key!( :type, :className ){}
|
48
|
+
object_search_params.rename_key!( :name, :objectName ){}
|
49
|
+
|
50
|
+
object_search_params
|
51
|
+
|
52
|
+
else
|
53
|
+
|
54
|
+
{}
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
# TODO: document me
|
61
|
+
def get_parent_params( test_object )
|
62
|
+
|
63
|
+
unless [ 'application', 'sut' ].include?( test_object.type )
|
64
|
+
|
65
|
+
search_params = []
|
66
|
+
|
67
|
+
search_params.concat( get_parent_params( test_object.parent ) ) if test_object.parent
|
68
|
+
search_params.concat( [ :className => test_object.type, :tasId => test_object.id ] ) #if test_object
|
69
|
+
|
70
|
+
search_params
|
71
|
+
|
72
|
+
else
|
73
|
+
|
74
|
+
[]
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
# TODO: document me
|
81
|
+
def list_matching_test_objects_as_list( test_object_adapter, matches )
|
27
82
|
|
28
|
-
|
83
|
+
test_object_adapter.list_test_objects_as_string( matches ).each_with_index.collect{ | object, object_index |
|
29
84
|
|
30
|
-
|
85
|
+
"#{ ( object_index + 1 ).to_s.rjust( 3, '0' ) }) #{ object.to_s }"
|
31
86
|
|
32
|
-
|
33
|
-
|
87
|
+
}.join( "\n" )
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
end # self
|
92
|
+
|
93
|
+
# TODO: document me
|
94
|
+
def self.reset
|
34
95
|
|
35
96
|
# get timeout from parameters, use default value if parameter not found
|
36
97
|
@timeout = $parameters[ :application_synchronization_timeout, "20" ].to_f
|
37
98
|
|
38
99
|
# get timeout retry interval from parameters, use default value if parameter not found
|
39
100
|
@_retry_interval = $parameters[ :application_synchronization_retry_interval, "1" ].to_f
|
101
|
+
|
102
|
+
end
|
40
103
|
|
41
|
-
|
42
|
-
|
104
|
+
# function to get timeout for TestObjectFactory
|
105
|
+
def self.timeout
|
106
|
+
|
107
|
+
@timeout
|
108
|
+
|
43
109
|
end
|
44
110
|
|
45
111
|
# Function to set timeout for TestObjectFactory
|
@@ -50,7 +116,7 @@ module MobyBase
|
|
50
116
|
# new_timeout:: Fixnum which defines the new timeout
|
51
117
|
# == raises
|
52
118
|
# ArgumentError:: if parameter is not kind of Fixnum
|
53
|
-
def timeout=( value )
|
119
|
+
def self.timeout=( value )
|
54
120
|
|
55
121
|
value.check_type( Numeric, "Wrong argument type $1 for timeout value (expected $2)" )
|
56
122
|
|
@@ -59,7 +125,7 @@ module MobyBase
|
|
59
125
|
end
|
60
126
|
|
61
127
|
# TODO: document me
|
62
|
-
def identify_object( rules )
|
128
|
+
def self.identify_object( rules )
|
63
129
|
|
64
130
|
# retrieve test object identification directives; e.g. :__index, :__xy_sorting etc
|
65
131
|
directives = rules[ :identification_directives ]
|
@@ -76,9 +142,9 @@ module MobyBase
|
|
76
142
|
# search parameters for find_objects feature
|
77
143
|
search_parameters = make_object_search_params( rules[ :parent ], rules[ :object_attributes_hash ] )
|
78
144
|
|
79
|
-
# default rules
|
145
|
+
# default rules
|
80
146
|
directives.default_values(
|
81
|
-
|
147
|
+
|
82
148
|
# get timeout from rules hash or TestObjectFactory
|
83
149
|
:__timeout => @timeout,
|
84
150
|
|
@@ -109,28 +175,53 @@ module MobyBase
|
|
109
175
|
|
110
176
|
parent_application = directives[ :__parent_application ] || rules[ :parent_application ]
|
111
177
|
|
112
|
-
|
178
|
+
# application could be retrieved also like this...
|
179
|
+
# rules[ :parent ].instance_variable_get( :@parent_application )
|
180
|
+
|
181
|
+
# when e.g. wait_child is called to SUT, TDriver is unable to determine layout direction used for sorting/indexing
|
182
|
+
if rules[ :parent ].sut?
|
183
|
+
|
184
|
+
application_layout_direction = directives[ :__layout_direction ]
|
185
|
+
|
186
|
+
raise RuntimeError, 'layout direction is not available for indexing/xy_sorting; please use e.g. :__layout_direction => "LeftToRight"' if application_layout_direction.blank?
|
187
|
+
|
188
|
+
else
|
189
|
+
|
190
|
+
# retrieve layout direction from application object if available
|
191
|
+
unless parent_application.nil?
|
113
192
|
|
114
|
-
|
193
|
+
begin
|
115
194
|
|
116
|
-
|
195
|
+
application_layout_direction = ""
|
117
196
|
|
118
|
-
|
197
|
+
if directives[ :__layout_direction ].blank?
|
198
|
+
|
199
|
+
application_layout_direction = parent_application.attribute( 'layoutDirection' ).to_s
|
200
|
+
|
201
|
+
end
|
119
202
|
|
120
|
-
|
203
|
+
raise if application_layout_direction.empty?
|
121
204
|
|
122
|
-
|
205
|
+
rescue
|
123
206
|
|
124
|
-
|
207
|
+
application_layout_direction = directives[ :__layout_direction ]
|
125
208
|
|
126
|
-
|
209
|
+
# parent application not defined/available, use default value
|
210
|
+
application_layout_direction = 'LeftToRight' if application_layout_direction.blank?
|
127
211
|
|
128
|
-
|
212
|
+
end
|
213
|
+
|
214
|
+
else
|
215
|
+
|
216
|
+
raise RuntimeError, 'parent application not given; unable to retrieve layoutDirection attribute'
|
217
|
+
|
218
|
+
end
|
129
219
|
|
130
220
|
end
|
131
221
|
|
132
|
-
end
|
133
222
|
|
223
|
+
end
|
224
|
+
|
134
225
|
# identify objects until desired matches found or timeout exceeds
|
135
226
|
MobyUtil::Retryable.until(
|
136
227
|
|
@@ -159,7 +250,7 @@ module MobyBase
|
|
159
250
|
directives[ :__find_all_children ]
|
160
251
|
|
161
252
|
)
|
162
|
-
|
253
|
+
|
163
254
|
# Temporary prevent users misleading :Text with :text (as they are different)
|
164
255
|
if ( rules[ :object_attributes_hash ].has_key?(:Text) )
|
165
256
|
|
@@ -223,7 +314,7 @@ module MobyBase
|
|
223
314
|
end
|
224
315
|
|
225
316
|
# TODO: document me
|
226
|
-
def get_test_objects( rules )
|
317
|
+
def self.get_test_objects( rules )
|
227
318
|
|
228
319
|
# retrieve sut object
|
229
320
|
sut = rules[ :parent ].instance_variable_get( :@sut )
|
@@ -398,7 +489,7 @@ module MobyBase
|
|
398
489
|
end
|
399
490
|
|
400
491
|
# TODO: document me
|
401
|
-
def make_test_object( rules )
|
492
|
+
def self.make_test_object( rules )
|
402
493
|
|
403
494
|
# get parent object from hash
|
404
495
|
parent = rules[ :parent ]
|
@@ -532,7 +623,7 @@ module MobyBase
|
|
532
623
|
end
|
533
624
|
|
534
625
|
# create test object search parameters for find_objects service
|
535
|
-
def make_object_search_params( test_object, creation_attributes )
|
626
|
+
def self.make_object_search_params( test_object, creation_attributes )
|
536
627
|
|
537
628
|
result = get_parent_params( test_object ).push( get_object_params( creation_attributes ) )
|
538
629
|
|
@@ -542,70 +633,9 @@ module MobyBase
|
|
542
633
|
|
543
634
|
end
|
544
635
|
|
545
|
-
|
636
|
+
def self.set_timeout( new_timeout )
|
546
637
|
|
547
|
-
|
548
|
-
def get_object_params( creation_attributes )
|
549
|
-
|
550
|
-
if creation_attributes[ :type ] != 'application'
|
551
|
-
|
552
|
-
object_search_params = creation_attributes.clone
|
553
|
-
|
554
|
-
# see below lines how to do following easier
|
555
|
-
#object_search_params[ :className ] = object_search_params.delete( :type ) if creation_attributes.has_key?( :type )
|
556
|
-
#object_search_params[ :objectName ] = object_search_params.delete( :name ) if creation_attributes.has_key?( :name )
|
557
|
-
|
558
|
-
object_search_params.rename_key!( :type, :className ){}
|
559
|
-
object_search_params.rename_key!( :name, :objectName ){}
|
560
|
-
|
561
|
-
object_search_params
|
562
|
-
|
563
|
-
else
|
564
|
-
|
565
|
-
{}
|
566
|
-
|
567
|
-
end
|
568
|
-
|
569
|
-
end
|
570
|
-
|
571
|
-
# TODO: document me
|
572
|
-
def get_parent_params( test_object )
|
573
|
-
|
574
|
-
unless [ 'application', 'sut' ].include?( test_object.type )
|
575
|
-
|
576
|
-
search_params = []
|
577
|
-
|
578
|
-
search_params.concat( get_parent_params( test_object.parent ) ) if test_object.parent
|
579
|
-
search_params.concat( [ :className => test_object.type, :tasId => test_object.id ] ) #if test_object
|
580
|
-
|
581
|
-
search_params
|
582
|
-
|
583
|
-
else
|
584
|
-
|
585
|
-
[]
|
586
|
-
|
587
|
-
end
|
588
|
-
|
589
|
-
end
|
590
|
-
|
591
|
-
# TODO: document me
|
592
|
-
def list_matching_test_objects_as_list( test_object_adapter, matches )
|
593
|
-
|
594
|
-
test_object_adapter.list_test_objects_as_string( matches ).each_with_index.collect{ | object, object_index |
|
595
|
-
|
596
|
-
"%3s) %s" % [ object_index + 1, object ]
|
597
|
-
|
598
|
-
}.join( "\n" )
|
599
|
-
|
600
|
-
#list_matching_test_objects( matches ).each_with_index.collect{ | object, object_index | "%3s) %s" % [ object_index + 1, object ] }.join( "\n" )
|
601
|
-
|
602
|
-
end
|
603
|
-
|
604
|
-
public # deprecated methods
|
605
|
-
|
606
|
-
def set_timeout( new_timeout )
|
607
|
-
|
608
|
-
warn "warning: deprecated method TestObjectFactory#set_timeout( value ); please use TestObjectFactory#timeout=( value ) instead"
|
638
|
+
warn "warning: deprecated method TDriver::TestObjectFactory#set_timeout( value ); please use TDriver::TestObjectFactory#timeout=( value ) instead"
|
609
639
|
|
610
640
|
self.timeout = new_timeout
|
611
641
|
|
@@ -615,17 +645,38 @@ module MobyBase
|
|
615
645
|
#
|
616
646
|
# === returns
|
617
647
|
# Numeric:: Timeout
|
618
|
-
def get_timeout
|
648
|
+
def self.get_timeout
|
619
649
|
|
620
|
-
warn "warning: deprecated method TestObjectFactory#get_timeout; please use TestObjectFactory#timeout instead"
|
650
|
+
warn "warning: deprecated method TDriver::TestObjectFactory#get_timeout; please use TDriver::TestObjectFactory#timeout instead"
|
621
651
|
|
622
652
|
@timeout
|
623
653
|
|
624
654
|
end
|
625
655
|
|
626
|
-
# enable
|
656
|
+
# enable hooking for performance measurement & debug logging
|
627
657
|
TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
|
628
658
|
|
659
|
+
# initialize plugin service
|
660
|
+
initialize_class
|
661
|
+
|
662
|
+
|
629
663
|
end # TestObjectFactory
|
630
664
|
|
665
|
+
end # TDriver
|
666
|
+
|
667
|
+
# for backwards compatibility
|
668
|
+
module MobyBase
|
669
|
+
|
670
|
+
class TestObjectFactory
|
671
|
+
|
672
|
+
def self.instance
|
673
|
+
|
674
|
+
warn_caller '$1:$2 deprecated class MobyBase::TestObjectFactory, please use static class TDriver::TestObjectFactory instead'
|
675
|
+
|
676
|
+
TDriver::TestObjectFactory
|
677
|
+
|
678
|
+
end
|
679
|
+
|
680
|
+
end # SUTFactory
|
681
|
+
|
631
682
|
end # MobyBase
|