testability-driver 1.3.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|