testability-driver-qt-sut-plugin 0.9.2 → 1.0.0
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/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/application.rb +11 -8
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/configure_behaviour.rb +3 -3
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/events.rb +76 -74
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/find.rb +2 -0
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/fixture.rb +10 -4
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/gesture.rb +49 -42
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/infologger.rb +0 -9
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/locale_db.rb +5 -0
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/record.rb +11 -1
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/sut.rb +441 -324
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/synchronization.rb +32 -11
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/treewidgetitemcolumn.rb +54 -34
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/view_item.rb +26 -26
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/webkit.rb +61 -21
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/widget.rb +528 -344
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/application.rb +16 -138
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/find_object.rb +3 -67
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/fixture.rb +4 -18
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/plugin.rb +1 -1
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/adapter.rb +166 -149
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/communication.rb +80 -75
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/util/find_object_generator.rb +93 -0
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/util/message_composer.rb +161 -0
- data/xml/behaviour/qt.xml +26 -26
- data/xml/template/qt.xml +9 -7
- metadata +7 -6
- data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/fixture.rb +0 -45
data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/application.rb
CHANGED
@@ -45,7 +45,7 @@ module MobyBehaviour
|
|
45
45
|
# Application
|
46
46
|
#
|
47
47
|
module Application
|
48
|
-
|
48
|
+
# == nodoc
|
49
49
|
# == description
|
50
50
|
# Drag from the start coordinates to the end coordinates.
|
51
51
|
#
|
@@ -131,11 +131,11 @@ module MobyBehaviour
|
|
131
131
|
end
|
132
132
|
|
133
133
|
# == description
|
134
|
-
# Verify was the popup on the screen or not. The method uses
|
134
|
+
# Verify was the popup on the screen or not. The method uses TDriver verify internally for the verification.
|
135
135
|
# If the popup was shown then the entire application ui state is returned as a test object.
|
136
136
|
# More detailed verification can be done for the object (e.g. the content of the popup, labels etc...).
|
137
137
|
# \n
|
138
|
-
#
|
138
|
+
# [b]NOTE:[/b] If the popup does not close the verification will fail. Detection is based on grabbing the ui state just before the popup closes.
|
139
139
|
#
|
140
140
|
# == arguments
|
141
141
|
# class_name
|
@@ -161,7 +161,9 @@ module MobyBehaviour
|
|
161
161
|
end
|
162
162
|
|
163
163
|
# == description
|
164
|
-
# Bring the application to foreground
|
164
|
+
# Bring the application to foreground.\n
|
165
|
+
# \n
|
166
|
+
# [b]NOTE:[/b] Currently this works only for Symbian OS target!
|
165
167
|
#
|
166
168
|
# == returns
|
167
169
|
# NilClass
|
@@ -170,8 +172,8 @@ module MobyBehaviour
|
|
170
172
|
#
|
171
173
|
#
|
172
174
|
def bring_to_foreground
|
173
|
-
|
174
|
-
|
175
|
+
@sut.execute_command(MobyCommand::Application.new(:BringToForeground, nil, self.uid, self.sut))
|
176
|
+
end
|
175
177
|
|
176
178
|
# == description
|
177
179
|
# Taps the given objects at the same time (multitouch).
|
@@ -259,8 +261,9 @@ module MobyBehaviour
|
|
259
261
|
end
|
260
262
|
|
261
263
|
# == description
|
262
|
-
# Performs the given operations at the same time (when possible)
|
263
|
-
#
|
264
|
+
# Performs the given operations at the same time (when possible).\n
|
265
|
+
# \n
|
266
|
+
# [b]NOTE:[/b] Only UI behaviours can be used here (e.g. taps, gestures).
|
264
267
|
#
|
265
268
|
# == arguments
|
266
269
|
# &block
|
@@ -138,7 +138,7 @@ module MobyBehaviour
|
|
138
138
|
#
|
139
139
|
# == arguments
|
140
140
|
# to_qdebug
|
141
|
-
#
|
141
|
+
# Boolean
|
142
142
|
# description:
|
143
143
|
# True to logs message to qDebug instead of a file.
|
144
144
|
# example: true
|
@@ -157,7 +157,7 @@ module MobyBehaviour
|
|
157
157
|
#
|
158
158
|
# == arguments
|
159
159
|
# include
|
160
|
-
#
|
160
|
+
# Boolean
|
161
161
|
# description:
|
162
162
|
# True to log qDebug messages and false to not
|
163
163
|
# example: true
|
@@ -177,7 +177,7 @@ module MobyBehaviour
|
|
177
177
|
#
|
178
178
|
# == arguments
|
179
179
|
# size
|
180
|
-
#
|
180
|
+
# Fixnum
|
181
181
|
# description:
|
182
182
|
# The new log file size
|
183
183
|
# example: 500000
|
@@ -42,24 +42,24 @@ module MobyBehaviour
|
|
42
42
|
# == objects
|
43
43
|
# *;application
|
44
44
|
#
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
45
|
+
module Events
|
46
|
+
|
47
|
+
include MobyBehaviour::QT::Behaviour
|
48
|
+
|
49
|
+
# == description
|
50
|
+
# Enable event listening. You can specify which events you want to listen for by including the names of
|
51
|
+
# those events separated by comma or integers if using user events. Use ALL if you want to listen for all
|
52
|
+
# events but be aware that there will be a lot of events.
|
53
|
+
# \n
|
54
|
+
# The events listened need to be sent the object to which the enabling is done for e.g. sut.button.enable_events('ALL')
|
55
|
+
# would listen to all events sent to the button. When disabling or getting the events the operation must be done to the same object.
|
56
|
+
#
|
57
57
|
# == arguments
|
58
58
|
# filter_array
|
59
59
|
# Array
|
60
60
|
# description: Array of the event named to listen
|
61
61
|
# example: ["Timer","MouseButtonPress","45677","67889"]
|
62
|
-
|
62
|
+
#
|
63
63
|
# == returns
|
64
64
|
# NilClass
|
65
65
|
# description: -
|
@@ -69,31 +69,31 @@ module MobyBehaviour
|
|
69
69
|
# Exception
|
70
70
|
# description: In case of an error
|
71
71
|
#
|
72
|
-
|
72
|
+
def enable_events(filter_array = nil)
|
73
73
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
74
|
+
begin
|
75
|
+
command = plugin_command #in qt_behaviour
|
76
|
+
command.command_name( 'EnableEvents' )
|
77
|
+
params_str = ''
|
78
|
+
filter_array.each {|value| params_str << value << ','} if filter_array
|
79
|
+
command.command_params( 'EventsToListen' => params_str)
|
80
|
+
command.service( 'collectEvents' )
|
81
|
+
@sut.execute_command( command)
|
82
82
|
|
83
|
-
|
83
|
+
rescue Exception => e
|
84
84
|
|
85
|
-
|
86
|
-
|
85
|
+
MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed enable_events with refresh \"#{filter_array.to_s}\".;#{ identity };enable_events;"
|
86
|
+
Kernel::raise e
|
87
87
|
|
88
|
-
|
88
|
+
end
|
89
89
|
|
90
|
-
|
91
|
-
|
92
|
-
|
90
|
+
MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation enable_events executed successfully with refresh \"#{ filter_array.to_s }\".;#{ identity };enable_events;"
|
91
|
+
nil
|
92
|
+
end
|
93
93
|
|
94
|
-
|
95
|
-
|
96
|
-
|
94
|
+
# == description
|
95
|
+
# Disables event listening on the target
|
96
|
+
#
|
97
97
|
# == returns
|
98
98
|
# NilClass
|
99
99
|
# description: -
|
@@ -103,62 +103,64 @@ module MobyBehaviour
|
|
103
103
|
# Exception
|
104
104
|
# description: In case of an error
|
105
105
|
#
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
#
|
106
|
+
def disable_events()
|
107
|
+
|
108
|
+
begin
|
109
|
+
command = plugin_command #in qt_behaviour
|
110
|
+
command.command_name( 'DisableEvents' )
|
111
|
+
command.service( 'collectEvents' )
|
112
|
+
@sut.execute_command( command)
|
113
|
+
rescue Exception => e
|
114
|
+
MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed disable_events.;#{ identity };disable_events;"
|
115
|
+
Kernel::raise e
|
116
|
+
end
|
117
|
+
|
118
|
+
MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation disable_events executed successfully.;#{ identity };disable_events;"
|
119
|
+
nil
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
# == description
|
124
|
+
# Gets event list occured since the enabling of events. The format of the XML string is the same as with the UI state.
|
125
|
+
#
|
127
126
|
# == returns
|
128
127
|
# String
|
129
|
-
#
|
130
|
-
#
|
128
|
+
# description: Xml listing containing the details of the events logger since enable_events
|
129
|
+
# example: -
|
131
130
|
#
|
132
131
|
# == exceptions
|
133
132
|
# Exception
|
134
133
|
# description: In case of an error
|
135
134
|
#
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
begin
|
135
|
+
def get_events()
|
136
|
+
|
137
|
+
ret = nil
|
140
138
|
|
141
|
-
|
142
|
-
command.command_name( 'GetEvents' )
|
143
|
-
command.service( 'collectEvents' )
|
144
|
-
ret = @sut.execute_command( command)
|
145
|
-
# TODO: how to parse the output?
|
139
|
+
begin
|
146
140
|
|
147
|
-
|
141
|
+
command = plugin_command(true) #in qt_behaviour
|
142
|
+
command.command_name( 'GetEvents' )
|
143
|
+
command.service( 'collectEvents' )
|
144
|
+
ret = @sut.execute_command( command)
|
145
|
+
# TODO: how to parse the output?
|
148
146
|
|
149
|
-
|
150
|
-
Kernel::raise e
|
147
|
+
rescue Exception => e
|
151
148
|
|
152
|
-
|
149
|
+
MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed get_events.;#{ identity };get_events;"
|
150
|
+
Kernel::raise e
|
151
|
+
|
152
|
+
end
|
153
153
|
|
154
|
-
|
155
|
-
|
156
|
-
|
154
|
+
MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation get_events executed successfully.;#{ identity };get_events;"
|
155
|
+
|
156
|
+
ret
|
157
|
+
|
158
|
+
end
|
157
159
|
|
158
|
-
|
159
|
-
|
160
|
+
# enable hooking for performance measurement & debug logging
|
161
|
+
MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
|
160
162
|
|
161
|
-
|
163
|
+
end # EventsBehaviour
|
162
164
|
|
163
165
|
end
|
164
166
|
|
@@ -86,11 +86,14 @@ module MobyBehaviour
|
|
86
86
|
ret = nil
|
87
87
|
|
88
88
|
begin
|
89
|
+
params = {:name => fixture_name, :command_name => fixture_method, :parameters => parameters_hash, :async => false}
|
89
90
|
#for sut send the fixture command to qttasserver (appid nil)
|
90
91
|
if self.class == MobyBase::SUT
|
91
|
-
|
92
|
+
params.merge!( {:application_id => nil, :object_id => self.id, :object_type => :Application} )
|
93
|
+
ret = self.execute_command( MobyCommand::Fixture.new( params ) )
|
92
94
|
else
|
93
|
-
|
95
|
+
params.merge!( {:application_id => get_application_id, :object_id => self.id, :object_type => self.attribute( 'objectType' ).intern} )
|
96
|
+
ret = @sut.execute_command( MobyCommand::Fixture.new( params ) )
|
94
97
|
end
|
95
98
|
rescue Exception => e
|
96
99
|
|
@@ -148,11 +151,14 @@ module MobyBehaviour
|
|
148
151
|
ret = nil
|
149
152
|
|
150
153
|
begin
|
154
|
+
params = {:name => fixture_name, :command_name => fixture_method, :parameters => parameters_hash, :async => true}
|
151
155
|
#for sut send the fixture command to qttasserver (appid nil)
|
152
156
|
if self.class == MobyBase::SUT
|
153
|
-
|
157
|
+
params.merge!( {:application_id => nil, :object_id => self.id, :object_type => :Application} )
|
158
|
+
ret = self.execute_command( MobyCommand::Fixture.new( params ) )
|
154
159
|
else
|
155
|
-
|
160
|
+
params.merge!( {:application_id => get_application_id, :object_id => self.id, :object_type => self.attribute( 'objectType' ).intern} )
|
161
|
+
ret = @sut.execute_command( MobyCommand::Fixture.new( params ) )
|
156
162
|
end
|
157
163
|
rescue Exception => e
|
158
164
|
|
@@ -287,27 +287,38 @@ module MobyBehaviour
|
|
287
287
|
# description: One of the arguments is not valid
|
288
288
|
def gesture_to(x, y, speed, optional_params = {:button => :Left, :isDrag => false})
|
289
289
|
|
290
|
-
|
290
|
+
begin
|
291
291
|
# change the format for api consitency
|
292
292
|
use_tap_screen = optional_params[:use_tap_screen].nil? ? MobyUtil::Parameter[ @sut.id][ :use_tap_screen, 'false'] :
|
293
293
|
optional_params[:use_tap_screen].to_s
|
294
294
|
optional_params[:useTapScreen] = use_tap_screen
|
295
295
|
|
296
|
-
|
297
|
-
|
296
|
+
params = {:gesture_type => :MouseGestureToCoordinates, :speed => speed}
|
297
|
+
if attribute('objectType') == 'Web'
|
298
|
+
frame_x_absolute = (@sut.xml_data.xpath( "//object[@id='%s']/attributes/attribute[@name ='x_absolute']/value/text()" % self.attribute('webFrame') )[0]).to_s.to_i
|
299
|
+
frame_y_absolute = (@sut.xml_data.xpath( "//object[@id='%s']/attributes/attribute[@name ='y_absolute']/value/text()" % self.attribute('webFrame') )[0]).to_s.to_i
|
300
|
+
new_params = {:x=>(frame_x_absolute + x.to_i + (attribute('width' ).to_i/2)),
|
301
|
+
:y=>(frame_y_absolute + y.to_i + (attribute('height').to_i/2))}
|
302
|
+
params.merge!(new_params)
|
303
|
+
else
|
304
|
+
new_params = {:x=>x, :y=>y}
|
305
|
+
params.merge!(new_params)
|
306
|
+
end
|
307
|
+
|
308
|
+
|
298
309
|
params.merge!(optional_params)
|
299
|
-
|
300
|
-
|
310
|
+
do_gesture(params)
|
311
|
+
do_sleep(speed)
|
301
312
|
|
302
|
-
|
313
|
+
rescue Exception => e
|
303
314
|
|
304
|
-
|
305
|
-
|
306
|
-
|
315
|
+
MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed gesture_to with x \"#{x}\", y \"#{y}\", speed \"#{speed.to_s}\", button \".;#{identity};gesture;"
|
316
|
+
Kernel::raise e
|
317
|
+
end
|
307
318
|
|
308
|
-
|
309
|
-
|
310
|
-
|
319
|
+
MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation gesture_to executed successfully with x \"#{x}\", y \"#{y}\", speed \"#{speed.to_s}\".;#{identity};gesture;"
|
320
|
+
nil
|
321
|
+
end
|
311
322
|
|
312
323
|
# == description
|
313
324
|
# Perform a gesture with the object, starting the gesture at the specified point inside it.
|
@@ -409,6 +420,13 @@ module MobyBehaviour
|
|
409
420
|
# ArgumentError
|
410
421
|
# description: One of the arguments is not valid
|
411
422
|
def gesture_to_object(target_object, duration, optional_params = {:button => :Left, :isDrag => false})
|
423
|
+
if attribute('objectType') == 'Web'
|
424
|
+
gesture_to(target_object.attribute('x').to_i + (target_object.attribute('width' ).to_i/2) - (attribute('width' ).to_i/2),
|
425
|
+
target_object.attribute('y').to_i + (target_object.attribute('height').to_i/2) - (attribute('height').to_i/2),
|
426
|
+
duration, optional_params)
|
427
|
+
nil
|
428
|
+
return
|
429
|
+
end
|
412
430
|
|
413
431
|
begin
|
414
432
|
# change the format for api consitency
|
@@ -422,8 +440,8 @@ module MobyBehaviour
|
|
422
440
|
params[:targetId] = target_object.id
|
423
441
|
params[:targetType] = target_object.attribute('objectType')
|
424
442
|
params.merge!(optional_params)
|
425
|
-
|
426
|
-
|
443
|
+
do_gesture(params)
|
444
|
+
do_sleep(duration)
|
427
445
|
|
428
446
|
rescue Exception => e
|
429
447
|
|
@@ -626,33 +644,22 @@ module MobyBehaviour
|
|
626
644
|
# description: One of the arguments is not valid
|
627
645
|
def drag_to( x, y, button = :Left, optional_params= {} )
|
628
646
|
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
647
|
+
begin
|
648
|
+
optional_params.merge!({ :isDrag => true , :button=>button})
|
649
|
+
distance = distance_to_point(x,y)
|
650
|
+
speed = calculate_speed(distance, @sut.parameter[:gesture_drag_speed])
|
651
|
+
gesture_to(x, y, speed, optional_params )
|
633
652
|
|
653
|
+
rescue Exception => e
|
654
|
+
MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed drag_to with x \"#{x}\", y \"#{y}\", button \"#{button.to_s}\".;#{identity};drag;"
|
655
|
+
Kernel::raise e
|
656
|
+
end
|
634
657
|
|
635
|
-
|
636
|
-
return if distance == 0
|
658
|
+
MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation drag_to executed successfully with x \"#{x}\", y \"#{y}\", button \"#{button.to_s}\".;#{identity};drag;"
|
637
659
|
|
638
|
-
|
639
|
-
params = {:gesture_type => :MouseGestureToCoordinates, :x => x, :y => y, :speed => speed, :isDrag => true, :button => button}
|
640
|
-
params.merge!(optional_params)
|
641
|
-
do_gesture(params)
|
642
|
-
do_sleep( speed )
|
643
|
-
|
644
|
-
rescue Exception => e
|
645
|
-
|
646
|
-
MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed drag_to with x \"#{x}\", y \"#{y}\", button \"#{button.to_s}\".;#{identity};drag;"
|
647
|
-
Kernel::raise e
|
660
|
+
nil
|
648
661
|
|
649
|
-
|
650
|
-
|
651
|
-
MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation drag_to executed successfully with x \"#{x}\", y \"#{y}\", button \"#{button.to_s}\".;#{identity};drag;"
|
652
|
-
|
653
|
-
nil
|
654
|
-
|
655
|
-
end
|
662
|
+
end
|
656
663
|
|
657
664
|
# == description
|
658
665
|
# Drag the object to the center of another object.
|
@@ -744,8 +751,8 @@ module MobyBehaviour
|
|
744
751
|
# optional_params
|
745
752
|
# Hash
|
746
753
|
# description: The only optional argument supported by drag_to_object is :use_tap_screen.
|
747
|
-
# example: {
|
748
|
-
# default: {
|
754
|
+
# example: {:use_tap_screen => 'true'}
|
755
|
+
# default: {:use_tap_screen => 'false'}
|
749
756
|
#
|
750
757
|
# == returns
|
751
758
|
# NilClass
|
@@ -807,9 +814,9 @@ module MobyBehaviour
|
|
807
814
|
def do_gesture(params)
|
808
815
|
validate_gesture_params!(params)
|
809
816
|
|
810
|
-
if attribute('objectType') == 'Embedded'
|
811
|
-
params['
|
812
|
-
params['
|
817
|
+
if attribute('objectType') == 'Embedded' or attribute('objectType') == 'Web'
|
818
|
+
params['obj_x'] = center_x
|
819
|
+
params['obj_y'] = center_y
|
813
820
|
params['useCoordinates'] = 'true'
|
814
821
|
end
|
815
822
|
|