testability-driver 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
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