testability-driver 1.2.1 → 1.3.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.
Files changed (125) hide show
  1. data/bin/tdriver-devtools +0 -0
  2. data/ext/native_extensions.c +165 -6
  3. data/lib/tdriver-devtools/behaviour/old/xml/update +0 -0
  4. data/lib/tdriver-devtools/behaviour/xml/generate.rb +0 -0
  5. data/lib/tdriver-devtools/behaviour/xml/rdoc_behaviour_xml_generator.rb +15 -1
  6. data/lib/tdriver-devtools/doc/update +0 -0
  7. data/lib/tdriver-devtools/doc/xslt/template.xsl +24 -14
  8. data/lib/tdriver-devtools/doc/xslt/update +0 -0
  9. data/lib/tdriver-devtools/tdriver-devtools.rb +0 -0
  10. data/lib/tdriver-devtools/tests/feature_tests/update +0 -0
  11. data/lib/tdriver/base/behaviour/{behaviour.rb → abstract.rb} +3 -6
  12. data/lib/tdriver/base/behaviour/behaviours/object_abstract.rb +107 -0
  13. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_composition.rb +2 -2
  14. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_description.rb +47 -37
  15. data/lib/tdriver/base/behaviour/factory.rb +260 -382
  16. data/lib/tdriver/base/behaviour/loader.rb +22 -4
  17. data/lib/tdriver/base/controller/abstraction.rb +56 -0
  18. data/lib/tdriver/base/controller/loader.rb +21 -0
  19. data/lib/tdriver/base/loader.rb +3 -1
  20. data/lib/tdriver/base/sut/controller.rb +91 -74
  21. data/lib/tdriver/base/sut/factory.rb +8 -8
  22. data/lib/tdriver/base/sut/generic/behaviours/agent.rb +77 -0
  23. data/lib/tdriver/base/sut/generic/behaviours/sut.rb +116 -96
  24. data/lib/tdriver/base/sut/generic/commands/agent.rb +43 -0
  25. data/lib/tdriver/base/sut/sut.rb +10 -8
  26. data/lib/tdriver/base/test_object/abstract.rb +25 -24
  27. data/lib/tdriver/base/test_object/adapter.rb +67 -44
  28. data/lib/tdriver/base/test_object/behaviours/test_object.rb +79 -20
  29. data/lib/tdriver/base/test_object/factory.rb +45 -15
  30. data/lib/tdriver/base/test_object/xml/adapter.rb +80 -57
  31. data/lib/tdriver/env.rb +0 -0
  32. data/lib/tdriver/loader.rb +0 -0
  33. data/lib/tdriver/matti.rb +0 -0
  34. data/lib/tdriver/report/error_recovery/tdriver_error_recovery.rb +1 -0
  35. data/lib/tdriver/report/report.rb +2 -1
  36. data/lib/tdriver/report/report_crash_file_capture.rb +12 -0
  37. data/lib/tdriver/report/report_creator.rb +6 -2
  38. data/lib/tdriver/report/report_execution_statistics.rb +27 -11
  39. data/lib/tdriver/report/report_graph_generator.rb +59 -0
  40. data/lib/tdriver/report/report_test_case_run.rb +34 -2
  41. data/lib/tdriver/report/report_writer.rb +12 -0
  42. data/lib/tdriver/tdriver.rb +12 -1
  43. data/lib/tdriver/util/agent/loader.rb +22 -0
  44. data/lib/tdriver/util/agent/service.rb +107 -0
  45. data/lib/tdriver/util/common/crc16.rb +17 -10
  46. data/lib/tdriver/util/common/hash.rb +4 -1
  47. data/lib/tdriver/util/common/kernel.rb +11 -0
  48. data/lib/tdriver/util/common/numeric.rb +48 -0
  49. data/lib/tdriver/util/common/object.rb +5 -2
  50. data/lib/tdriver/util/common/string.rb +8 -1
  51. data/lib/tdriver/util/filters/attribute_filter.rb +121 -0
  52. data/lib/tdriver/util/filters/loader.rb +29 -0
  53. data/lib/tdriver/util/fixture/loader.rb +22 -0
  54. data/lib/tdriver/util/fixture/service.rb +157 -0
  55. data/lib/tdriver/util/loader.rb +8 -2
  56. data/lib/tdriver/util/logger/logger.rb +12 -6
  57. data/lib/tdriver/util/other/config.rb +0 -0
  58. data/lib/tdriver/util/parameter/parameter.rb +221 -152
  59. data/lib/tdriver/util/plugin/error.rb +0 -0
  60. data/lib/tdriver/util/video/camera_linux.rb +36 -22
  61. data/lib/tdriver/util/xml/parsers/nokogiri/abstraction.rb +3 -13
  62. data/lib/tdriver/util/xml/parsers/nokogiri/node.rb +13 -8
  63. data/lib/tdriver/util/xml/parsers/nokogiri/nodeset.rb +51 -9
  64. data/lib/tdriver/util/xml/xml.rb +4 -2
  65. data/lib/tdriver/verify/verify.rb +280 -621
  66. data/lib/tdriver/version.rb +1 -1
  67. data/xml/behaviours/generic.xml +34 -0
  68. data/xml/templates/generic.xml +20 -3
  69. metadata +168 -240
  70. data/lib/tdriver-devtools/tests/feature_tests/output/application_closable_0x3f.feature +0 -10
  71. data/lib/tdriver-devtools/tests/feature_tests/output/application_close.feature +0 -15
  72. data/lib/tdriver-devtools/tests/feature_tests/output/application_environment.feature +0 -10
  73. data/lib/tdriver-devtools/tests/feature_tests/output/application_executable_name.feature +0 -10
  74. data/lib/tdriver-devtools/tests/feature_tests/output/application_uid.feature +0 -10
  75. data/lib/tdriver-devtools/tests/feature_tests/output/created.rid +0 -1
  76. data/lib/tdriver-devtools/tests/feature_tests/output/find_find.feature +0 -15
  77. data/lib/tdriver-devtools/tests/feature_tests/output/flash_behaviour_flash.feature +0 -10
  78. data/lib/tdriver-devtools/tests/feature_tests/output/flash_behaviour_flash_images.feature +0 -15
  79. data/lib/tdriver-devtools/tests/feature_tests/output/sut_application.feature +0 -15
  80. data/lib/tdriver-devtools/tests/feature_tests/output/sut_capture_screen.feature +0 -10
  81. data/lib/tdriver-devtools/tests/feature_tests/output/sut_child.feature +0 -10
  82. data/lib/tdriver-devtools/tests/feature_tests/output/sut_clear_verify_blocks.feature +0 -10
  83. data/lib/tdriver-devtools/tests/feature_tests/output/sut_connect.feature +0 -10
  84. data/lib/tdriver-devtools/tests/feature_tests/output/sut_controller_execution_order.feature +0 -10
  85. data/lib/tdriver-devtools/tests/feature_tests/output/sut_controller_execution_order_0x3d.feature +0 -10
  86. data/lib/tdriver-devtools/tests/feature_tests/output/sut_current_application_id.feature +0 -15
  87. data/lib/tdriver-devtools/tests/feature_tests/output/sut_disconnect.feature +0 -10
  88. data/lib/tdriver-devtools/tests/feature_tests/output/sut_dump_count.feature +0 -15
  89. data/lib/tdriver-devtools/tests/feature_tests/output/sut_freeze.feature +0 -10
  90. data/lib/tdriver-devtools/tests/feature_tests/output/sut_frozen.feature +0 -10
  91. data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_application_id.feature +0 -10
  92. data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_object.feature +0 -10
  93. data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_operator_data.feature +0 -10
  94. data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_ui_dump.feature +0 -15
  95. data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_user_information.feature +0 -10
  96. data/lib/tdriver-devtools/tests/feature_tests/output/sut_input.feature +0 -15
  97. data/lib/tdriver-devtools/tests/feature_tests/output/sut_parameter.feature +0 -15
  98. data/lib/tdriver-devtools/tests/feature_tests/output/sut_press_key.feature +0 -10
  99. data/lib/tdriver-devtools/tests/feature_tests/output/sut_received_data.feature +0 -10
  100. data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh.feature +0 -20
  101. data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh_timeout.feature +0 -15
  102. data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh_tries.feature +0 -15
  103. data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh_ui_dump.feature +0 -20
  104. data/lib/tdriver-devtools/tests/feature_tests/output/sut_run.feature +0 -10
  105. data/lib/tdriver-devtools/tests/feature_tests/output/sut_sent_data.feature +0 -10
  106. data/lib/tdriver-devtools/tests/feature_tests/output/sut_state.feature +0 -10
  107. data/lib/tdriver-devtools/tests/feature_tests/output/sut_translate.feature +0 -30
  108. data/lib/tdriver-devtools/tests/feature_tests/output/sut_ui_type.feature +0 -10
  109. data/lib/tdriver-devtools/tests/feature_tests/output/sut_ui_version.feature +0 -10
  110. data/lib/tdriver-devtools/tests/feature_tests/output/sut_unfreeze.feature +0 -10
  111. data/lib/tdriver-devtools/tests/feature_tests/output/sut_update.feature +0 -10
  112. data/lib/tdriver-devtools/tests/feature_tests/output/sut_verify_always.feature +0 -20
  113. data/lib/tdriver-devtools/tests/feature_tests/output/sut_verify_blocks.feature +0 -10
  114. data/lib/tdriver-devtools/tests/feature_tests/output/sut_x_path.feature +0 -10
  115. data/lib/tdriver-devtools/tests/feature_tests/output/sut_xml_data.feature +0 -10
  116. data/lib/tdriver-devtools/tests/feature_tests/output/sut_xml_data_0x3d.feature +0 -10
  117. data/lib/tdriver-devtools/tests/feature_tests/output/sut_xml_data_crc.feature +0 -10
  118. data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_power_down.feature +0 -10
  119. data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_power_status.feature +0 -10
  120. data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_power_up.feature +0 -10
  121. data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_reset.feature +0 -10
  122. data/lib/tdriver-devtools/tests/feature_tests/output/verification_test_object_exists_0x3f.feature +0 -15
  123. data/lib/tdriver/base/behaviour/factory_new.rb +0 -409
  124. data/lib/tdriver/base/test_object/identificator.rb +0 -518
  125. data/lib/tdriver/util/filters/dynamic_attributes.rb +0 -189
@@ -17,12 +17,30 @@
17
17
  ##
18
18
  ############################################################################
19
19
 
20
+ # behaviour abstract class
21
+ #require File.expand_path( File.join( File.dirname( __FILE__ ), 'abstract.rb' ) )
20
22
 
23
+ # factory class
24
+ #require File.expand_path( File.join( File.dirname( __FILE__ ), 'factory.rb' ) )
21
25
 
26
+ [
27
+ # behaviour abstract class
28
+ 'abstract.rb',
22
29
 
23
- # behaviour abstract class
24
- require File.expand_path( File.join( File.dirname( __FILE__ ), 'behaviour' ) )
25
- require File.expand_path( File.join( File.dirname( __FILE__ ), 'factory' ) )
30
+ # behaviour factory class
31
+ 'factory.rb'
32
+
33
+ ].each{ | filename |
34
+
35
+ require File.expand_path(
36
+ File.join( File.dirname( __FILE__ ), filename )
37
+ )
38
+
39
+ }
26
40
 
27
41
  # load generic behaviours
28
- MobyUtil::FileHelper.load_modules( File.expand_path( File.join( File.dirname( __FILE__ ), 'behaviours' ) ) )
42
+ MobyUtil::FileHelper.load_modules(
43
+ File.expand_path(
44
+ File.join( File.dirname( __FILE__ ), 'behaviours' )
45
+ )
46
+ )
@@ -0,0 +1,56 @@
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 MobyController
21
+
22
+ module Abstraction
23
+
24
+ # TODO: document me
25
+ def set_adapter( adapter )
26
+
27
+ @sut_adapter = adapter
28
+
29
+ end
30
+
31
+ # Execute the command(s). Sends output generated by make_message to the device using the @sut_adapter (see base class)
32
+ # == params
33
+ # == returns
34
+ # == raises
35
+ def execute
36
+
37
+ @sut_adapter.send_service_request(
38
+
39
+ *make_message
40
+
41
+ )
42
+
43
+ end
44
+
45
+ private
46
+
47
+ # TODO: document me
48
+ def make_message
49
+
50
+ raise NotImplementedError, "controller not implemented for #{ self.class.name }"
51
+
52
+ end
53
+
54
+ end # Abstraction
55
+
56
+ end # MobyController
@@ -0,0 +1,21 @@
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
+ # command_data controller abstraction class etc.
21
+ require File.expand_path( File.join( File.dirname( __FILE__ ), 'abstraction.rb' ) )
@@ -17,13 +17,15 @@
17
17
  ##
18
18
  ############################################################################
19
19
 
20
-
21
20
  # behaviour abstraction class, factory and all other related modules etc
22
21
  require File.expand_path( File.join( File.dirname( __FILE__ ), 'behaviour/loader' ) )
23
22
 
24
23
  # command_data abstraction class etc.
25
24
  require File.expand_path( File.join( File.dirname( __FILE__ ), 'command_data/loader' ) )
26
25
 
26
+ # command_data controller abstraction class etc.
27
+ require File.expand_path( File.join( File.dirname( __FILE__ ), 'controller/loader' ) )
28
+
27
29
  # sut abstract class, generic sut etc
28
30
  require File.expand_path( File.join( File.dirname( __FILE__ ), 'sut/loader' ) )
29
31
 
@@ -19,110 +19,127 @@
19
19
 
20
20
  module MobyBase
21
21
 
22
- class SutController
22
+ class SutController
23
23
 
24
- attr_accessor :sut_controllers, :execution_order #, :test_object_adapter, :test_object_factory
24
+ attr_accessor :sut_controllers, :execution_order #, :test_object_adapter, :test_object_factory
25
25
 
26
- # Creating new SutController associates SutAdapter to the controller
27
- # == params
28
- # sut_adapter:: MobyController::SutAdapter descendant, e.g. MobyController::QT::SutAdapter
29
- # == raises
26
+ # Creating new SutController associates SutAdapter to the controller
27
+ # == params
28
+ # sut_adapter:: MobyController::SutAdapter descendant, e.g. MobyController::QT::SutAdapter
29
+ # == raises
30
30
  # TypeError:: Wrong argument type $1 for SUT controller (expected $2)
31
- # NameError:: No SUT controller found for %s (%s)
32
- def initialize( sut_controllers, sut_adapter )
31
+ # NameError:: No SUT controller found for %s (%s)
32
+ def initialize( sut_controllers, sut_adapter )
33
33
 
34
- sut_controllers.check_type( String, "Wrong argument type $1 for SUT controller (expected $2)" )
34
+ sut_controllers.check_type String, 'Wrong argument type $1 for SUT controller (expected $2)'
35
35
 
36
- @sut_adapter = sut_adapter
36
+ @sut_adapter = sut_adapter
37
37
 
38
- # empty sut controllers hash
39
- @sut_controllers = {}
38
+ # empty sut controllers hash
39
+ @sut_controllers = {}
40
40
 
41
- # empty sut controller execution order, this will be used when multiple sut controllers given
42
- @execution_order = []
41
+ # empty sut controller execution order, this will be used when multiple sut controllers given
42
+ @execution_order = []
43
43
 
44
- sut_controllers.split(";").each{ | sut_controller |
44
+ sut_controllers.split( ';' ).each{ | sut_type |
45
45
 
46
- begin
46
+ begin
47
47
 
48
- # controller module to extend
49
- controller_module = eval( ( module_name = "MobyController::#{ sut_controller }::SutController" ) )
48
+ # add sut_controller to execution order list
49
+ @execution_order << sut_type
50
50
 
51
- # add sut_controller to execution order list
52
- @execution_order << sut_controller
51
+ # store sut controller
52
+ @sut_controllers[ sut_type ] = "MobyController::#{ sut_type }"
53
53
 
54
- # store controller module to cache
55
- @sut_controllers[ sut_controller ] = module_name.scan( /(.+)::/ )
54
+ # extend controller module
55
+ extend( eval( "#{ @sut_controllers[ sut_type ] }::SutController" ) )
56
56
 
57
- # extend required controller behaviour
58
- self.extend controller_module
57
+ rescue NameError
59
58
 
60
- rescue NameError
59
+ raise MobyBase::ControllerNotFoundError, "No SUT controller found for #{ sut_type } (#{ @sut_controllers[ sut_type ] }::SutController)"
61
60
 
62
- Kernel::raise MobyBase::ControllerNotFoundError.new( 'No SUT controller found for %s (%s)' % [ sut_controller, module_name ] )
61
+ end
63
62
 
64
- end
63
+ }
65
64
 
66
- }
65
+ end
67
66
 
68
- end
67
+ # Function to execute a command on a SutController
68
+ # This method is not meant to be overwritten in descendants.
69
+ #
70
+ # Associates MobyCommand::CommandData implementation based on the MobyCommand class name,
71
+ # by finding implementation from the same module as the SutController instance.
72
+ #
73
+ # example: MobyController::QT::SutController instance associates MobyController::QT::Application (module)
74
+ # implementation to MobyCommand::Application command_data object
75
+ #
76
+ # == params
77
+ # command_data:: MobyCommand::CommandData descendant
78
+ # == returns
79
+ # command_data implementation specific return value
80
+ # == raises
81
+ # TypeError:: Wrong argument type $1 for command_data (expected $2)
82
+ # MobyBase::CommandNotFoundError:: if no implementation is found for the CommandData object
83
+ def execute_command( command_data )
69
84
 
70
- # Function to execute a command on a SutController
71
- # This method is not meant to be overwritten in descendants.
72
- #
73
- # Associates MobyCommand::CommandData implementation based on the MobyCommand class name,
74
- # by finding implementation from the same module as the SutController instance.
75
- #
76
- # example: MobyController::QT::SutController instance associates MobyController::QT::Application (module)
77
- # implementation to MobyCommand::Application command_data object
78
- #
79
- # == params
80
- # command_data:: MobyCommand::CommandData descendant
81
- # == returns
82
- # command_data implementation specific return value
83
- # == raises
84
- # TypeError:: Wrong argument type $1 for command_data (expected $2)
85
- # MobyBase::CommandNotFoundError:: if no implementation is found for the CommandData object
86
- def execute_command( command_data )
87
- command_data.check_type( MobyCommand::CommandData, "Wrong argument type $1 for command_data (expected $2)" )
88
-
89
- @execution_order.each{ | controller |
90
-
91
- begin
92
-
93
- # extend command_data with combinination of command data object name and module name to be extended
94
- eval 'command_data.extend %s::%s' % [ @sut_controllers[ controller ].first.first, command_data.class.name.scan( /::(.+)/ ).first.first ]
85
+ command_data.check_type MobyCommand::CommandData, 'Wrong argument type $1 for command_data (expected $2)'
86
+
87
+ # retrieve controller for command; iterate through each sut controller
88
+ @execution_order.each_with_index do | controller, index |
89
+
90
+ begin
95
91
 
96
- # break if controller associated succesfully
97
- break
92
+ # extend command_data with combinination of corresponding sut specific controller
93
+ command_data.extend eval("#{ @sut_controllers[ controller ] }::#{ command_data.class.name.gsub(/^MobyCommand::/, '') }")
94
+
95
+ break
96
+
97
+ rescue NameError
98
+
99
+ # raise exception only if none controller found
100
+ if ( index + 1 ) == @execution_order.count
98
101
 
99
- rescue NameError
102
+ raise MobyBase::ControllerNotFoundError, "No controller found for command data object #{ command_data.inspect }"
100
103
 
101
- # raise exception only if none controller found
102
- Kernel::raise MobyBase::ControllerNotFoundError.new( 'No controller found for CommandData object %s' % command_data.inspect ) unless controller.object_id != @execution_order.last.object_id
103
104
  end
104
105
 
105
- }
106
-
107
- command_data.set_adapter( @sut_adapter )
106
+ end
107
+
108
+ end
109
+
110
+ # pass sut_adapter for command_data
111
+ command_data.set_adapter( @sut_adapter )
112
+
108
113
  retries = 0
114
+
109
115
  begin
116
+
117
+ # execute the command
110
118
  command_data.execute
111
- rescue Errno::EPIPE, IOError => e
112
- raise if retries == 1
113
- retries += 1
114
- if MobyBase::SUTFactory.instance.connected_suts.include?(@sut_adapter.sut_id.to_sym)
115
- @sut_adapter.disconnect
116
- @sut_adapter.connect(@sut_adapter.sut_id)
117
- end
119
+
120
+ rescue Errno::EPIPE, IOError
121
+
122
+ raise if retries == 1
123
+
124
+ retries += 1
125
+
126
+ if MobyBase::SUTFactory.instance.connected_suts.include?( @sut_adapter.sut_id.to_sym )
127
+
128
+ @sut_adapter.disconnect
129
+
130
+ @sut_adapter.connect( @sut_adapter.sut_id )
131
+
132
+ end
133
+
118
134
  retry
135
+
119
136
  end
120
- end
121
-
122
- # enable hooking for performance measurement & debug logging
123
- TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
137
+
138
+ end # execute_command
124
139
 
140
+ # enable hooking for performance measurement & debug logging
141
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
125
142
 
126
- end # SutController
143
+ end # SutController
127
144
 
128
145
  end # MobyBase
@@ -195,14 +195,14 @@ module MobyBase
195
195
  end
196
196
 
197
197
  # apply sut generic behaviours
198
- MobyBase::BehaviourFactory.instance.apply_behaviour!(
199
-
200
- :object => created_sut,
201
- :object_type => [ 'sut' ],
202
- :sut_type => [ '*', created_sut.ui_type ],
203
- :input_type => [ '*', created_sut.input.to_s ],
204
- :env => [ '*', *sut_env.to_s.split(";") ],
205
- :version => [ '*', created_sut.ui_version.to_s ]
198
+ TDriver::BehaviourFactory.apply_behaviour(
199
+
200
+ :object => created_sut,
201
+ :object_type => [ 'sut' ],
202
+ :sut_type => [ '*', created_sut.ui_type ],
203
+ :input_type => [ '*', created_sut.input.to_s ],
204
+ :env => [ '*', *sut_env.to_s.split(";") ],
205
+ :version => [ '*', created_sut.ui_version.to_s ]
206
206
 
207
207
  )
208
208
 
@@ -0,0 +1,77 @@
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 MobyBehaviour
21
+
22
+ # == description
23
+ # Agent specific commands
24
+ #
25
+ # == behaviour
26
+ # AgentCommands
27
+ #
28
+ # == requires
29
+ # *
30
+ #
31
+ # == input_type
32
+ # *
33
+ #
34
+ # == sut_type
35
+ # *
36
+ #
37
+ # == sut_version
38
+ # *
39
+ #
40
+ # == objects
41
+ # AgentCommandService
42
+ module AgentCommands
43
+
44
+ include MobyBehaviour::Behaviour
45
+
46
+ # == nodoc
47
+ # == description
48
+ # Queries version of used agent
49
+ #
50
+ # == arguments
51
+ # == returns
52
+ # String
53
+ # description: version number in String format
54
+ # example: "1.3"
55
+ #
56
+ # == exceptions
57
+ #
58
+ # == info
59
+ # See SUT#agent method
60
+ def version
61
+
62
+ # execute command/model by using sut controller
63
+ execute_command(
64
+
65
+ # model
66
+ MobyCommand::AgentCommand.new( :command => :version )
67
+
68
+ )
69
+
70
+ end
71
+
72
+ # enable hooking for performance measurement & debug logging
73
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
74
+
75
+ end # AgentCommands
76
+
77
+ end # MobyBehaviour
@@ -51,23 +51,70 @@ module MobyBehaviour
51
51
  :current_application_id, # id of the current appication if set
52
52
  :input, # the input method used for interacting with this sut as a symbol, eg. :key or :touch.
53
53
  :refresh_tries, # number of retries for ui dump on error case
54
- :refresh_timeout # timeout between timeout retry
54
+ :refresh_timeout # timeout between timeout retry
55
55
 
56
56
  )
57
57
 
58
58
  # == nodoc
59
59
  attr_reader(
60
60
 
61
- :xml_data, # sut xml_data
62
- :x_path, # x_path pattern for xml_data
63
- :ui_type, # type of the UI used on the sut, ie. s60, qt, windows
64
- :ui_version, # version of the ui used on the sut, ie 3.2.3
65
- :frozen, # flag that tells if the ui dump getting is disabled
66
- :xml_data_crc, # crc of the previous ui state message
67
- :verify_blocks # verify blocks
61
+ :xml_data, # sut xml_data
62
+ :x_path, # x_path pattern for xml_data
63
+ :ui_type, # type of the UI used on the sut, ie. s60, qt, windows
64
+ :ui_version, # version of the ui used on the sut, ie 3.2.3
65
+ :frozen, # flag that tells if the ui dump getting is disabled
66
+ :xml_data_checksum, # checksum of the previous ui state message
67
+ :verify_blocks, # verify blocks
68
+ :sut
68
69
 
69
70
  )
70
71
 
72
+ private
73
+
74
+ # this method will be automatically invoked after module is extended to sut object
75
+ def self.extended( target_object )
76
+
77
+ target_object.instance_exec{
78
+
79
+ initialize_settings
80
+
81
+ }
82
+
83
+ end
84
+
85
+ # TODO: document me
86
+ def initialize_settings
87
+
88
+ # default values
89
+ @x_path = '.'
90
+ @xml_data = ""
91
+ @dump_count = 0
92
+
93
+ # determines that should child test objects be updated
94
+ @update_childs = true
95
+
96
+ @last_xml_data = nil
97
+ @frozen = false
98
+
99
+ # initialize cache for sut children
100
+ @child_object_cache = TDriver::TestObjectCache.new
101
+
102
+ @current_application_id = nil
103
+
104
+ # create empty hash for sut parameters if sut id not found from parameters
105
+ $parameters[ @id ] = {} unless $parameters.has_key?( @id )
106
+
107
+ @input = sut_parameters[ :input_type, 'key' ].to_sym
108
+ @refresh_tries = sut_parameters[ :ui_state_refresh_tries, '5' ].to_f
109
+ @refresh_interval = sut_parameters[ :refresh_interval, '0.5' ].to_f
110
+
111
+ # load verify blocks from defined sut configuration file
112
+ @verify_blocks = load_verify_blocks( sut_parameters[ :verify_blocks, nil ] )
113
+
114
+ end
115
+
116
+ public
117
+
71
118
  # == description
72
119
  # Connects selected SUT according to configuration in tdriver_parameters.xml.
73
120
  # == arguments
@@ -81,7 +128,7 @@ module MobyBehaviour
81
128
  # example: true
82
129
  def connect( id )
83
130
 
84
- @_sutController.connect( id )
131
+ @sut_controller.connect( id )
85
132
 
86
133
  end
87
134
 
@@ -95,7 +142,7 @@ module MobyBehaviour
95
142
  # @sut.disconnect
96
143
  def disconnect
97
144
 
98
- @_sutController.disconnect
145
+ @sut_controller.disconnect
99
146
 
100
147
  end
101
148
 
@@ -109,7 +156,7 @@ module MobyBehaviour
109
156
  # @sut.disconnect
110
157
  def received_data
111
158
 
112
- @_sutController.received_bytes
159
+ @sut_controller.received_bytes
113
160
 
114
161
  end
115
162
 
@@ -123,7 +170,7 @@ module MobyBehaviour
123
170
  # @sut.sent_data
124
171
  def sent_data
125
172
 
126
- @_sutController.sent_bytes
173
+ @sut_controller.sent_bytes
127
174
 
128
175
  end
129
176
 
@@ -297,23 +344,23 @@ module MobyBehaviour
297
344
 
298
345
  )
299
346
 
300
- rescue MobyBase::MultipleTestObjectsIdentifiedError => exception
347
+ rescue MobyBase::MultipleTestObjectsIdentifiedError
301
348
 
302
349
  $logger.behaviour "FAIL;Multiple child objects matched criteria.;#{ id };sut;{};child;#{ attributes.inspect }"
303
350
 
304
- Kernel::raise exception
351
+ raise
305
352
 
306
- rescue MobyBase::TestObjectNotFoundError => exception
353
+ rescue MobyBase::TestObjectNotFoundError
307
354
 
308
355
  $logger.behaviour "FAIL;The child object could not be found.;#{ id };sut;{};child;#{ attributes.inspect }"
309
356
 
310
- Kernel::raise exception
357
+ raise
311
358
 
312
- rescue Exception => exception
359
+ rescue Exception
313
360
 
314
361
  $logger.behaviour "FAIL;Failed when trying to find child object.;#{ id };sut;{};child;#{ attributes.inspect }"
315
362
 
316
- Kernel::raise exception
363
+ raise
317
364
 
318
365
  ensure
319
366
 
@@ -370,7 +417,8 @@ module MobyBehaviour
370
417
  else
371
418
  $logger.behaviour "FAIL;No methods or parameters found for sut.setup"
372
419
 
373
- Kernel::raise MobyBase::BehaviourError.new("Setup", "Failed to load sut.setup method check the :sut_setup parameter")
420
+ raise MobyBase::BehaviourError.new("Setup", "Failed to load sut.setup method check the :sut_setup parameter")
421
+
374
422
  end
375
423
 
376
424
 
@@ -419,7 +467,8 @@ module MobyBehaviour
419
467
  else
420
468
  $logger.behaviour "FAIL;No method or parameters found for sut.teardown"
421
469
 
422
- Kernel::raise MobyBase::BehaviourError.new("Teardown", "Failed to load sut.teardown method check the :sut_teardown parameter")
470
+ raise MobyBase::BehaviourError.new("Teardown", "Failed to load sut.teardown method check the :sut_teardown parameter")
471
+
423
472
  end
424
473
 
425
474
  end
@@ -464,7 +513,7 @@ module MobyBehaviour
464
513
  # refresh if xml data is empty
465
514
  self.refresh if @xml_data.empty?
466
515
 
467
- Kernel::raise RuntimeError, "Can not create state object of SUT with id #{ @id.inspect }, no XML content or SUT not initialized properly." if @xml_data.empty?
516
+ raise RuntimeError, "Can not create state object of SUT with id #{ @id.inspect }, no XML content or SUT not initialized properly." if @xml_data.empty?
468
517
 
469
518
  source_data = @test_object_adapter.state_object_xml( @xml_data, @id )
470
519
 
@@ -532,7 +581,7 @@ module MobyBehaviour
532
581
  )
533
582
 
534
583
  # raise same exception
535
- Kernel::raise $!
584
+ raise
536
585
 
537
586
  ensure
538
587
 
@@ -611,7 +660,7 @@ module MobyBehaviour
611
660
 
612
661
  $logger.behaviour "FAIL;Failed to capture screen.;#{ id.to_s };sut;{};capture_screen;#{ arguments.kind_of?( Hash ) ? arguments.inspect : arguments.class.to_s }"
613
662
 
614
- Kernel::raise $!
663
+ raise
615
664
 
616
665
  end
617
666
 
@@ -641,7 +690,7 @@ module MobyBehaviour
641
690
  # |Key|Type|Description|Example|
642
691
  # |:uid|String or Integer|Unique ID of the application|{ :uid => 268458181 }|
643
692
  # |:name|String|Executable name of the application|{ :name => 'calculator' }|
644
- # |:restart_if_running|Boolean|Restart application if already running||{ :restart_if_running => true }|
693
+ # |:restart_if_running|Boolean|Restart application if already running|{ :restart_if_running => true }|
645
694
  # |:arguments|String|Comma separated list of arguments passed to the application when it is started|{ :arguments => '--nogui,-v' }|
646
695
  # |:check_pid|Boolean|Overrides default value of SUT parameter :application_check_pid; When set to true, process id is used to test object identification|false|
647
696
  # |:sleep_time|Integer|Number of seconds to sleep immediately after launching the process|{ :sleep_time => 10 }|
@@ -704,7 +753,7 @@ module MobyBehaviour
704
753
 
705
754
  end
706
755
 
707
- Kernel::raise ArgumentError, "Sleep time need to be >= 0" unless sleep_time >= 0
756
+ raise ArgumentError, "Sleep time need to be >= 0" unless sleep_time >= 0
708
757
 
709
758
  # try to find an existing app with the current arguments
710
759
  if target[ :try_attach ] || target[:restart_if_running]
@@ -751,7 +800,7 @@ module MobyBehaviour
751
800
 
752
801
  if ( target[ :start_command ] != nil )
753
802
 
754
- Kernel::raise MobyBase::BehaviourError.new("Run", "Failed to load execute_shell_method") unless self.respond_to?("execute_shell_command")
803
+ raise MobyBase::BehaviourError.new("Run", "Failed to load execute_shell_method") unless self.respond_to?("execute_shell_command")
755
804
 
756
805
  execute_shell_command( target[ :start_command ], :detached => "true" )
757
806
 
@@ -879,11 +928,11 @@ module MobyBehaviour
879
928
 
880
929
  rescue MobyBase::TestObjectNotFoundError
881
930
 
882
- Kernel::raise MobyBase::VerificationError, "No application type test object was found on the device after starting the application."
931
+ raise MobyBase::VerificationError, "No application type test object was found on the device after starting the application."
883
932
 
884
933
  rescue MobyBase::SyncTimeoutError
885
934
 
886
- Kernel::raise MobyBase::VerificationError, "The application (#{ error_details }) was not found on the sut after being launched."
935
+ raise MobyBase::VerificationError, "The application (#{ error_details }) was not found on the sut after being launched."
887
936
 
888
937
  end
889
938
 
@@ -892,7 +941,7 @@ module MobyBehaviour
892
941
 
893
942
  $logger.behaviour "FAIL;Failed to launch application.;#{ id.to_s };sut;{};run;#{ target.kind_of?( Hash ) ? target.inspect : target.class.to_s }"
894
943
 
895
- Kernel::raise MobyBase::BehaviourError.new("Run", "Failed to launch application")
944
+ raise MobyBase::BehaviourError.new("Run", "Failed to launch application")
896
945
 
897
946
  end
898
947
 
@@ -968,7 +1017,7 @@ module MobyBehaviour
968
1017
 
969
1018
  $logger.behaviour "FAIL;Failed to press key(s).;#{id.to_s};sut;{};press_key;#{ value }"
970
1019
 
971
- Kernel::raise $!
1020
+ raise
972
1021
 
973
1022
  end
974
1023
 
@@ -1086,7 +1135,7 @@ module MobyBehaviour
1086
1135
  #
1087
1136
  def translate( logical_name, file_name = nil, plurality = nil, numerus = nil, lengthvariant = nil )
1088
1137
 
1089
- Kernel::raise LogicalNameNotFoundError, "Logical name is nil" if logical_name.nil?
1138
+ raise LogicalNameNotFoundError, "Logical name is nil" if logical_name.nil?
1090
1139
 
1091
1140
  translation_type = "localisation"
1092
1141
 
@@ -1140,7 +1189,7 @@ module MobyBehaviour
1140
1189
 
1141
1190
  end
1142
1191
 
1143
- Kernel::raise LanguageNotFoundError, "Language cannot be determind to perform translation" if ( language.nil? || language.empty? )
1192
+ raise LanguageNotFoundError, "Language cannot be determind to perform translation" if ( language.nil? || language.empty? )
1144
1193
 
1145
1194
  translation = MobyUtil::Localisation.translation(
1146
1195
  logical_name,
@@ -1431,6 +1480,16 @@ module MobyBehaviour
1431
1480
  end
1432
1481
 
1433
1482
  end
1483
+
1484
+ # == nodoc
1485
+ # == description
1486
+ # == returns
1487
+ def agent
1488
+
1489
+ # pass agent command service object
1490
+ TDriver::AgentService.new( :sut => self )
1491
+
1492
+ end
1434
1493
 
1435
1494
  private
1436
1495
 
@@ -1450,7 +1509,7 @@ module MobyBehaviour
1450
1509
 
1451
1510
  current_time = Time.now
1452
1511
 
1453
- if !@frozen #&& ( @_previous_refresh.nil? || ( current_time - @_previous_refresh ).to_f >= @refresh_interval )
1512
+ unless @frozen
1454
1513
 
1455
1514
  # determine should FindObjects service be used
1456
1515
  use_find_objects = sut_parameters[ :use_find_object, 'false' ] == 'true' and self.respond_to?( 'find_object' ) == true
@@ -1459,23 +1518,26 @@ module MobyBehaviour
1459
1518
  refresh_arguments = refresh_args.clone
1460
1519
 
1461
1520
  MobyUtil::Retryable.while(
1462
- :tries => @refresh_tries,
1463
- :interval => @refresh_interval,
1464
- :unless => [ MobyBase::ControllerNotFoundError, MobyBase::CommandNotFoundError, MobyBase::ApplicationNotAvailableError ]
1521
+
1522
+ :tries => @refresh_tries, :interval => @refresh_interval, :unless => [ MobyBase::ControllerNotFoundError, MobyBase::CommandNotFoundError, MobyBase::ApplicationNotAvailableError ]
1523
+
1465
1524
  ){
1466
1525
 
1526
+ # store as local variable for less AST lookups
1527
+ xml_data_checksum = @xml_data_checksum
1528
+
1467
1529
  #use find_object if set on and the method exists
1468
1530
  if use_find_objects
1469
1531
 
1470
- # retrieve new ui dump xml and crc
1471
- new_xml_data, crc = find_object( refresh_arguments, creation_attributes, @xml_data_crc )
1532
+ # retrieve new ui dump xml and checksum
1533
+ new_xml_data, new_checksum = find_object( refresh_arguments, creation_attributes, xml_data_checksum )
1472
1534
 
1473
- crc = @xml_data_crc if new_xml_data.empty?
1535
+ new_checksum = xml_data_checksum if new_xml_data.empty?
1474
1536
 
1475
1537
  else
1476
1538
 
1477
- # retrieve new ui dump xml and crc
1478
- new_xml_data, crc = execute_command(
1539
+ # retrieve new ui dump xml and checksum
1540
+ new_xml_data, new_checksum = execute_command(
1479
1541
 
1480
1542
  MobyCommand::Application.new(
1481
1543
  :State,
@@ -1484,30 +1546,30 @@ module MobyBehaviour
1484
1546
  :application_uid => refresh_args[ :id ],
1485
1547
  :sut => self,
1486
1548
  :refresh_arguments => refresh_args,
1487
- :checksum => @xml_data_crc
1549
+ :checksum => xml_data_checksum
1488
1550
  }
1489
1551
  )
1490
1552
 
1491
1553
  )
1492
1554
 
1493
- crc = @xml_data_crc if new_xml_data.empty?
1555
+ new_checksum = xml_data_checksum if new_xml_data.empty?
1494
1556
 
1495
1557
  end
1496
1558
 
1497
- # parse the xml if crc does not match with previously retrieved crc
1498
- if ( @xml_data_crc == 0 || crc != @xml_data_crc || crc.nil? )
1559
+ # parse the xml if checksum does not match with previously retrieved checksum
1560
+ if ( xml_data_checksum == 0 || new_checksum != xml_data_checksum || new_checksum.blank? )
1499
1561
 
1500
- # parse new xml string, return cached object if one is found; crc is used for caching and identifying the duplicate xml strings
1501
- xml_data, from_cache = MobyUtil::XML.parse_string( new_xml_data, crc )
1562
+ # parse new xml string, return cached object if one is found; checksum is used for caching and identifying the duplicate xml strings
1563
+ xml_data, from_cache = MobyUtil::XML.parse_string( new_xml_data, new_checksum )
1502
1564
 
1503
- # store new xml data object
1504
- @xml_data = xml_data.root
1565
+ # store new xml data object
1566
+ @xml_data = xml_data.root
1505
1567
 
1506
- # store xml crc to be compared while next ui dump request; do not reparse xml if crc values are equal
1507
- @xml_data_crc = crc
1568
+ # store xml checksum to be compared while next ui dump request; do not reparse xml if checksum values are equal
1569
+ @xml_data_checksum = new_checksum
1508
1570
 
1509
- # mark that child objects needs to be updated
1510
- @update_childs = true #unless from_cache
1571
+ # mark that child objects needs to be updated
1572
+ @update_childs = true #unless from_cache
1511
1573
 
1512
1574
  end
1513
1575
 
@@ -1673,17 +1735,6 @@ module MobyBehaviour
1673
1735
  app_info
1674
1736
  end
1675
1737
 
1676
- # this method will be automatically invoked after module is extended to sut object
1677
- def self.extended( target_object )
1678
-
1679
- target_object.instance_exec{
1680
-
1681
- initialize_settings
1682
-
1683
- }
1684
-
1685
- end
1686
-
1687
1738
  def load_verify_blocks( filename )
1688
1739
 
1689
1740
  # load verify blocks if filename not empty
@@ -1714,37 +1765,6 @@ module MobyBehaviour
1714
1765
 
1715
1766
  end
1716
1767
 
1717
- # TODO: document me
1718
- def initialize_settings
1719
-
1720
- # default values
1721
- @x_path = '.'
1722
- @xml_data = ""
1723
- @dump_count = 0
1724
-
1725
- # determines that should child test objects be updated
1726
- @update_childs = true
1727
-
1728
- @last_xml_data = nil
1729
- @frozen = false
1730
-
1731
- # initialize cache for sut children
1732
- @child_object_cache = TDriver::TestObjectCache.new
1733
-
1734
- @current_application_id = nil
1735
-
1736
- # create empty hash for sut parameters if sut id not found from parameters
1737
- $parameters[ @id ] = {} unless $parameters.has_key?( @id )
1738
-
1739
- @input = sut_parameters[ :input_type, 'key' ].to_sym
1740
- @refresh_tries = sut_parameters[ :ui_state_refresh_tries, '5' ].to_f
1741
- @refresh_interval = sut_parameters[ :refresh_interval, '0.5' ].to_f
1742
-
1743
- # load verify blocks from defined sut configuration file
1744
- @verify_blocks = load_verify_blocks( sut_parameters[ :verify_blocks, nil ] )
1745
-
1746
- end
1747
-
1748
1768
  # accessor for sut parameters
1749
1769
  def sut_parameters
1750
1770
 
@@ -1752,7 +1772,7 @@ module MobyBehaviour
1752
1772
 
1753
1773
  end
1754
1774
 
1755
- public # deprecated
1775
+ public # deprecated
1756
1776
 
1757
1777
  # == nodoc
1758
1778
  # function to get TestObject