testability-driver 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. data/lib/tdriver-devtools/behaviour/xml/rdoc_behaviour_xml_generator.rb +2 -2
  2. data/lib/tdriver-devtools/tdriver-devtools.rb +1 -1
  3. data/lib/tdriver-devtools/tests/feature_tests/lib/custom_rdoc_generator.rb +3 -3
  4. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_composition.rb +6 -1
  5. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_description.rb +5 -3
  6. data/lib/tdriver/base/behaviour/behaviours/object_composition.rb +1 -1
  7. data/lib/tdriver/base/behaviour/factory.rb +225 -225
  8. data/lib/tdriver/base/errors.rb +1 -1
  9. data/lib/tdriver/base/state_object.rb +227 -179
  10. data/lib/tdriver/base/sut/controller.rb +2 -2
  11. data/lib/tdriver/base/sut/factory.rb +190 -182
  12. data/lib/tdriver/base/sut/generic/behaviours/application.rb +69 -25
  13. data/lib/tdriver/base/sut/generic/behaviours/controller.rb +1 -1
  14. data/lib/tdriver/base/sut/generic/behaviours/find.rb +4 -4
  15. data/lib/tdriver/base/sut/generic/behaviours/flash_behaviour.rb +3 -3
  16. data/lib/tdriver/base/sut/generic/behaviours/sut.rb +350 -165
  17. data/lib/tdriver/base/sut/generic/behaviours/switchbox_behaviour.rb +9 -9
  18. data/lib/tdriver/base/sut/generic/behaviours/verification.rb +191 -103
  19. data/lib/tdriver/base/sut/generic/commands/application.rb +1 -1
  20. data/lib/tdriver/base/sut/generic/commands/key_sequence.rb +1 -1
  21. data/lib/tdriver/base/sut/generic/commands/screen_capture.rb +1 -1
  22. data/lib/tdriver/base/sut/generic/plugin.rb +1 -1
  23. data/lib/tdriver/base/sut/sut.rb +5 -1
  24. data/lib/tdriver/base/test_object/abstract.rb +136 -151
  25. data/lib/tdriver/base/test_object/adapter.rb +293 -82
  26. data/lib/tdriver/base/test_object/behaviours/syncronization.rb +20 -17
  27. data/lib/tdriver/base/test_object/behaviours/test_object.rb +159 -532
  28. data/lib/tdriver/base/test_object/cache.rb +1 -1
  29. data/lib/tdriver/base/test_object/factory.rb +254 -605
  30. data/lib/tdriver/base/test_object/identificator.rb +1 -1
  31. data/lib/tdriver/base/test_object/loader.rb +1 -1
  32. data/lib/tdriver/base/test_object/verification.rb +17 -17
  33. data/lib/tdriver/loader.rb +20 -9
  34. data/lib/tdriver/report/report.rb +5 -0
  35. data/lib/tdriver/report/report_creator.rb +2 -2
  36. data/lib/tdriver/report/report_cucumber_listener.rb +4 -4
  37. data/lib/tdriver/report/report_cucumber_reporter.rb +4 -4
  38. data/lib/tdriver/report/report_execution_statistics.rb +22 -22
  39. data/lib/tdriver/report/report_grouping.rb +2 -2
  40. data/lib/tdriver/report/report_javascript.rb +11 -4
  41. data/lib/tdriver/report/report_test_case_run.rb +2 -2
  42. data/lib/tdriver/report/report_test_run.rb +5 -5
  43. data/lib/tdriver/report/report_test_unit.rb +74 -26
  44. data/lib/tdriver/report/report_writer.rb +70 -13
  45. data/lib/tdriver/tdriver.rb +17 -8
  46. data/lib/tdriver/util/common/array.rb +1 -1
  47. data/lib/tdriver/util/common/crc16.rb +1 -1
  48. data/lib/tdriver/util/common/environment.rb +1 -1
  49. data/lib/tdriver/util/common/file.rb +18 -9
  50. data/lib/tdriver/util/common/gem.rb +1 -1
  51. data/lib/tdriver/util/common/hash.rb +21 -0
  52. data/lib/tdriver/util/common/kernel.rb +1 -1
  53. data/lib/tdriver/util/common/loader.rb +5 -2
  54. data/lib/tdriver/util/common/numeric.rb +54 -3
  55. data/lib/tdriver/util/common/retryable.rb +30 -12
  56. data/lib/tdriver/util/common/stackable.rb +185 -0
  57. data/lib/tdriver/util/common/string.rb +21 -5
  58. data/lib/tdriver/util/{dbaccess/dbaccess.rb → database/access.rb} +4 -1
  59. data/lib/tdriver/util/{dbaccess/dbconnection.rb → database/connection.rb} +3 -0
  60. data/lib/tdriver/util/{dbaccess → database}/error.rb +0 -1
  61. data/lib/tdriver/util/{dbaccess → database}/loader.rb +5 -6
  62. data/lib/tdriver/util/{dynamic_attribute_filter.rb → filters/dynamic_attributes.rb} +1 -1
  63. data/lib/tdriver/util/hooking/hooking.rb +477 -0
  64. data/lib/tdriver/util/loader.rb +35 -29
  65. data/lib/tdriver/util/localisation/error.rb +0 -1
  66. data/lib/tdriver/util/localisation/loader.rb +1 -4
  67. data/lib/tdriver/util/localisation/localisation.rb +30 -27
  68. data/lib/tdriver/util/{common.rb → logger/loader.rb} +2 -4
  69. data/lib/tdriver/util/logger/logger.rb +574 -0
  70. data/lib/tdriver/util/operator_data/loader.rb +4 -3
  71. data/lib/tdriver/util/operator_data/operator_data.rb +5 -5
  72. data/lib/tdriver/util/parameter/parameter.rb +7 -1
  73. data/lib/tdriver/util/parameter/parameter_hash.rb +1 -1
  74. data/lib/tdriver/util/parameter/parameter_template.rb +1 -1
  75. data/lib/tdriver/util/parameter/parameter_user_api.rb +28 -20
  76. data/lib/tdriver/util/parameter/parameter_xml.rb +1 -1
  77. data/lib/tdriver/util/plugin/abstract.rb +1 -1
  78. data/lib/tdriver/util/plugin/service.rb +1 -1
  79. data/lib/tdriver/util/{localisation.rb → recorder/loader.rb} +4 -3
  80. data/lib/tdriver/util/recorder/recorder.rb +66 -0
  81. data/lib/tdriver/util/recorder/scripter.rb +258 -0
  82. data/lib/tdriver/util/{stats.rb → statistics/statistics.rb} +7 -8
  83. data/lib/tdriver/util/user_data/error.rb +0 -1
  84. data/lib/tdriver/util/user_data/loader.rb +1 -2
  85. data/lib/tdriver/util/user_data/user_data.rb +6 -6
  86. data/lib/tdriver/util/video/camera.rb +67 -0
  87. data/lib/tdriver/util/video/camera_linux.rb +139 -0
  88. data/lib/tdriver/util/video/camera_windows.rb +174 -0
  89. data/lib/tdriver/util/video/loader.rb +31 -0
  90. data/lib/tdriver/util/video/video_utils.rb +139 -0
  91. data/lib/tdriver/util/xml/abstraction.rb +56 -5
  92. data/lib/tdriver/util/xml/builder.rb +2 -5
  93. data/lib/tdriver/util/{parameter.rb → xml/comment.rb} +10 -2
  94. data/lib/tdriver/util/xml/loader.rb +32 -22
  95. data/lib/tdriver/util/xml/nil_node.rb +2 -2
  96. data/lib/tdriver/util/xml/parsers/loader.rb +0 -1
  97. data/lib/tdriver/util/xml/parsers/nokogiri/abstraction.rb +18 -44
  98. data/lib/tdriver/util/xml/parsers/nokogiri/attribute.rb +9 -13
  99. data/lib/tdriver/util/xml/parsers/nokogiri/builder.rb +9 -3
  100. data/lib/tdriver/util/xml/parsers/nokogiri/comment.rb +39 -0
  101. data/lib/tdriver/util/xml/parsers/nokogiri/document.rb +6 -11
  102. data/lib/tdriver/util/xml/parsers/nokogiri/element.rb +2 -122
  103. data/lib/tdriver/util/xml/parsers/nokogiri/loader.rb +26 -16
  104. data/lib/tdriver/util/xml/parsers/nokogiri/node.rb +203 -0
  105. data/lib/tdriver/util/xml/parsers/nokogiri/nodeset.rb +1 -2
  106. data/lib/tdriver/util/xml/parsers/nokogiri/text.rb +2 -20
  107. data/lib/tdriver/util/xml/xml.rb +52 -20
  108. data/lib/tdriver/verify/verify.rb +238 -81
  109. data/xml/behaviours/generic.xml +12 -10
  110. metadata +156 -180
  111. data/lib/tdriver/base/test_object/factory_new.rb +0 -202
  112. data/lib/tdriver/util/hooking.rb +0 -434
  113. data/lib/tdriver/util/logger.rb +0 -506
  114. data/lib/tdriver/util/recorder.rb +0 -297
  115. data/lib/tdriver/util/video_utils.rb +0 -384
  116. data/lib/tdriver/util/xml/nil_element.rb +0 -89
@@ -17,10 +17,11 @@
17
17
  ##
18
18
  ############################################################################
19
19
 
20
-
21
20
  # user data inputs related errors
22
21
  require File.expand_path( File.join( File.dirname( __FILE__ ), 'error.rb' ) )
23
-
24
- # user data inputs module implementation
22
+ #
23
+ # user data inputs module implementation
25
24
  require File.expand_path( File.join( File.dirname( __FILE__ ), 'operator_data.rb' ) )
25
+ #
26
+
26
27
 
@@ -61,11 +61,11 @@ module MobyUtil
61
61
  Kernel::raise OperatorDataNotFoundError.new( "Search string parameter cannot be nil" ) if operator_data_lname == nil
62
62
 
63
63
  # Get Localization parameters for DB Connection
64
- db_type = MobyUtil::Parameter[ :operator_data_db_type, nil ].to_s.downcase
65
- host = MobyUtil::Parameter[ :operator_data_server_ip ]
66
- username = MobyUtil::Parameter[ :operator_data_server_username ]
67
- password = MobyUtil::Parameter[ :operator_data_server_password ]
68
- database_name = MobyUtil::Parameter[ :operator_data_server_database_name ]
64
+ db_type = $parameters[ :operator_data_db_type, nil ].to_s.downcase
65
+ host = $parameters[ :operator_data_server_ip ]
66
+ username = $parameters[ :operator_data_server_username ]
67
+ password = $parameters[ :operator_data_server_password ]
68
+ database_name = $parameters[ :operator_data_server_database_name ]
69
69
 
70
70
  db_connection = DBConnection.new( db_type, host, database_name, username, password )
71
71
 
@@ -278,8 +278,14 @@ module MobyUtil
278
278
 
279
279
  end
280
280
 
281
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
281
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
282
282
 
283
283
  end # Parameter
284
284
 
285
285
  end # MobyUtil
286
+
287
+ # set global variable pointing to parameter class
288
+ $parameters = MobyUtil::Parameter
289
+
290
+ # set global variable pointing to parameter API class
291
+ $parameters_api = MobyUtil::ParameterUserAPI
@@ -97,7 +97,7 @@ module MobyUtil
97
97
 
98
98
  end
99
99
 
100
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
100
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
101
101
 
102
102
  end # ParameterHash
103
103
 
@@ -113,7 +113,7 @@ module MobyUtil
113
113
 
114
114
  end
115
115
 
116
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
116
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
117
117
 
118
118
  end # ParameterTemplates
119
119
 
@@ -21,63 +21,71 @@ module MobyUtil
21
21
 
22
22
  class ParameterUserAPI
23
23
 
24
- include Singleton
24
+ #include Singleton
25
25
 
26
- def []=( key, value )
26
+ def self.instance
27
27
 
28
- MobyUtil::Parameter[ key ] = value
28
+ warn("warning: #{ self.name } is static class, use MobyUtil::ParameterUserAPI#method instead of using instance method")
29
+
30
+ MobyUtil::ParameterUserAPI
31
+
32
+ end
33
+
34
+ def self.[]=( key, value )
35
+
36
+ $parameters[ key ] = value
29
37
 
30
38
  end
31
39
 
32
- def []( *args )
40
+ def self.[]( *args )
33
41
 
34
- MobyUtil::Parameter[ *args ]
42
+ $parameters[ *args ]
35
43
 
36
44
  end
37
45
 
38
- def fetch( *args, &block )
46
+ def self.fetch( *args, &block )
39
47
 
40
- MobyUtil::Parameter.fetch( *args, &block )
48
+ $parameters.fetch( *args, &block )
41
49
 
42
50
  end
43
51
 
44
- def files
52
+ def self.files
45
53
 
46
- MobyUtil::Parameter.files
54
+ $parameters.files
47
55
 
48
56
  end
49
57
 
50
- def clear
58
+ def self.clear
51
59
 
52
- MobyUtil::Parameter.instance.clear
60
+ $parameters.instance.clear
53
61
 
54
62
  end
55
63
 
56
- def load_xml( filename )
64
+ def self.load_xml( filename )
57
65
 
58
- MobyUtil::Parameter.instance.load_parameters_xml( filename )
66
+ $parameters.instance.load_parameters_xml( filename )
59
67
 
60
68
  end
61
69
 
62
- def reset( *keys )
70
+ def self.reset( *keys )
63
71
 
64
- MobyUtil::Parameter.instance.reset_parameters
72
+ $parameters.instance.reset_parameters
65
73
 
66
74
  end
67
75
 
68
- def inspect
76
+ def self.inspect
69
77
 
70
- MobyUtil::Parameter.inspect
78
+ $parameters.inspect
71
79
 
72
80
  end
73
81
 
74
- def to_s
82
+ def self.to_s
75
83
 
76
- MobyUtil::Parameter.to_s
84
+ $parameters.to_s
77
85
 
78
86
  end
79
87
 
80
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
88
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
81
89
 
82
90
  end # ParameterUserAPI
83
91
 
@@ -256,7 +256,7 @@ module MobyUtil
256
256
 
257
257
  end
258
258
 
259
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
259
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
260
260
 
261
261
  end # ParameterXml
262
262
 
@@ -53,7 +53,7 @@ module MobyUtil
53
53
  end
54
54
 
55
55
  # enable hooking for performance measurement & debug logging
56
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
56
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
57
57
 
58
58
  end # Plugin
59
59
 
@@ -193,7 +193,7 @@ module MobyUtil
193
193
  end
194
194
 
195
195
  # enable hooking for performance measurement & debug logging
196
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
196
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
197
197
 
198
198
  end # PluginService
199
199
 
@@ -17,8 +17,9 @@
17
17
  ##
18
18
  ############################################################################
19
19
 
20
+ # Recorder module
21
+ require File.expand_path( File.join( File.dirname( __FILE__ ), 'recorder.rb' ) )
20
22
 
21
- STDOUT.puts "Please require 'util/localisation/loader.rb' instead of 'util/localisation.rb'"
22
-
23
- require File.expand_path( File.join( File.dirname( __FILE__ ), 'localisation/loader.rb' ) )
23
+ # Scripter module
24
+ require File.expand_path( File.join( File.dirname( __FILE__ ), 'scripter.rb' ) )
24
25
 
@@ -0,0 +1,66 @@
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 Testability Driver.
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
+ # Class for recording scripts from qt applications.
21
+ # Complete test script recording not supported.
22
+ # Application must be running when recording is started and
23
+ # must not be closed as a during the recording.
24
+
25
+ module MobyUtil
26
+
27
+ class Recorder
28
+
29
+ #TODO detect app start for later versions...
30
+ def self.start_rec( app )
31
+
32
+ #Kernel::raise ArgumentError.new("Application must be defined.") unless app
33
+ app.check_type( MobyBase::TestObject, "Wrong argument type $1 for application object (expected $2)" )
34
+
35
+ app.start_recording
36
+
37
+ end
38
+
39
+ # Prints the recorded events as an tdriver script fragment.
40
+ def self.print_script( sut, app, object_identificators = ['text','icontext','label'] )
41
+
42
+ # verify that sut type is type of MobyBase::SUT
43
+ #Kernel::raise ArgumentError.new("Sut must be defined.") unless sut
44
+ sut.check_type( MobyBase::SUT, "Wrong argument type $1 for SUT (expected $2)" )
45
+
46
+ #Kernel::raise ArgumentError.new("Application must be defined.") unless app
47
+ app.check_type( MobyBase::TestObject, "Wrong argument type $1 for application object (expected $2)" )
48
+
49
+ #Kernel::raise ArgumentError.new("Object identificators must be set, use defaults if not sure what the use.") unless object_identificators
50
+ object_identificators.check_type( Array, "Wrong argument type $1 for object identificators (expected $2)" )
51
+
52
+ xml_source = app.print_recordings
53
+
54
+ app.stop_recording
55
+
56
+ MobyUtil::Scripter.new( sut.id, object_identificators ).write_fragment( MobyBase::StateObject.new( xml_source ), app.name )
57
+
58
+ end
59
+
60
+ # enable hooking for performance measurement & debug logging
61
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
62
+
63
+ end # Recorder
64
+
65
+ end # MobyUtil
66
+
@@ -0,0 +1,258 @@
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 Testability Driver.
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 MobyUtil
21
+
22
+ class Scripter
23
+
24
+ def initialize(sut_id, object_identificators)
25
+
26
+ @_object_identificators = object_identificators
27
+
28
+ @_tap_max_time = $parameters[sut_id][:record_tap_time_treshold].to_i
29
+ @_tap_min_distance = $parameters[sut_id][:record_move_treshold].to_i
30
+
31
+ end
32
+
33
+ def write_fragment(xml_as_object, app_name)
34
+
35
+ script = "# Insert the script fragment below into your test \n"
36
+ script << "# Add verification points if needed. \n \n"
37
+ script << "# For testing the script! Do not include in your own test scripts. \n"
38
+ script << "@app = sut.application(:name =>'" << app_name << "') \n"
39
+ script << "# To test the script make sure the application is in the same state as it was when recording was started. \n\n"
40
+ script << "#################################### \n"
41
+ script << "# Begin recorded script \n"
42
+ script << "#################################### \n \n"
43
+
44
+ event_list = xml_as_object.events
45
+ event_count = event_list.attribute('eventCount').to_i
46
+
47
+ mouse_down = false
48
+ points = Array.new
49
+ active_target = nil
50
+ scripting = false;
51
+ mouse_status = 0
52
+ previous_time = nil
53
+ event = nil
54
+
55
+ for i in 0...event_count
56
+
57
+ event = event_list.event(:id => i.to_s)
58
+ type = event.name
59
+
60
+ previous_time = event.attribute('timeStamp').to_i unless previous_time
61
+
62
+ if type == 'MouseButtonPress'
63
+ active_target = get_target_details(event.child(:id => i.to_s))
64
+ scripting = true
65
+ mouse_status = 1
66
+ end
67
+
68
+ duration = get_duration(previous_time, event.attribute('timeStamp').to_i)
69
+
70
+ point = {'x' => event.attribute('windowX'), 'y' => event.attribute('windowY'), 'interval' => duration}
71
+ points.push(point) if scripting
72
+
73
+ previous_time = event.attribute('timeStamp').to_i
74
+
75
+ if type == 'MouseButtonRelease' and scripting
76
+
77
+ #mouse status based on the previous (if target changed no press)
78
+ mouse_status = 3 if mouse_status == 1
79
+ mouse_status = 2 if mouse_status == 0
80
+ script << generate_command(active_target, points, mouse_status) << "\n"
81
+ points.clear
82
+ active_target = nil
83
+ scripting = false
84
+
85
+ end
86
+ end
87
+
88
+ if scripting and event
89
+
90
+ script << generate_command(active_target, points, mouse_status) << "\n"
91
+
92
+ end
93
+
94
+ script << "\n"
95
+ script << "#################################### \n"
96
+ script << "# End recorded script \n"
97
+ script << "#################################### \n"
98
+ script
99
+
100
+ end
101
+
102
+ private
103
+
104
+ def add_command( mouse_status, active_target, points, duration )
105
+
106
+ fragment << fragment
107
+
108
+ end
109
+
110
+ def get_target_details(test_object)
111
+
112
+ target = test_object.type
113
+ params = Array.new
114
+
115
+ params.push(":name=>'#{ test_object.name }'")
116
+
117
+ if test_object.name.empty?
118
+
119
+ params.clear
120
+
121
+ @_object_identificators.each do |attribute|
122
+
123
+ begin
124
+
125
+ value = test_object.attribute(attribute)
126
+ params.push(":#{ attribute } => '#{ value }'") unless value == ""
127
+
128
+ rescue MobyBase::AttributeNotFoundError
129
+
130
+ end
131
+
132
+ end
133
+
134
+ end
135
+
136
+ if params.size > 0
137
+
138
+ target << "( "
139
+
140
+ until params.size == 0
141
+
142
+ target << params.pop
143
+ target << ", " if params.size > 0
144
+
145
+ end
146
+
147
+ target << " )"
148
+
149
+ end
150
+
151
+ target
152
+ end
153
+
154
+ # mouse_status:
155
+ # 0 = no press or release
156
+ # 1 = press, no release
157
+ # 2 = release, no press
158
+ # 3 = press and release
159
+ def generate_command(target_details, points, mouse_status)
160
+
161
+ command = "@app."
162
+
163
+ if valid_gesture?(points)
164
+
165
+ command << target_details << ".gesture_points(\n\t[\n"
166
+ duration = 0
167
+
168
+ for i in 0...points.size
169
+
170
+ value = points[ i ]
171
+ command << "\t\t{'x' => " << value[ "x" ].to_s << ", 'y' => " << value[ "y" ].to_s << ", 'interval' => " << value[ "interval" ].to_s << " }"
172
+ command << ", \n" unless i == points.size - 1
173
+ duration = duration + value[ 'interval' ]
174
+
175
+ end
176
+
177
+ command << "\n\t], \n\t" << duration.to_s << ", \n\t"
178
+
179
+ case mouse_status
180
+ when 0
181
+ command << "{ :press => false, :release => false }"
182
+ when 1
183
+ command << "{ :press => true, :release => false }"
184
+ when 2
185
+ command << "{ :press => false, :release => true }"
186
+ when 3
187
+ command << "{ :press => true, :release => true }"
188
+ end
189
+
190
+ command << "\n)"
191
+
192
+ command
193
+
194
+ elsif mouse_status > 0
195
+
196
+ duration = 0
197
+
198
+ points.each{|value| duration = duration + value['interval']}
199
+
200
+ if mouse_status == 1
201
+
202
+ command << target_details << ".tap_down"
203
+
204
+ elsif duration < @_tap_max_time
205
+
206
+ command << target_details << ".tap"
207
+
208
+ else
209
+
210
+ command << target_details << ".long_tap( " << duration.to_s << " )"
211
+
212
+ end
213
+
214
+ end
215
+ end
216
+
217
+ def valid_gesture?(points)
218
+
219
+ return false if points.size < 2
220
+
221
+ min_x = -1
222
+ max_x = -1
223
+ min_y = -1
224
+ max_y = -1
225
+
226
+ for i in 0...points.size
227
+
228
+ value = points[i]
229
+
230
+ x = value['x'].to_i
231
+ y = value['y'].to_i
232
+
233
+ min_x = x if x < min_x or min_x == -1
234
+ max_x = x if x > max_x or max_x == -1
235
+ min_y = y if y < min_y or min_y == -1
236
+ max_y = y if y > max_y or max_y == -1
237
+
238
+ end
239
+
240
+ return false if (max_x - min_x).abs < @_tap_min_distance and (max_y - min_y).abs < @_tap_min_distance
241
+
242
+ true
243
+ end
244
+
245
+ def get_duration(start_time, end_time)
246
+ duration_millis = end_time - start_time
247
+ #we want this in second
248
+ duration_millis = duration_millis.to_f
249
+ duration_secs = duration_millis / 1000
250
+ duration_secs
251
+ end
252
+
253
+ # enable hooking for performance measurement & debug logging
254
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
255
+
256
+ end # Scripter
257
+
258
+ end # MobyUtil