testability-driver-qt-sut-plugin 0.9.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/application.rb +11 -8
  2. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/configure_behaviour.rb +3 -3
  3. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/events.rb +76 -74
  4. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/find.rb +2 -0
  5. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/fixture.rb +10 -4
  6. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/gesture.rb +49 -42
  7. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/infologger.rb +0 -9
  8. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/locale_db.rb +5 -0
  9. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/record.rb +11 -1
  10. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/sut.rb +441 -324
  11. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/synchronization.rb +32 -11
  12. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/treewidgetitemcolumn.rb +54 -34
  13. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/view_item.rb +26 -26
  14. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/webkit.rb +61 -21
  15. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/widget.rb +528 -344
  16. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/application.rb +16 -138
  17. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/find_object.rb +3 -67
  18. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/fixture.rb +4 -18
  19. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/plugin.rb +1 -1
  20. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/adapter.rb +166 -149
  21. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/communication.rb +80 -75
  22. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/util/find_object_generator.rb +93 -0
  23. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/util/message_composer.rb +161 -0
  24. data/xml/behaviour/qt.xml +26 -26
  25. data/xml/template/qt.xml +9 -7
  26. metadata +7 -6
  27. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/fixture.rb +0 -45
@@ -21,90 +21,95 @@ require 'zlib'
21
21
 
22
22
  module MobyController
23
23
 
24
- module QT
24
+ module QT
25
25
 
26
- module Comms
26
+ module Comms
27
27
 
28
- # Command types
29
- ERROR_MSG = 0
30
- VALID_MSG = 1
31
- OK_MESSAGE = "OK"
28
+ # Command types
29
+ ERROR_MSG = 0
30
+ VALID_MSG = 1
31
+ OK_MESSAGE = "OK"
32
32
 
33
- class Inflator
33
+ class Inflator
34
34
 
35
- def self.inflate( response )
36
- # strip 4 extra bytes written by qt compression, return empty string if no raw data found, otherwise inflate it
37
- ( raw_data = response[ 4 .. -1 ] ).empty? ? "" : Zlib::Inflate.inflate( raw_data )
38
- end
35
+ def self.inflate( response )
36
+ # strip 4 extra bytes written by qt compression, return empty string if no raw data found, otherwise inflate it
37
+ ( raw_data = response[ 4 .. -1 ] ).empty? ? "" : Zlib::Inflate.inflate( raw_data )
38
+ end
39
39
 
40
- # enable hooking for performance measurement & debug logging
41
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
40
+ # enable hooking for performance measurement & debug logging
41
+ MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
42
42
 
43
- end
43
+ end
44
44
 
45
45
  # deprecated: see send_service_request#adapter.rb
46
- # Wrapper for protocol message.
47
- class QTResponse
46
+ # Wrapper for protocol message.
47
+ class QTResponse
48
48
 
49
- attr_accessor :msg_body, :flag, :crc, :message_id
49
+ attr_accessor :msg_body, :flag, :crc, :message_id
50
50
 
51
51
  # deprecated: see send_service_request#adapter.rb
52
- # Initialize QT Response.
53
- # == params
54
- # command_flag Indicator flad for message type (error or ok)
55
- # message_code 0 or an error code
56
- # msg_body Body of the message. For command a simple "OK" message for ui state the xml document as string
57
- # == returns
58
- def initialize( command_flag, msg_body, crc, message_id )
52
+ # Initialize QT Response.
53
+ # == params
54
+ # command_flag Indicator flad for message type (error or ok)
55
+ # message_code 0 or an error code
56
+ # msg_body Body of the message. For command a simple "OK" message for ui state the xml document as string
57
+ # == returns
58
+ def initialize( command_flag, msg_body, crc, message_id )
59
59
 
60
60
 
61
- @flag, @msg_body, @crc, @message_id = command_flag, msg_body, crc, message_id
61
+ @flag, @msg_body, @crc, @message_id = command_flag, msg_body, crc, message_id
62
62
 
63
- end
63
+ end
64
64
 
65
65
  # deprecated: see send_service_request#adapter.rb
66
- def validate_message( msg_id )
67
-
68
- #check that response matches the request
69
- if @message_id != msg_id
70
-
71
- MobyUtil::Logger.instance.log "fatal" , "Response to request did not match: \"#{@message_id}\"!=\"#{msg_id.to_s}\""
72
- MobyUtil::Logger.instance.log "fatal" , @msg_body
73
-
74
- Kernel::raise RuntimeError.new("Response to request did not match: \"#{@message_id}\"!=\"#{msg_id.to_s}\"")
75
-
76
- end
77
-
78
- #raise error if error flag
79
- Kernel::raise RuntimeError.new( @msg_body ) if @flag == Comms::ERROR_MSG
80
-
81
- end
66
+ def validate_message( msg_id )
67
+
68
+ #check that response matches the request
69
+ if @message_id != msg_id
70
+
71
+ MobyUtil::Logger.instance.log "fatal" , "Response to request did not match: \"#{@message_id}\"!=\"#{msg_id.to_s}\""
72
+ MobyUtil::Logger.instance.log "fatal" , @msg_body
73
+
74
+ Kernel::raise RuntimeError.new("Response to request did not match: \"#{@message_id}\"!=\"#{msg_id.to_s}\"")
75
+
76
+ end
77
+
78
+ #raise error if error flag
79
+ if @flag == Comms::ERROR_MSG
80
+ if @msg_body =~ /The application with Id \d+ is no longer available/
81
+ Kernel::raise MobyBase::ApplicationNotAvailableError.new( @msg_body)
82
+ else
83
+ Kernel::raise RuntimeError.new( @msg_body )
84
+ end
85
+ end
86
+ end
82
87
 
83
- # enable hooking for performance measurement & debug logging
84
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
88
+ # enable hooking for performance measurement & debug logging
89
+ MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
85
90
 
86
- end #class
91
+ end #class
87
92
 
88
- # Message generator for qt tas messages
89
- class MessageGenerator
93
+ # Message generator for qt tas messages
94
+ class MessageGenerator
90
95
 
91
- def self.generate( message_data, message_flag = VALID_MSG )
96
+ def self.generate( message_data, message_flag = VALID_MSG )
92
97
 
93
- MobyController::QT::Comms::QtMessage.new( message_flag, message_data )
98
+ MobyController::QT::Comms::QtMessage.new( message_flag, message_data )
94
99
 
95
- end
100
+ end
96
101
 
97
- # enable hooking for performance measurement & debug logging
98
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
102
+ # enable hooking for performance measurement & debug logging
103
+ MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
99
104
 
100
- end
105
+ end
101
106
 
102
- class QtMessage
107
+ class QtMessage
103
108
 
104
- attr_reader :flag, :data, :crc, :compression, :size
105
- attr_accessor :message_id
109
+ attr_reader :flag, :data, :crc, :compression, :size
110
+ attr_accessor :message_id
106
111
 
107
- def initialize( message_flag, message_data )
112
+ def initialize( message_flag, message_data )
108
113
  # message flag
109
114
  @flag = message_flag
110
115
 
@@ -116,23 +121,23 @@ module MobyController
116
121
 
117
122
  # calculate outgoing message crc; sent in message header to receiver for data validation
118
123
  @crc = CRC::Crc16.crc16_ibm( @data, 0xffff )
119
- end
124
+ end
120
125
 
121
- def make_binary_message( message_id )
126
+ def make_binary_message( message_id )
122
127
 
123
- [ @flag, @size, @crc, @compression, message_id, @data ].pack( 'CISCIa*' )
128
+ [ @flag, @size, @crc, @compression, message_id, @data ].pack( 'CISCIa*' )
124
129
 
125
- end
130
+ end
126
131
 
127
- def compression
128
- @compression
129
- end
132
+ def compression
133
+ @compression
134
+ end
130
135
 
131
- def deflate
132
- @compression = 2
133
- #qUncompress required the data length at the beginning so append it
134
- #the bytes need to be arranged in the below method (see QByteArray::qUncompress)
135
- @data = [
136
+ def deflate
137
+ @compression = 2
138
+ #qUncompress required the data length at the beginning so append it
139
+ #the bytes need to be arranged in the below method (see QByteArray::qUncompress)
140
+ @data = [
136
141
  (@data.size & 0xff000000) >> 24, (@data.size & 0x00ff0000) >> 16,
137
142
  (@data.size & 0x0000ff00) >> 8, (@data.size & 0x000000ff),
138
143
  Zlib::Deflate.deflate( @data, 9)
@@ -141,14 +146,14 @@ module MobyController
141
146
  # update data size
142
147
  @size = @data.size
143
148
 
144
- end
149
+ end
145
150
 
146
- # enable hooking for performance measurement & debug logging
147
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
151
+ # enable hooking for performance measurement & debug logging
152
+ MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
148
153
 
149
- end # class
154
+ end # class
150
155
 
151
- end # module Comms
156
+ end # module Comms
152
157
 
153
- end
158
+ end
154
159
  end
@@ -0,0 +1,93 @@
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
+
21
+
22
+ module MobyUtil
23
+
24
+ module FindObjectGenerator
25
+
26
+ def generate_message
27
+ filters = make_params if MobyUtil::Parameter[ @_sut.id ][ :filter_type, 'none' ] == 'dynamic'
28
+
29
+ params = search_parameters
30
+
31
+ builder = Nokogiri::XML::Builder.new do |xml|
32
+ xml.TasCommands( ( application_details || {} ).merge( :service => "findObject") ) {
33
+ xml.Target{
34
+ add_objects(xml, params)
35
+ xml.Command( :name => 'findObject' ){
36
+ filters.collect{ | name, value |
37
+ xml.param( :name => name, :value => value )
38
+ }
39
+ } if MobyUtil::Parameter[ @_sut.id ][ :filter_type, 'none' ] == 'dynamic'
40
+ } if params and params.size > 0
41
+ }
42
+ end
43
+ builder.to_xml
44
+ end
45
+
46
+ private
47
+
48
+ def add_objects(builder, params)
49
+ parent = builder.parent
50
+ params.each{|objectParams| parent = create_object_node(builder, objectParams, parent)}
51
+ end
52
+
53
+ def create_object_node(builder, params, parent)
54
+ node = Nokogiri::XML::Node.new('object', builder.doc)
55
+ params.keys.each{|key| node[key.to_s] = params[key].to_s}
56
+ parent.add_child(node)
57
+ end
58
+
59
+
60
+ def make_params
61
+ params = {}
62
+
63
+ # get sut paramteres only once, store to local variable
64
+ sut_parameters = MobyUtil::Parameter[ @_sut.id ]
65
+
66
+ params[ 'filterProperties' ] = $last_parameter if sut_parameters[ :filter_properties, nil ]
67
+ params[ 'pluginBlackList' ] = $last_parameter if sut_parameters[ :plugin_blacklist, nil ]
68
+ params[ 'pluginWhiteList' ] = $last_parameter if sut_parameters[ :plugin_whitelist, nil ]
69
+
70
+ case sut_parameters[ :filter_type, 'none' ]
71
+
72
+ when 'dynamic'
73
+
74
+ # updates the filter with the current backtrace file list
75
+ MobyUtil::DynamicAttributeFilter.instance.update_filter( caller( 0 ) )
76
+
77
+ white_list = MobyUtil::DynamicAttributeFilter.instance.filter_string
78
+ params['attributeWhiteList'] = white_list if white_list
79
+
80
+ when 'static'
81
+
82
+ params['attributeBlackList'] = $last_parameter if sut_parameters[ :attribute_blacklist, nil ]
83
+ params['attributeWhiteList'] = $last_parameter if sut_parameters[ :attribute_whitelist, nil ]
84
+
85
+ end
86
+
87
+ params
88
+
89
+ end
90
+
91
+ end
92
+ end
93
+
@@ -0,0 +1,161 @@
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
+
21
+
22
+ module MobyUtil
23
+
24
+ module MessageComposer
25
+
26
+ def make_parametrized_message( service_details, command_name, params, command_params = {} )
27
+
28
+ Nokogiri::XML::Builder.new{
29
+ TasCommands( service_details ) {
30
+ Target( :TasId => "Application" ) {
31
+ Command( ( params || {} ).merge( :name => command_name ) ){
32
+ command_params.collect{ | name, value |
33
+ param( :name => name, :value => value )
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }.to_xml
39
+
40
+ end
41
+
42
+ def make_xml_message( service_details, command_name, params, command_value = nil )
43
+
44
+ Nokogiri::XML::Builder.new{
45
+ TasCommands( service_details ) {
46
+ Target( :TasId => "Application" ) {
47
+ Command( command_value || "", ( params || {} ).merge( :name => command_name ) )
48
+ }
49
+ }
50
+ }.to_xml
51
+
52
+ end
53
+
54
+ def make_fixture_message(fixture_plugin, params)
55
+ Nokogiri::XML::Builder.new{
56
+ TasCommands( :id => params[:application_id].to_s, :service => "fixture", :async => params[:async].to_s ) {
57
+ Target( :TasId => params[:object_id].to_s, :type => params[:object_type].to_s ) {
58
+ Command( :name => "Fixture", :plugin => fixture_plugin, :method => params[:command_name].to_s ) {
59
+ params[:parameters].collect{ | name, value |
60
+ param( :name => name, :value => value )
61
+ }
62
+ }
63
+ }
64
+ }
65
+ }.to_xml
66
+ end
67
+
68
+ def encode_string( source )
69
+ source = source.to_s
70
+ source.gsub!( '&', '&' );
71
+ source.gsub!( '>', '>' );
72
+ source.gsub!( '<', '&lt;' );
73
+ source.gsub!( '"', '&quot;' );
74
+ source.gsub!( '\'', '&apos;' );
75
+ source
76
+ end
77
+
78
+ def make_filters
79
+
80
+ params = {}
81
+
82
+ # get sut paramteres only once, store to local variable
83
+ sut_parameters = MobyUtil::Parameter[ @_sut.id ]
84
+
85
+ params[ 'filterProperties' ] = $last_parameter if sut_parameters[ :filter_properties, nil ]
86
+ params[ 'pluginBlackList' ] = $last_parameter if sut_parameters[ :plugin_blacklist, nil ]
87
+ params[ 'pluginWhiteList' ] = $last_parameter if sut_parameters[ :plugin_whitelist, nil ]
88
+
89
+ case sut_parameters[ :filter_type, 'none' ]
90
+
91
+ when 'dynamic'
92
+
93
+ # updates the filter with the current backtrace file list
94
+ MobyUtil::DynamicAttributeFilter.instance.update_filter( caller( 0 ) )
95
+
96
+ white_list = MobyUtil::DynamicAttributeFilter.instance.filter_string
97
+ params['attributeWhiteList'] = white_list if white_list
98
+
99
+ when 'static'
100
+
101
+ params['attributeBlackList'] = $last_parameter if sut_parameters[ :attribute_blacklist, nil ]
102
+ params['attributeWhiteList'] = $last_parameter if sut_parameters[ :attribute_whitelist, nil ]
103
+
104
+ end
105
+
106
+ params
107
+
108
+ end
109
+
110
+ def state_message
111
+ app_details = { :service => 'uiState', :name => @_application_name, :id => @_application_uid }
112
+ app_details[ :applicationUid ] = @_refresh_args[ :applicationUid ] if @_refresh_args.include?( :applicationUid )
113
+
114
+ case MobyUtil::Parameter[ @_sut.id ][ :filter_type, 'none' ]
115
+ when 'none'
116
+ command_xml = make_xml_message( app_details, 'UiState', @_flags || {} )
117
+ when 'dynamic'
118
+ params = @_flags || {}
119
+ params[ :filtered ] = 'true'
120
+ command_xml = make_parametrized_message( app_details, 'UiState', params, make_filters )
121
+ else
122
+ command_xml = make_parametrized_message( app_details, 'UiState', @_flags || {}, make_filters )
123
+ end
124
+ command_xml
125
+ end
126
+
127
+ def run_message
128
+ #clone to not make changes permanent
129
+ arguments = MobyUtil::Parameter[ @_sut.id ][ :application_start_arguments, "" ].clone
130
+ if @_arguments
131
+ arguments << "," unless arguments.empty?
132
+ arguments << @_arguments
133
+ end
134
+
135
+ parameters = {
136
+ 'application_path' => @_application_name,
137
+ 'arguments' => arguments,
138
+ 'environment' => @_environment,
139
+ 'events_to_listen' => @_events_to_listen,
140
+ 'signals_to_listen' => @_signals_to_listen,
141
+ 'start_command' => @_start_command
142
+ }
143
+
144
+ make_xml_message({:service => 'startApplication'}, 'Run', parameters)
145
+ end
146
+
147
+ def close_message
148
+ sut_id = @_sut.id
149
+
150
+ parameters = {
151
+ 'uid' => @_application_uid,
152
+ 'kill' => ( @_flags || {} )[ :force_kill ] || MobyUtil::Parameter[ sut_id ][ :application_close_kill ],
153
+ 'wait_time' => MobyUtil::Parameter[ sut_id ][ :application_close_wait ]
154
+ }
155
+
156
+ make_xml_message({:service => 'closeApplication', :id => @_application_uid }, 'Close', parameters)
157
+ end
158
+
159
+ end
160
+ end
161
+