testability-driver-qt-sut-plugin 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. data/env.rb +26 -0
  2. data/installer/extconf.rb +62 -0
  3. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin.rb +23 -0
  4. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/action.rb +156 -0
  5. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/application.rb +318 -0
  6. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/attribute.rb +227 -0
  7. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/behaviour.rb +140 -0
  8. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/configure_behaviour.rb +317 -0
  9. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/events.rb +165 -0
  10. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/file_transfer.rb +333 -0
  11. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/find.rb +80 -0
  12. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/fixture.rb +178 -0
  13. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/gesture.rb +906 -0
  14. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/infologger.rb +604 -0
  15. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/key_press.rb +152 -0
  16. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/locale_db.rb +151 -0
  17. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/method.rb +85 -0
  18. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/multitouch.rb +455 -0
  19. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/os.rb +100 -0
  20. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/qt_api_method.rb +148 -0
  21. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/record.rb +124 -0
  22. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/screen_capture.rb +283 -0
  23. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/sut.rb +492 -0
  24. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/synchronization.rb +113 -0
  25. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/treewidgetitemcolumn.rb +93 -0
  26. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/type_text.rb +97 -0
  27. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/view_item.rb +97 -0
  28. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/webkit.rb +230 -0
  29. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/widget.rb +663 -0
  30. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/action.rb +30 -0
  31. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/configure_command.rb +38 -0
  32. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/drag.rb +44 -0
  33. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/find_object.rb +50 -0
  34. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/fixture.rb +45 -0
  35. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/group.rb +48 -0
  36. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/infologger_command.rb +38 -0
  37. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/qt.rb +170 -0
  38. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/tap.rb +54 -0
  39. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/widget.rb +226 -0
  40. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/application.rb +264 -0
  41. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/configure_command.rb +60 -0
  42. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/find_object.rb +114 -0
  43. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/fixture.rb +67 -0
  44. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/group.rb +52 -0
  45. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/infologger_command.rb +62 -0
  46. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/key_sequence.rb +99 -0
  47. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/screen_capture.rb +54 -0
  48. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/tap.rb +51 -0
  49. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/widget.rb +72 -0
  50. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/plugin.rb +119 -0
  51. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/adapter.rb +225 -0
  52. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/communication.rb +154 -0
  53. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/controller.rb +58 -0
  54. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/util/fixture_parameter.rb +77 -0
  55. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/util/widget.rb +82 -0
  56. data/lib/testability-driver-qt-sut-plugin.rb +24 -0
  57. data/xml/behaviour/qt.xml +717 -0
  58. data/xml/defaults/sut_qt.xml +9 -0
  59. data/xml/keymap/qt.xml +321 -0
  60. data/xml/template/qt.xml +124 -0
  61. metadata +141 -0
@@ -0,0 +1,80 @@
1
+ ############################################################################
2
+ ##
3
+ ## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4
+ ## All rights reserved.
5
+ ## Contact: Nokia Corporation (testabilitydriver@nokia.com)
6
+ ##
7
+ ## This file is part of TDriver.
8
+ ##
9
+ ## If you have questions regarding the use of this file, please contact
10
+ ## Nokia at testabilitydriver@nokia.com .
11
+ ##
12
+ ## This library is free software; you can redistribute it and/or
13
+ ## modify it under the terms of the GNU Lesser General Public
14
+ ## License version 2.1 as published by the Free Software Foundation
15
+ ## and appearing in the file LICENSE.LGPL included in the packaging
16
+ ## of this file.
17
+ ##
18
+ ############################################################################
19
+
20
+ # Find behaviours
21
+ #
22
+ # Methods for finding test objects on the suttest objet state
23
+ module MobyBehaviour
24
+
25
+ module QT
26
+
27
+ # == description
28
+ # Defines methods to find test objects and scroll them to the display
29
+ #
30
+ # == behaviour
31
+ # QtFind
32
+ #
33
+ # == requires
34
+ # testability-driver-qt-sut-plugin
35
+ #
36
+ # == input_type
37
+ # *
38
+ #
39
+ # == sut_type
40
+ # qt
41
+ #
42
+ # == sut_version
43
+ # *
44
+ #
45
+ # == objects
46
+ # *
47
+ #
48
+ module Find
49
+ include MobyBehaviour::QT::Behaviour
50
+
51
+ def find_and_center (find_hash = {})
52
+ begin
53
+ search_result = find(find_hash)
54
+
55
+ ## Calculate Center
56
+ myWindow = search_result.sut.application.find(:parent => 0, :isWindow => "true") # throws multiple found exeptions
57
+ window_width = myWindow.attribute('width').to_i/2
58
+ window_height = myWindow.attribute('height').to_i/2
59
+ window_x = myWindow.attribute('x_absolute').to_i + window_width.to_i
60
+ window_y = myWindow.attribute('y_absolute').to_i + window_height.to_i
61
+
62
+ ## flick_to (center)
63
+ search_result.flick_to(window_x.to_i, window_y.to_i)
64
+ rescue Exception => e
65
+ ##MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed to find test object.;#{id.to_s};sut;{};find;" << (find_hash.kind_of?(Hash) ? find_hash.inspect : find_hash.class.to_s)
66
+ ## Rescue from center and flick
67
+ Kernel::raise e
68
+ end
69
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Test object found and centered.;#{id.to_s};sut;{};application;" << find_hash.inspect
70
+ search_result
71
+ end
72
+
73
+ # enable hooking for performance measurement & debug logging
74
+ MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
75
+
76
+ end # module Find
77
+
78
+ end # module QT
79
+
80
+ end # module MobyBehaviour
@@ -0,0 +1,178 @@
1
+ ############################################################################
2
+ ##
3
+ ## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4
+ ## All rights reserved.
5
+ ## Contact: Nokia Corporation (testabilitydriver@nokia.com)
6
+ ##
7
+ ## This file is part of TDriver.
8
+ ##
9
+ ## If you have questions regarding the use of this file, please contact
10
+ ## Nokia at testabilitydriver@nokia.com .
11
+ ##
12
+ ## This library is free software; you can redistribute it and/or
13
+ ## modify it under the terms of the GNU Lesser General Public
14
+ ## License version 2.1 as published by the Free Software Foundation
15
+ ## and appearing in the file LICENSE.LGPL included in the packaging
16
+ ## of this file.
17
+ ##
18
+ ############################################################################
19
+
20
+ module MobyBehaviour
21
+
22
+ module QT
23
+
24
+ # == description
25
+ # Fixture specific behaviours
26
+ #
27
+ # == behaviour
28
+ # QtFixture
29
+ #
30
+ # == requires
31
+ # testability-driver-qt-sut-plugin
32
+ #
33
+ # == input_type
34
+ # *
35
+ #
36
+ # == sut_type
37
+ # qt
38
+ #
39
+ # == sut_version
40
+ # *
41
+ #
42
+ # == objects
43
+ # sut;*
44
+ #
45
+ module Fixture
46
+
47
+ include MobyBehaviour::QT::Behaviour
48
+
49
+
50
+ # == description
51
+ # Sends a fixture call to the target. The fixture will be executed either
52
+ # inside the application process or the qttasserver process (if used for sut).
53
+ # The fixture will get a pointer to the object to which this call is made to.
54
+ #
55
+ #
56
+ # == arguments
57
+ # fixture_name
58
+ # String
59
+ # description: Name of the fixture. Fixture mapping is in the tdriverparameters.xml file.
60
+ # example: tasfixture
61
+ #
62
+ # fixture_method
63
+ # String
64
+ # description: Name of the action to be executed in the fixture.
65
+ # example: callApi
66
+ #
67
+ # parameters_hash
68
+ # Hash
69
+ # description: Optional hash of pareters passed on to the fixture.
70
+ # example: {:name => 'John'}
71
+ #
72
+ # == returns
73
+ # QString
74
+ # description: The value returned but the fixture.
75
+ # example: OK
76
+ #
77
+ # == exceptions
78
+ # ArgumentError
79
+ # description: In case the given parameters are not valid.
80
+ #
81
+ def fixture( fixture_name, fixture_method, parameters_hash = {} )
82
+
83
+ Kernel::raise ArgumentError.new("Fixture name -parameter was of wrong type: expected 'String' was '%s'" % fixture_name.class.to_s) unless fixture_name.kind_of?( String )
84
+ Kernel::raise ArgumentError.new("Fixture method -parameter was of wrong type: expected 'String' was '%s'" % fixture_method.class.to_s) unless fixture_method.kind_of?( String )
85
+
86
+ ret = nil
87
+
88
+ begin
89
+ #for sut send the fixture command to qttasserver (appid nil)
90
+ if self.class == MobyBase::SUT
91
+ ret = self.execute_command( MobyCommand::Fixture.new( nil, self.id, :Application, fixture_name, fixture_method, parameters_hash ) )
92
+ else
93
+ ret = @sut.execute_command( MobyCommand::Fixture.new( get_application_id, self.id, self.attribute( 'objectType' ).intern, fixture_name, fixture_method, parameters_hash ) )
94
+ end
95
+ rescue Exception => e
96
+
97
+ MobyUtil::Logger.instance.log "behaviour",
98
+ "FAIL;Failed when calling fixture with name #{fixture_name} method #{fixture_method} parameters #{parameters_hash.inspect}.;#{id.to_s};sut;{};fixture;"
99
+
100
+ Kernel::raise MobyBase::BehaviourError.new("Fixture", "Failed to execute fixture name #{fixture_name} method #{fixture_method}")
101
+ end
102
+
103
+ MobyUtil::Logger.instance.log "behaviour",
104
+ "PASS;The fixture command was executed successfully with name #{fixture_name} method #{fixture_method} parameters #{parameters_hash.inspect}.;#{id.to_s};sut;{};fixture;"
105
+
106
+ ret
107
+
108
+ end
109
+
110
+ # == description
111
+ # Sends a fixture call to the target. The fixture will be executed either
112
+ # inside the application process or the qttasserver process (if used for sut).
113
+ # The fixture will get a pointer to the object to which this call is made to.
114
+ # This version of the fixture call is asynchronous. This means that no return value
115
+ # is returned.
116
+ #
117
+ #
118
+ # == arguments
119
+ # fixture_name
120
+ # String
121
+ # description: Name of the fixture. Fixture mapping is in the tdriverparameters.xml file.
122
+ # example: tasfixture
123
+ #
124
+ # fixture_method
125
+ # String
126
+ # description: Name of the action to be executed in the fixture.
127
+ # example: callApi
128
+ #
129
+ # parameters_hash
130
+ # Hash
131
+ # description: Optional hash of pareters passed on to the fixture.
132
+ # example: {:name => 'John'}
133
+ #
134
+ # == returns
135
+ # NilClass
136
+ # description: -
137
+ # example: -
138
+ #
139
+ # == exceptions
140
+ # ArgumentError
141
+ # description: In case the given parameters are not valid.
142
+ #
143
+ def async_fixture( fixture_name, fixture_method, parameters_hash = {} )
144
+
145
+ Kernel::raise ArgumentError.new("Fixture name -parameter was of wrong type: expected 'String' was '%s'" % fixture_name.class.to_s) unless fixture_name.kind_of?( String )
146
+ Kernel::raise ArgumentError.new("Fixture method -parameter was of wrong type: expected 'String' was '%s'" % fixture_method.class.to_s) unless fixture_method.kind_of?( String )
147
+
148
+ ret = nil
149
+
150
+ begin
151
+ #for sut send the fixture command to qttasserver (appid nil)
152
+ if self.class == MobyBase::SUT
153
+ ret = self.execute_command( MobyCommand::Fixture.new( nil, self.id, :Application, fixture_name, fixture_method, parameters_hash, true ) )
154
+ else
155
+ ret = @sut.execute_command( MobyCommand::Fixture.new( get_application_id, self.id, self.attribute( 'objectType' ).intern, fixture_name, fixture_method, parameters_hash, true ) )
156
+ end
157
+ rescue Exception => e
158
+
159
+ MobyUtil::Logger.instance.log "behaviour" ,
160
+ "FAIL;Failed when calling async_fixture with name #{fixture_name} method #{fixture_method} parameters #{parameters_hash.inspect}.;#{id.to_s};sut;{};fixture;"
161
+
162
+ Kernel::raise MobyBase::BehaviourError.new("Fixture", "Failed to execute async_fixture name #{fixture_name} method #{fixture_method}")
163
+ end
164
+
165
+ MobyUtil::Logger.instance.log "behaviour",
166
+ "PASS;The fixture command was executed successfully with name #{fixture_name} method #{fixture_method} parameters #{parameters_hash.inspect}.;#{id.to_s};sut;{};fixture;"
167
+
168
+ ret
169
+
170
+ end
171
+
172
+ # enable hooking for performance measurement & debug logging
173
+ MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
174
+
175
+ end
176
+
177
+ end
178
+ end
@@ -0,0 +1,906 @@
1
+ ############################################################################
2
+ ##
3
+ ## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4
+ ## All rights reserved.
5
+ ## Contact: Nokia Corporation (testabilitydriver@nokia.com)
6
+ ##
7
+ ## This file is part of TDriver.
8
+ ##
9
+ ## If you have questions regarding the use of this file, please contact
10
+ ## Nokia at testabilitydriver@nokia.com .
11
+ ##
12
+ ## This library is free software; you can redistribute it and/or
13
+ ## modify it under the terms of the GNU Lesser General Public
14
+ ## License version 2.1 as published by the Free Software Foundation
15
+ ## and appearing in the file LICENSE.LGPL included in the packaging
16
+ ## of this file.
17
+ ##
18
+ ############################################################################
19
+
20
+ module MobyBehaviour
21
+
22
+ module QT
23
+
24
+ # == description
25
+ # Gesture behaviour methods are used to do different gestures with UI objects. Various methods exist for different speeds, targets and other options.
26
+ #
27
+ # == behaviour
28
+ # QtGesture
29
+ #
30
+ # == requires
31
+ # testability-driver-qt-sut-plugin
32
+ #
33
+ # == input_type
34
+ # *
35
+ #
36
+ # == sut_type
37
+ # QT
38
+ #
39
+ # == sut_version
40
+ # *
41
+ #
42
+ # == objects
43
+ # *
44
+ #
45
+ module Gesture
46
+
47
+ include MobyBehaviour::QT::Behaviour
48
+
49
+ # == description
50
+ # Flick the screen at the location of the object (touch the object and do a flick gesture).
51
+ # Speed and distance of the flick are defined in the tdriver_parameters under the sut used.
52
+ # By default a flick is a fast gesture.
53
+ # For custom values see the gesture method.
54
+ #
55
+ # == arguments
56
+ # direction
57
+ # Symbol
58
+ # description: Direction of the flick. Please see [link="#directions_table"]the directions table[/link] for valid direction symbols.
59
+ # example: :Left
60
+ # Integer
61
+ # description: Direction of the flick as degrees with 0 being up and 90 right.
62
+ # example: 270
63
+ #
64
+ # button
65
+ # Symbol
66
+ # description: The mouse button pressed while the drag is executed can be defined. Please see [link="#buttons_table"]the buttons table[/link] for valid button symbols.
67
+ # example: :Middle
68
+ # default: :Left
69
+ #
70
+ # optional_params
71
+ # Hash
72
+ # description: The only optional argument supported by flick is :use_tap_screen.
73
+ # example: { :use_tap_screen => 'true' }
74
+ # default: { :use_tap_screen => 'false' }
75
+ #
76
+ # == returns
77
+ # NilClass
78
+ # description: Always returns nil
79
+ # example: nil
80
+ #
81
+ # == exceptions
82
+ # ArgumentError
83
+ # description: One of the arguments is not valid
84
+ def flick( direction, button = :Left, optional_params = {} )
85
+
86
+ begin
87
+ use_tap_screen = optional_params[:use_tap_screen].nil? ? MobyUtil::Parameter[ @sut.id][ :use_tap_screen, 'false'] :
88
+ optional_params[:use_tap_screen].to_s
89
+ optional_params[:useTapScreen] = use_tap_screen
90
+
91
+ speed = calculate_speed(@sut.parameter[:gesture_flick_distance], @sut.parameter[:gesture_flick_speed])
92
+ distance = @sut.parameter[:gesture_flick_distance].to_i
93
+ params = {:gesture_type => :MouseGesture, :direction => direction, :speed => speed, :distance => distance, :isDrag => false, :button => button, :useTapScreen => use_tap_screen}
94
+ params.merge!(optional_params)
95
+
96
+ do_gesture(params)
97
+ do_sleep(speed)
98
+
99
+ rescue Exception => e
100
+
101
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed flick with direction \"#{direction}\", button \"#{button.to_s}\".;#{identity};flick;"
102
+ Kernel::raise e
103
+ end
104
+
105
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation flick executed successfully with direction \"#{direction}\", button \"#{button.to_s}\".;#{identity};flick;"
106
+
107
+ nil
108
+ end
109
+
110
+ # == description
111
+ # Flick the screen at the location of the object (touch the object and do a flick gesture), ending the flick at the specified coordinates.
112
+ # Speed and distance of the flick are defined in the tdriver_parameters under the sut used.
113
+ # By default a flick is a fast gesture.
114
+ # For custom values see the gesture_to method.
115
+ #
116
+ # == arguments
117
+ # x
118
+ # Integer
119
+ # description: X coordinate of the target point. The coordinate is an absolute screen coordinate, relative to the display top left corner.
120
+ # example: 300
121
+ #
122
+ # y
123
+ # Integer
124
+ # description: Y coordinate of the target point. The coordinate is an absolute screen coordinate, relative to the display top left corner.
125
+ # example: 300
126
+ #
127
+ # button
128
+ # Symbol
129
+ # description: The mouse button pressed while the flick is executed can be defined. Please see [link="#buttons_table"]the buttons table[/link] for valid button symbols.
130
+ # example: :Middle
131
+ # default: :Left
132
+ #
133
+ # optional_params
134
+ # Hash
135
+ # description: The only optional argument supported by flick_to is :use_tap_screen.
136
+ # example: { :use_tap_screen => 'true' }
137
+ # default: { :use_tap_screen => 'false' }
138
+ #
139
+ # == returns
140
+ # NilClass
141
+ # description: Always returns nil
142
+ # example: nil
143
+ #
144
+ # == exceptions
145
+ # ArgumentError
146
+ # description: One of the arguments is not valid
147
+ def flick_to( x, y, button = :Left, optional_params = {})
148
+
149
+ begin
150
+ use_tap_screen = optional_params[:use_tap_screen].nil? ? MobyUtil::Parameter[ @sut.id][ :use_tap_screen, 'false'] :
151
+ optional_params[:use_tap_screen].to_s
152
+ optional_params[:useTapScreen] = use_tap_screen
153
+
154
+
155
+
156
+ speed = calculate_speed( @sut.parameter[ :gesture_flick_distance ], @sut.parameter[ :gesture_flick_speed ] )
157
+ do_gesture({:gesture_type => :MouseGestureToCoordinates, :x => x, :y => y, :speed => speed, :isDrag => false, :button => button, :useTapScreen => use_tap_screen})
158
+ do_sleep(speed)
159
+
160
+ rescue Exception => e
161
+
162
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed flick_to with x \"#{x}\", y \"#{y}\", button \"#{button.to_s}\".;#{identity};drag;"
163
+ Kernel::raise e
164
+ end
165
+
166
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation flick_to executed successfully with x \"#{x}\", y \"#{y}\", button \"#{button.to_s}\".;#{identity};drag;"
167
+
168
+ nil
169
+
170
+ end
171
+
172
+
173
+ # == description
174
+ # Perform a gesture with the object
175
+ #
176
+ # == arguments
177
+ # direction
178
+ # Symbol
179
+ # description: Direction of the gesture. Please see [link="#directions_table"]the directions table[/link] for valid direction symbols.
180
+ # example: :Left
181
+ #
182
+ # Integer
183
+ # description: Direction of the gesture as degrees with 0 being up and 90 right.
184
+ # example: 270
185
+ #
186
+ # speed
187
+ # Numeric
188
+ # description: Duration of the gesture in seconds. The value may be an interger or a fractional value as a floating point number.
189
+ # example: 1
190
+ #
191
+ # distance
192
+ # Integer
193
+ # description: Number of pixels that the object is to be moved in the gesture.
194
+ # example: 100
195
+ #
196
+ # optional_params
197
+ # Hash
198
+ # description: This method supports :use_tap_screen, :isDrag and :button optional arguments. The first two can be either true or false, for :button values please see [link="#buttons_table"]the buttons table[/link].
199
+ # example: { :button => :Right }
200
+ # default: { :use_tap_screen => 'false', :isDrag => false, :button => :Left }
201
+ #
202
+ # == tables
203
+ # directions_table
204
+ # title: Direction symbols table
205
+ # |Symbol|
206
+ # |:Left|
207
+ # |:Right|
208
+ # |:Up|
209
+ # |:Down|
210
+ #
211
+ # buttons_table
212
+ # title: Mouse button symbols table
213
+ # |Symbol|Description|
214
+ # |:Left|Simulate left mouse button|
215
+ # |:Middle|Simulate middle mouse button|
216
+ # |:Right|Simulate right mouse button|
217
+ # |:NoButton|Do not simulate any mouse button|
218
+ #
219
+ # == returns
220
+ # NilClass
221
+ # description: Always returns nil
222
+ # example: nil
223
+ #
224
+ # == exceptions
225
+ # ArgumentError
226
+ # description: One of the arguments is not valid
227
+ def gesture( direction, speed, distance, optional_params = {:button => :Left, :isDrag => false})
228
+
229
+ begin
230
+ # change the format for api consitency
231
+ use_tap_screen = optional_params[:use_tap_screen].nil? ? MobyUtil::Parameter[ @sut.id][ :use_tap_screen, 'false'] :
232
+ optional_params[:use_tap_screen].to_s
233
+ optional_params[:useTapScreen] = use_tap_screen
234
+
235
+
236
+ #do_gesture(direction, speed, distance, isDrag, button)
237
+ params = {:gesture_type => :MouseGesture, :direction => direction, :speed => speed, :distance => distance}
238
+ params.merge!(optional_params)
239
+ do_gesture(params)
240
+ do_sleep(speed)
241
+
242
+ rescue Exception => e
243
+
244
+ MobyUtil::Logger.instance.log "behaviour",
245
+ "FAIL;Failed gesture with direction \"#{direction}\", speed \"#{speed.to_s}\", distance \"#{distance.to_s}\".;#{identity};gesture;"
246
+ Kernel::raise e
247
+ end
248
+
249
+ MobyUtil::Logger.instance.log "behaviour",
250
+ "PASS;Operation gesture executed successfully with direction \"#{direction}\", speed \"#{speed.to_s}\", distance \"#{distance.to_s}\".;#{identity};gesture;"
251
+
252
+ nil
253
+ end
254
+
255
+ # == description
256
+ # Perform a gesture with the object, ending the gesture at the specified point.
257
+ #
258
+ # == arguments
259
+ # x
260
+ # Integer
261
+ # description: X coordinate of the target point. The coordinate is an absolute screen coordinate, relative to the display top left corner.
262
+ # example: 300
263
+ #
264
+ # y
265
+ # Integer
266
+ # description: Y coordinate of the target point. The coordinate is an absolute screen coordinate, relative to the display top left corner.
267
+ # example: 300
268
+ #
269
+ # speed
270
+ # Numeric
271
+ # description: Duration of the gesture in seconds. The value may be an interger or a fractional value as a floating point number.
272
+ # example: 1
273
+ #
274
+ # optional_params
275
+ # Hash
276
+ # description: This method supports :use_tap_screen, :isDrag and :button optional arguments. The first two can be either true or false, for :button values please see [link="#buttons_table"]the buttons table[/link].
277
+ # example: { :button => :Right }
278
+ # default: { :use_tap_screen => 'false', :isDrag => false, :button => :Left }
279
+ #
280
+ # == returns
281
+ # NilClass
282
+ # description: Always returns nil
283
+ # example: nil
284
+ #
285
+ # == exceptions
286
+ # ArgumentError
287
+ # description: One of the arguments is not valid
288
+ def gesture_to(x, y, speed, optional_params = {:button => :Left, :isDrag => false})
289
+
290
+ begin
291
+ # change the format for api consitency
292
+ use_tap_screen = optional_params[:use_tap_screen].nil? ? MobyUtil::Parameter[ @sut.id][ :use_tap_screen, 'false'] :
293
+ optional_params[:use_tap_screen].to_s
294
+ optional_params[:useTapScreen] = use_tap_screen
295
+
296
+
297
+ params = {:gesture_type => :MouseGestureToCoordinates, :x => x, :y => y, :speed => speed}
298
+ params.merge!(optional_params)
299
+ do_gesture(params)
300
+ do_sleep(speed)
301
+
302
+ rescue Exception => e
303
+
304
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed gesture_to with x \"#{x}\", y \"#{y}\", speed \"#{speed.to_s}\", button \".;#{identity};gesture;"
305
+ Kernel::raise e
306
+ end
307
+
308
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation gesture_to executed successfully with x \"#{x}\", y \"#{y}\", speed \"#{speed.to_s}\".;#{identity};gesture;"
309
+ nil
310
+ end
311
+
312
+ # == description
313
+ # Perform a gesture with the object, starting the gesture at the specified point inside it.
314
+ #
315
+ # == arguments
316
+ # x
317
+ # Integer
318
+ # description: X coordinate of the start point. The coordinate is relative to the object top left corner.
319
+ # example: 20
320
+ #
321
+ # y
322
+ # Integer
323
+ # description: Y coordinate of the start point. The coordinate is relative to the object top left corner.
324
+ # example: 15
325
+ #
326
+ # speed
327
+ # Numeric
328
+ # description: Duration of the gesture in seconds. The value may be an interger or a fractional value as a floating point number.
329
+ # example: 1
330
+ #
331
+ # direction
332
+ # Symbol
333
+ # description: Direction of the gesture. Please see this table for valid direction symbols.
334
+ # example: :Left
335
+ #
336
+ # Integer
337
+ # description: Direction of the gesture as degrees with 0 being up and 90 right.
338
+ # example: 270
339
+ #
340
+ # distance
341
+ # Integer
342
+ # description: Number of pixels that the object is to be moved in the gesture.
343
+ # example: 100
344
+ #
345
+ # optional_params
346
+ # Hash
347
+ # description: This method supports :use_tap_screen, :isDrag and :button optional arguments. The first two can be either true or false, for :button values please see [link="#buttons_table"]the buttons table[/link].
348
+ # example: { :button => :Right }
349
+ # default: { :use_tap_screen => 'false', :isDrag => false, :button => :Left }
350
+ #
351
+ # == returns
352
+ # NilClass
353
+ # description: Always returns nil
354
+ # example: nil
355
+ #
356
+ # == exceptions
357
+ # ArgumentError
358
+ # description: One of the arguments is not valid, or the initial point is outside the target object.
359
+ #
360
+ def gesture_from(x, y, speed, distance, direction, optional_params = {:button => :Left, :isDrag => false})
361
+ begin
362
+ raise ArgumentError.new( "Coordinate x:#{x} x_abs:#{x} outside object." ) unless ( x <= attribute( 'width' ).to_i and x >= 0 )
363
+ raise ArgumentError.new( "Coordinate y:#{y} y_abs:#{y} outside object." ) unless ( y <= attribute( 'height' ).to_i and y >= 0 )
364
+
365
+ x_absolute = attribute('x_absolute').to_i + x.to_i
366
+ y_absolute = attribute('y_absolute').to_i + y.to_i
367
+
368
+ params = {:gesture_type => :MouseGestureFromCoordinates, :x => x_absolute, :y => y_absolute, :speed => speed, :distance => distance, :direction => direction}
369
+
370
+ params.merge!(optional_params)
371
+ do_gesture(params)
372
+ do_sleep(speed)
373
+
374
+
375
+ rescue Exception => e
376
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed gesture_from with x \"#{x}\", y \"#{y}\", speed \"#{speed.to_s}\", distance \"#{distance.to_s}\", button \".;#{identity};gesture;"
377
+ Kernel::raise e
378
+ end
379
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation gesture_from executed successfully with x \"#{x}\", y \"#{y}\", speed \"#{speed.to_s}\", distance \"#{distance.to_s}\".;#{identity};gesture;"
380
+ nil
381
+ end
382
+
383
+ # == description
384
+ # Perform a gesture with the object, ending the gesture at the center of another object.
385
+ #
386
+ # == arguments
387
+ # target_object
388
+ # TestObject
389
+ # description: The object where the gesture should end.
390
+ # example: @app.Node
391
+ #
392
+ # duration
393
+ # Numeric
394
+ # description: Duration of the gesture in seconds. The value may be an interger or a fractional value as a floating point number.
395
+ # example: 1
396
+ #
397
+ # optional_params
398
+ # Hash
399
+ # description: This method supports :use_tap_screen, :isDrag and :button optional arguments. The first two can be either true or false, for :button values please see [link="#buttons_table"]the buttons table[/link].
400
+ # example: { :button => :Right }
401
+ # default: { :use_tap_screen => 'false', :isDrag => false, :button => :Left }
402
+ #
403
+ # == returns
404
+ # NilClass
405
+ # description: Always returns nil
406
+ # example: nil
407
+ #
408
+ # == exceptions
409
+ # ArgumentError
410
+ # description: One of the arguments is not valid
411
+ def gesture_to_object(target_object, duration, optional_params = {:button => :Left, :isDrag => false})
412
+
413
+ begin
414
+ # change the format for api consitency
415
+ use_tap_screen = optional_params[:use_tap_screen].nil? ? MobyUtil::Parameter[ @sut.id][ :use_tap_screen, 'false'] :
416
+ optional_params[:use_tap_screen].to_s
417
+ optional_params[:useTapScreen] = use_tap_screen
418
+
419
+
420
+
421
+ params = {:gesture_type => :MouseGestureTo, :speed => duration}
422
+ params[:targetId] = target_object.id
423
+ params[:targetType] = target_object.attribute('objectType')
424
+ params.merge!(optional_params)
425
+ do_gesture(params)
426
+ do_sleep(duration)
427
+
428
+ rescue Exception => e
429
+
430
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed gesture_to_object with button.;#{identity};drag;"
431
+ Kernel::raise e
432
+
433
+ end
434
+
435
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation gesture_to_object executed successfully with button.;#{identity};drag;"
436
+
437
+ nil
438
+
439
+ end
440
+
441
+ # == description
442
+ # Perform a gesture following a track of points.
443
+ #
444
+ # == arguments
445
+ # points
446
+ # Array
447
+ # description: Each element of this Array defines a point of the gesture as a Hash. Three keys with Integer values are defined for a point: the coordinate as "x" and "y" keys and "interval" as seconds (Note that this is likely a very short time, i.e. fraction of a second).
448
+ # example: [{"x" => 200,"y" => 100, "interval" => 0.15},{"x" => 200,"y" => 110, "interval" => 0.30}]
449
+ #
450
+ # duration
451
+ # Numeric
452
+ # description: Duration of the gesture in seconds. The value may be an interger or a fractional value as a floating point number.
453
+ # example: 1
454
+ #
455
+ # mouse_details
456
+ # Hash
457
+ # description: Mouse usage details can be defined by setting the :press, :release and :isDrag keys to true or false. Valid values for the :button key are described in [link="#buttons_table"]the buttons table[/link].
458
+ # example: { :press => true, :release => true, :button => :Right, :isDrag => false}
459
+ # default: { :press => true, :release => true, :button => :Left, :isDrag => true}
460
+ #
461
+ # optional_params
462
+ # Hash
463
+ # description: This method only supports the :use_tap_screen optional parameter.
464
+ # example: { :use_tap_screen => true }
465
+ # default: { :use_tap_screen => false }
466
+ #
467
+ # == returns
468
+ # NilClass
469
+ # description: Always returns nil
470
+ # example: nil
471
+ #
472
+ # == exceptions
473
+ # ArgumentError
474
+ # description: One of the arguments is not valid
475
+ def gesture_points( points, duration, mouse_details = { :press => true, :release => true, :button => :Left, :isDrag => true}, optional_params = {} )
476
+
477
+ begin
478
+
479
+ use_tap_screen = optional_params[:use_tap_screen].nil? ? MobyUtil::Parameter[ @sut.id][ :use_tap_screen, 'false'] :
480
+ optional_params[:use_tap_screen].to_s
481
+ optional_params[:useTapScreen] = use_tap_screen
482
+
483
+ mouse_details[:press] = true unless mouse_details.has_value?(:press)
484
+ mouse_details[:release] = true unless mouse_details.has_value?(:release)
485
+ mouse_details[:button] = :Left unless mouse_details.has_value?(:button)
486
+ mouse_details[:isDrag] = true unless mouse_details.has_value?(:isDrag)
487
+
488
+ raise ArgumentError.new( "Invalid button." ) unless @@_valid_buttons.include?(mouse_details[:button])
489
+
490
+ command = command_params #in qt_behaviour
491
+ command.command_name('MouseGesturePoints')
492
+ params = {'mouseMove'=>'true'}
493
+
494
+ params['button'] = @@_buttons_map[mouse_details[:button]]
495
+ params['press'] = 'false' unless mouse_details[:press]
496
+ params['release'] = 'false' unless mouse_details[:release]
497
+ params['isDrag'] = 'true' if mouse_details[:isDrag]
498
+ params.merge!(optional_params)
499
+
500
+
501
+ millis = duration.to_f
502
+ millis = millis*1000
503
+ speed = millis.to_i
504
+ params['speed'] = speed.to_s
505
+ command.command_params(params)
506
+ point_string = ""
507
+ points.each { |point| point_string << point["x"].to_s << "," << point["y"].to_s << "," << (point["interval"]*1000).to_i.to_s << ";"}
508
+ command.command_value(point_string)
509
+
510
+ @sut.execute_command(command)
511
+
512
+ do_sleep(duration)
513
+
514
+ rescue Exception => e
515
+
516
+ MobyUtil::Logger.instance.log "behaviour",
517
+ "FAIL;Failed drag_to_object with points \"#{points.to_s}\", duration \"#{duration.to_s}\", mouse_details \"#{mouse_details.to_s}\".;#{identity};gesture_points;"
518
+ Kernel::raise e
519
+
520
+ end
521
+
522
+ MobyUtil::Logger.instance.log "behaviour",
523
+ "PASS;Operation drag_to_object executed successfully with points \"#{points.to_s}\", duration \"#{duration.to_s}\", mouse_details \"#{mouse_details.to_s}\".;#{identity};gesture_points;"
524
+
525
+ nil
526
+ end
527
+
528
+ # == description
529
+ # Drag the object for the given distance.
530
+ # By default a drag is a slow gesture.
531
+ #
532
+ # == arguments
533
+ # direction
534
+ # Symbol
535
+ # description: Direction of the drag. Please see [link="#directions_table"]the directions table[/link] for valid direction symbols.
536
+ # example: :Left
537
+ #
538
+ # Integer
539
+ # description: Direction of the drag as degrees with 0 being up and 90 right.
540
+ # example: 270
541
+ #
542
+ # distance
543
+ # Integer
544
+ # description: Number of pixels that the object is to be dragged.
545
+ # example: 100
546
+ #
547
+ # button
548
+ # Symbol
549
+ # description: The mouse button pressed while the drag is executed can be defined. Please see [link="#buttons_table"]the buttons table[/link] for valid button symbols.
550
+ # example: :Right
551
+ # default: :Left
552
+ #
553
+ # optional_params
554
+ # Hash
555
+ # description: The only optional argument supported by drag is :use_tap_screen.
556
+ # example: { :use_tap_screen => 'true' }
557
+ # default: { :use_tap_screen => 'false' }
558
+ #
559
+ # == returns
560
+ # NilClass
561
+ # description: Always returns nil
562
+ # example: nil
563
+ #
564
+ # == exceptions
565
+ # ArgumentError
566
+ # description: One of the arguments is not valid
567
+ def drag(direction, distance, button = :Left, optional_params = {})
568
+
569
+ begin
570
+ use_tap_screen = optional_params[:use_tap_screen].nil? ? MobyUtil::Parameter[ @sut.id][ :use_tap_screen, 'false'] :
571
+ optional_params[:use_tap_screen].to_s
572
+ optional_params[:useTapScreen] = use_tap_screen
573
+
574
+ speed = calculate_speed( distance, @sut.parameter[ :gesture_drag_speed ] )
575
+ params = {:gesture_type => :MouseGesture, :direction => direction, :speed => speed, :distance => distance, :isDrag => true, :button => button}
576
+ params.merge!(optional_params)
577
+ do_gesture(params)
578
+ do_sleep( speed )
579
+
580
+ rescue Exception => e
581
+
582
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed drag with direction \"#{direction}\", distance \"#{distance}\", button \"#{button.to_s}\".;#{identity};drag;"
583
+ Kernel::raise e
584
+
585
+ end
586
+
587
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation drag executed successfully with direction \"#{direction}\", distance \"#{distance}\", button \"#{button.to_s}\".;#{identity};drag;"
588
+
589
+ nil
590
+ end
591
+
592
+ # == description
593
+ # Drag the object to the given coordinates.
594
+ # By default a drag is a slow gesture.
595
+ #
596
+ # == arguments
597
+ # x
598
+ # Integer
599
+ # description: X coordinate of the target point. The coordinate is an absolute screen coordinate, relative to the display top left corner.
600
+ # example: 300
601
+ #
602
+ # y
603
+ # Integer
604
+ # description: Y coordinate of the target point. The coordinate is an absolute screen coordinate, relative to the display top left corner.
605
+ # example: 300
606
+ #
607
+ # button
608
+ # Symbol
609
+ # description: The mouse button pressed while the drag is executed can be defined. Please see [link="#buttons_table"]the buttons table[/link] for valid button symbols.
610
+ # example: :Right
611
+ # default: :Left
612
+ #
613
+ # optional_params
614
+ # Hash
615
+ # description: The only optional argument supported by drag_to is :use_tap_screen.
616
+ # example: { :use_tap_screen => 'true' }
617
+ # default: { :use_tap_screen => 'false' }
618
+ #
619
+ # == returns
620
+ # NilClass
621
+ # description: Always returns nil
622
+ # example: nil
623
+ #
624
+ # == exceptions
625
+ # ArgumentError
626
+ # description: One of the arguments is not valid
627
+ def drag_to( x, y, button = :Left, optional_params= {} )
628
+
629
+ begin
630
+ use_tap_screen = optional_params[:use_tap_screen].nil? ? MobyUtil::Parameter[ @sut.id][ :use_tap_screen, 'false'] :
631
+ optional_params[:use_tap_screen].to_s
632
+ optional_params[:useTapScreen] = use_tap_screen
633
+
634
+
635
+ distance = distance_to_point(x,y)
636
+ return if distance == 0
637
+
638
+ speed = calculate_speed(distance, @sut.parameter[:gesture_drag_speed])
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
648
+
649
+ end
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
656
+
657
+ # == description
658
+ # Drag the object to the center of another object.
659
+ # By default a drag is a slow gesture.
660
+ #
661
+ # == arguments
662
+ # target_object
663
+ # TestObject
664
+ # description: The object that this object should be dragged to.
665
+ # example: @app.Node
666
+ #
667
+ # button
668
+ # Symbol
669
+ # description: The mouse button pressed while the drag is executed can be defined. Please see [link="#buttons_table"]the buttons table[/link] for valid button symbols.
670
+ # example: :Right
671
+ # default: :Left
672
+ #
673
+ # optional_params
674
+ # Hash
675
+ # description: The only optional argument supported by drag_to_object is :use_tap_screen.
676
+ # example: { :use_tap_screen => 'true' }
677
+ # default: { :use_tap_screen => 'false' }
678
+ #
679
+ # == returns
680
+ # NilClass
681
+ # description: Always returns nil
682
+ # example: nil
683
+ #
684
+ # == exceptions
685
+ # ArgumentError
686
+ # description: One of the arguments is not valid
687
+ def drag_to_object(target_object, button = :Left, optional_params = {})
688
+
689
+ begin
690
+
691
+ use_tap_screen = optional_params[:use_tap_screen].nil? ? MobyUtil::Parameter[ @sut.id][ :use_tap_screen, 'false'] :
692
+ optional_params[:use_tap_screen].to_s
693
+ optional_params[:useTapScreen] = use_tap_screen
694
+
695
+ distance = distance_to_point(target_object.object_center_x, target_object.object_center_y)
696
+ #no drag needed, maybe even attempting to drag to it self
697
+ return if distance == 0
698
+
699
+ speed = calculate_speed(distance, @sut.parameter[:gesture_drag_speed])
700
+ params = {:gesture_type => :MouseGestureTo, :speed => speed, :isDrag => true, :button => button}
701
+ params[:targetId] = target_object.id
702
+ params[:targetType] = target_object.attribute('objectType')
703
+ params.merge!(optional_params)
704
+ do_gesture(params)
705
+ do_sleep(speed)
706
+
707
+ rescue Exception => e
708
+
709
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed drag_to_object with button \"#{button.to_s}\".;#{identity};drag;"
710
+ Kernel::raise e
711
+
712
+ end
713
+
714
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation drag_to_object executed successfully with button \"#{button.to_s}\".;#{identity};drag;"
715
+
716
+ nil
717
+
718
+ end
719
+
720
+ # == description
721
+ # Perform a pointer move starting at the object
722
+ #
723
+ # == arguments
724
+ # direction
725
+ # Symbol
726
+ # description: Direction of the move. Please see [link="#directions_table"]the directions table[/link] for valid direction symbols.
727
+ # example: :Left
728
+ #
729
+ # Integer
730
+ # description: Direction of the move as degrees with 0 being up and 90 right.
731
+ # example: 270
732
+ #
733
+ # distance
734
+ # Integer
735
+ # description: Number of pixels to be moved.
736
+ # example: 100
737
+ #
738
+ # button
739
+ # Symbol
740
+ # description: The mouse button used with the move can be defined. Please see [link="#buttons_table"]the buttons table[/link] for valid button symbols.
741
+ # example: :Right
742
+ # default: :Left
743
+ #
744
+ # optional_params
745
+ # Hash
746
+ # description: The only optional argument supported by drag_to_object is :use_tap_screen.
747
+ # example: { :use_tap_screen => 'true' }
748
+ # default: { :use_tap_screen => 'false' }
749
+ #
750
+ # == returns
751
+ # NilClass
752
+ # description: Always returns nil
753
+ # example: nil
754
+ #
755
+ # == exceptions
756
+ # ArgumentError
757
+ # description: One of the arguments is not valid
758
+ def move(direction, distance, button = :Left, optional_params = {})
759
+
760
+ begin
761
+
762
+ use_tap_screen = optional_params[:use_tap_screen].nil? ? MobyUtil::Parameter[ @sut.id][ :use_tap_screen, 'false'] :
763
+ optional_params[:use_tap_screen].to_s
764
+ optional_params[:useTapScreen] = use_tap_screen
765
+
766
+ speed = calculate_speed( distance, @sut.parameter[ :gesture_drag_speed ] )
767
+ params = {:gesture_type => :MouseGesture, :direction => direction, :speed => speed, :distance => distance, :isDrag => false, :button => button, :isMove => true}
768
+ params.merge!(optional_params)
769
+ do_gesture(params)
770
+ do_sleep( speed )
771
+
772
+ rescue Exception => e
773
+
774
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed move with direction \"#{direction}\", distance \"#{distance}\",.;#{identity};move;"
775
+ Kernel::raise e
776
+
777
+ end
778
+
779
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation move executed successfully with direction \"#{direction}\", distance \"#{distance}\",.;#{identity};move;"
780
+
781
+ nil
782
+ end
783
+
784
+
785
+ # == nodoc
786
+ # utility function for getting the x coordinate of the center of the object, should this be private method?
787
+ def object_center_x
788
+ center_x
789
+ end
790
+
791
+ # == nodoc
792
+ # utility function for getting the y coordinate of the center of the object, should this be private method?
793
+ def object_center_y
794
+ center_y
795
+ end
796
+
797
+
798
+
799
+
800
+ private
801
+
802
+ # Performs the actual gesture operation.
803
+ # Verifies that the parameters are correct and send the command
804
+ # to the sut.
805
+ # gesture_type: :MouseGesture, :MouseGestureTo, :MouseGestureToCoordinates
806
+ # params = {:direction => :Up, duration => 2, :distance =>100, :isDrag =>false, :isMove =>false }
807
+ def do_gesture(params)
808
+ validate_gesture_params!(params)
809
+
810
+ if attribute('objectType') == 'Embedded'
811
+ params['x'] = center_x
812
+ params['y'] = center_y
813
+ params['useCoordinates'] = 'true'
814
+ end
815
+
816
+ command = command_params #in qt_behaviour
817
+ command.command_name(params[:gesture_type].to_s)
818
+ command.command_params( params )
819
+ @sut.execute_command( command )
820
+ end
821
+
822
+ def validate_gesture_params!(params)
823
+ #direction
824
+ if params[:gesture_type] == :MouseGesture or params[:gesture_type] == :MouseGestureFromCoordinates
825
+ if params[:direction].kind_of?(Integer)
826
+ raise ArgumentError.new( "Invalid direction." ) unless 0 <= params[:direction].to_i and params[:direction].to_i <= 360
827
+ else
828
+ raise ArgumentError.new( "Invalid direction." ) unless @@_valid_directions.include?(params[:direction])
829
+ params[:direction] = @@_direction_map[params[:direction]]
830
+ end
831
+ #distance
832
+ params[:distance] = params[:distance].to_i unless params[:distance].kind_of?(Integer)
833
+ raise ArgumentError.new( "Distance must be an integer and greater than zero." ) unless params[:distance] > 0
834
+ elsif params[:gesture_type] == :MouseGestureToCoordinates or params[:gesture_type] == :MouseGestureFromCoordinates
835
+ raise ArgumentError.new("X and Y must be integers.") unless params[:x].kind_of?(Integer) and params[:y].kind_of?(Integer)
836
+ elsif params[:gesture_type] == :MouseGestureTo
837
+ raise ArgumentError.new("targetId and targetType must be defined.") unless params[:targetId] and params[:targetType]
838
+ end
839
+
840
+ #duration/speed
841
+ params[:speed] = params[:speed].to_f unless params[:speed].kind_of?(Numeric)
842
+ raise ArgumentError.new( "Duration must be a number and greated than zero, was:" + params[:speed].to_s) unless params[:speed] > 0
843
+ duration_secs = params[:speed].to_f
844
+ duration_secs = duration_secs*1000
845
+ params[:speed] = duration_secs.to_i
846
+
847
+ #mouseMove true always
848
+ params[:mouseMove] = true
849
+
850
+ params[:button] = :Left unless params[:button]
851
+ raise ArgumentError.new( "Invalid button." ) unless @@_valid_buttons.include?(params[:button])
852
+ params[:button] = @@_buttons_map[params[:button]]
853
+
854
+ if params[:isMove] == true
855
+ params[:press] = 'false'
856
+ params[:release] = 'false'
857
+ end
858
+
859
+ end
860
+
861
+
862
+ def do_sleep(time)
863
+
864
+ if MobyUtil::Parameter[ @sut.id ][ :sleep_disabled, nil ] != 'true'
865
+ time = time.to_f
866
+ time = time * 1.3
867
+ #for flicks the duration of the gesture is short but animation (scroll etc..) may not
868
+ #so wait at least one second
869
+ time = 1 if time < 1
870
+ sleep time
871
+ else
872
+ #store the biggest value which will then be used in multitouch situations to sleep
873
+ MobyUtil::Parameter[ @sut.id ][ :skipped_sleep_time ] = time if time > MobyUtil::Parameter[ @sut.id ][ :skipped_sleep_time, 0]
874
+ end
875
+
876
+ end
877
+
878
+ def calculate_speed(distance, speed)
879
+
880
+ distance = distance.to_f
881
+ speed = speed.to_f
882
+ duration = distance/speed
883
+ duration
884
+
885
+ end
886
+
887
+ def distance_to_point(x, y)
888
+
889
+ x = x.to_i
890
+ y = y.to_i
891
+ dist_x = x - center_x.to_i
892
+ dist_y = y - center_y.to_i
893
+
894
+ return 0 if dist_y == 0 and dist_x == 0
895
+ distance = Math.hypot( dist_x, dist_y )
896
+ distance
897
+
898
+ end
899
+
900
+ # enable hooking for performance measurement & debug logging
901
+ MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
902
+
903
+ end
904
+
905
+ end
906
+ end