testability-driver 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 (108) hide show
  1. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_composition.rb +1 -1
  2. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_description.rb +11 -7
  3. data/lib/tdriver/base/behaviour/behaviours/object_composition.rb +8 -0
  4. data/lib/tdriver/base/behaviour/factory.rb +229 -209
  5. data/lib/tdriver/base/errors.rb +3 -0
  6. data/lib/tdriver/base/state_object.rb +11 -20
  7. data/lib/tdriver/base/sut/controller.rb +4 -4
  8. data/lib/tdriver/base/sut/factory.rb +205 -170
  9. data/lib/tdriver/base/sut/generic/behaviours/application.rb +256 -174
  10. data/lib/tdriver/base/sut/generic/behaviours/find.rb +17 -11
  11. data/lib/tdriver/base/sut/generic/behaviours/flash_behaviour.rb +57 -66
  12. data/lib/tdriver/base/sut/generic/behaviours/sut.rb +578 -497
  13. data/lib/tdriver/base/sut/generic/behaviours/switchbox_behaviour.rb +41 -15
  14. data/lib/tdriver/base/sut/generic/behaviours/verification.rb +48 -19
  15. data/lib/tdriver/base/sut/generic/commands/fixture.rb +47 -0
  16. data/lib/tdriver/base/sut/generic/commands/key_sequence.rb +25 -13
  17. data/lib/tdriver/base/sut/generic/commands/screen_capture.rb +16 -10
  18. data/lib/tdriver/base/sut/generic/plugin.rb +9 -3
  19. data/lib/tdriver/base/sut/sut.rb +41 -33
  20. data/lib/tdriver/base/test_object/abstract.rb +26 -3
  21. data/lib/tdriver/base/test_object/adapter.rb +399 -0
  22. data/lib/tdriver/base/test_object/behaviours/syncronization.rb +56 -14
  23. data/lib/tdriver/base/test_object/behaviours/test_object.rb +663 -197
  24. data/lib/tdriver/base/test_object/cache.rb +132 -0
  25. data/lib/tdriver/base/test_object/factory.rb +677 -426
  26. data/lib/tdriver/base/test_object/factory_new.rb +202 -0
  27. data/lib/tdriver/base/test_object/identificator.rb +24 -17
  28. data/lib/tdriver/base/test_object/loader.rb +9 -3
  29. data/lib/tdriver/base/test_object/verification.rb +181 -0
  30. data/lib/tdriver/loader.rb +1 -1
  31. data/lib/tdriver/report/report.rb +2 -0
  32. data/lib/tdriver/report/report_api.rb +4 -4
  33. data/lib/tdriver/report/report_creator.rb +29 -3
  34. data/lib/tdriver/report/report_data_presentation.rb +7 -3
  35. data/lib/tdriver/report/report_execution_statistics.rb +80 -21
  36. data/lib/tdriver/report/report_javascript.rb +192 -0
  37. data/lib/tdriver/report/report_test_case_run.rb +22 -0
  38. data/lib/tdriver/report/report_test_run.rb +62 -55
  39. data/lib/tdriver/report/report_writer.rb +57 -56
  40. data/lib/tdriver/tdriver.rb +14 -41
  41. data/lib/tdriver/util/common/error.rb +1 -0
  42. data/lib/tdriver/util/common/exceptions.rb +12 -0
  43. data/lib/tdriver/util/common/file.rb +12 -6
  44. data/lib/tdriver/util/common/gem.rb +2 -1
  45. data/lib/tdriver/util/common/hash.rb +152 -0
  46. data/lib/tdriver/util/common/kernel.rb +49 -34
  47. data/lib/tdriver/util/common/loader.rb +21 -17
  48. data/lib/tdriver/util/common/numeric.rb +39 -0
  49. data/lib/tdriver/util/common/object.rb +115 -0
  50. data/lib/tdriver/util/common/string.rb +55 -2
  51. data/lib/tdriver/util/dbaccess/dbaccess.rb +194 -161
  52. data/lib/tdriver/util/dynamic_attribute_filter.rb +6 -0
  53. data/lib/tdriver/util/hooking.rb +2 -2
  54. data/lib/tdriver/util/loader.rb +2 -2
  55. data/lib/tdriver/util/localisation/localisation.rb +277 -18
  56. data/lib/tdriver/util/logger.rb +142 -13
  57. data/lib/tdriver/util/parameter/parameter_hash.rb +8 -5
  58. data/lib/tdriver/util/parameter/parameter_xml.rb +18 -2
  59. data/lib/tdriver/util/recorder.rb +17 -12
  60. data/lib/tdriver/util/user_data/user_data.rb +3 -2
  61. data/lib/tdriver/util/{video_rec.rb → video_utils.rb} +136 -16
  62. data/lib/tdriver/util/xml/abstraction.rb +7 -0
  63. data/lib/tdriver/util/xml/attribute.rb +32 -0
  64. data/lib/tdriver/util/xml/loader.rb +8 -2
  65. data/lib/tdriver/util/xml/nil_node.rb +95 -0
  66. data/lib/tdriver/util/xml/parsers/nokogiri/abstraction.rb +46 -7
  67. data/lib/tdriver/util/xml/parsers/nokogiri/attribute.rb +19 -9
  68. data/lib/tdriver/util/xml/parsers/nokogiri/document.rb +1 -1
  69. data/lib/tdriver/util/xml/parsers/nokogiri/element.rb +13 -1
  70. data/lib/tdriver/util/xml/parsers/nokogiri/loader.rb +6 -0
  71. data/lib/tdriver/util/xml/parsers/nokogiri/nodeset.rb +27 -15
  72. data/lib/tdriver/util/xml/parsers/nokogiri/text.rb +57 -0
  73. data/lib/tdriver/util/xml/text.rb +32 -0
  74. data/lib/tdriver/util/xml/xml.rb +35 -22
  75. data/lib/tdriver/version.rb +1 -1
  76. data/lib/tdriver-devtools/behaviour/xml/rdoc_behaviour_xml_generator.rb +41 -34
  77. data/lib/tdriver-devtools/doc/generate.rb +31 -6
  78. data/lib/tdriver-devtools/doc/xslt/template.xsl +46 -25
  79. data/lib/tdriver-devtools/tests/feature_tests/example/behaviour_example.rb +100 -0
  80. data/lib/tdriver-devtools/tests/feature_tests/update +1 -1
  81. data/lib/tdriver.rb +0 -3
  82. data/xml/behaviours/generic.xml +1 -1
  83. data/xml/defaults/generic.xml +4 -90
  84. data/xml/templates/generic.xml +33 -25
  85. metadata +21 -29
  86. data/lib/tdriver-devtools/behaviour/xml_generator/example/flick-example.rb +0 -245
  87. data/lib/tdriver-devtools/behaviour/xml_generator/example/sut.rb +0 -964
  88. data/lib/tdriver-devtools/behaviour/xml_generator/generate.rb +0 -68
  89. data/lib/tdriver-devtools/behaviour/xml_generator/lib/custom_rdoc_generator.rb +0 -1865
  90. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.argument.default.template +0 -1
  91. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.argument.template +0 -3
  92. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.argument_type.template +0 -4
  93. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.exception.template +0 -4
  94. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.arguments.template +0 -4
  95. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.deprecated.template +0 -3
  96. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.exceptions.template +0 -3
  97. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.info.template +0 -1
  98. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.returns.template +0 -3
  99. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.tables.template +0 -3
  100. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.method.template +0 -12
  101. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.returns.template +0 -5
  102. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.table.item.template +0 -1
  103. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.table.row.template +0 -2
  104. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.table.template +0 -7
  105. data/lib/tdriver-devtools/behaviour/xml_generator/templates/behaviour.xml.template +0 -14
  106. data/lib/tdriver-devtools/behaviour/xml_generator/update +0 -3
  107. data/lib/tdriver-devtools/tests/feature_tests/example/flick-example.rb +0 -233
  108. data/lib/tdriver-devtools/tests/feature_tests/example/impl.rb +0 -194
@@ -17,11 +17,10 @@
17
17
  ##
18
18
  ############################################################################
19
19
 
20
-
21
20
  # Find behaviour
22
21
  # Methods for finding test objects on the suttest objet state
23
22
  module MobyBehaviour
24
-
23
+
25
24
  # == description
26
25
  # This module contains generic find behaviour
27
26
  #
@@ -45,12 +44,12 @@ module MobyBehaviour
45
44
  module Find
46
45
 
47
46
  include MobyBehaviour::Behaviour
48
-
47
+ # == nodoc
49
48
  # == description
50
49
  # Finds a child test_object given its name and type and returns it as a reference
51
50
  #
52
51
  # == arguments
53
- # find_hash
52
+ # attributes
54
53
  # Hash
55
54
  # description: one or more attributes defining the rules for the test object search. Must not be empty.
56
55
  # example: { :name => 'oneButton' }
@@ -63,27 +62,34 @@ module MobyBehaviour
63
62
  #
64
63
  # == exceptions
65
64
  # TypeError
66
- # description: raised if agument is not a Hash or is an emtpy Hash
67
- #
65
+ # description: Wrong argument type %s for attributes (expected Hash)
66
+ #
67
+ # ArgumentError
68
+ # description: Attributes hash must not be empty
69
+ #
68
70
  # == info
69
71
  # Same as calling child method.
70
- def find ( find_hash = {} )
72
+ def find ( attributes = {} )
71
73
 
72
74
  begin
73
75
 
74
- raise TypeError.new( 'Input parameter not of Type: Hash or empty.\nIt is: ' + find_hash.class.to_s ) unless find_hash.kind_of?( Hash ) and !find_hash.empty?
76
+ attributes.check_type( Hash, "Wrong argument type $1 for attributes (expected $2)" )
77
+
78
+ attributes.not_empty( 'Attributes hash must not be empty' )
75
79
 
76
- search_result = child(find_hash)
80
+ #raise ArgumentError.new( 'Attributes hash must not be empty' ) if attributes.empty?
81
+
82
+ search_result = child( attributes )
77
83
 
78
84
  rescue Exception => e
79
85
 
80
- MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed to find test object.;#{id.to_s};sut;{};find;" << ( find_hash.kind_of?( Hash ) ? find_hash.inspect : find_hash.class.to_s )
86
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed to find test object.;#{id.to_s};sut;{};find;" << ( attributes.kind_of?( Hash ) ? attributes.inspect : attributes.class.to_s )
81
87
 
82
88
  Kernel::raise e
83
89
 
84
90
  end
85
91
 
86
- MobyUtil::Logger.instance.log "behaviour" , "PASS;Test object found.;#{id.to_s};sut;{};application;" << find_hash.inspect
92
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Test object found.;#{id.to_s};sut;{};application;" << attributes.inspect
87
93
 
88
94
  search_result
89
95
  end
@@ -43,45 +43,41 @@ module MobyBehaviour
43
43
  include MobyBehaviour::Behaviour
44
44
 
45
45
  # == description
46
- # Instructs the sut to start the flash operation with default TDriver parameters for sut that are:
47
- # how many times TDriver will attempt to flash the device:
48
- # [code]<parameter name="flash_attempts" value="2" />[/code]
49
- # timeout in seconds between the switchbox commands:
50
- # [code]<parameter name="timeout_between_command_sequence" value="25" />[/code]
51
- # commands you want to be executed before flash:
52
- # [code]<parameter name="switchbox_commands_before_flash" value="" />[/code]
53
- # flash commands before flash:
54
- # [code]<parameter name="commands_before_flash" value="" />[/code]
55
- # intial flash command:
56
- # [code]<parameter name="flash_command" value="" />[/code]
57
- # timeout in seconds before executing the commands during flash:
58
- # <parameter name="timeout_before_executing_commands_during_flash" value="20" />
59
- # commands you want to be executed during flash:
60
- # <parameter name="switchbox_commands_during_flash" value="" />
61
- # optional flash parameters:
62
- # <parameter name="optional_parameters_after_flashing" value="" />
63
- # images to flash:
64
- # <parameter name="flash_images" value="" />
65
- # need to wait for the flash process to finish:
66
- # <parameter name="sleep_time_after_flash_command" value="70" />
67
- # flash command after flash:
68
- # <parameter name="command_after_flash" value="" />
69
- # commands for switchbox after failed flash:
70
- # <parameter name="switchbox_commands_after_failed_flash" value="" />
71
- # commands after failed flash:
72
- # <parameter name="commands_after_failed_flash" value="" />
73
- # If no error then no string is displayed:
74
- # <parameter name="flash_command_success_string" value="" />
75
- # commands you want to be executed after flash:
76
- # <parameter name="switchbox_commands_after_flash" value="" />
46
+ # Instructs the sut to start the flash operation with default TDriver parameters
47
+ #
48
+ #
77
49
  # == arguments
78
50
  # == returns
51
+ # Boolean
52
+ # description: Indicating that did flashing success
53
+ # example: true
79
54
  # == exceptions
80
55
  # BehaviourError
81
56
  # description: If mandatory parameters are missing
82
57
  # BehaviourError
83
58
  # description: If flashing is failed
84
- # === info
59
+ #
60
+ # == tables
61
+ # flash_prameters
62
+ # title: Flash parameters
63
+ # description: Flash parameters for sut
64
+ # |Parameter|Description|Example|
65
+ # |:flash_attempts|How many times TDriver will attempt to flash the device|<parameter name="flash_attempts" value="2" />|
66
+ # |:timeout_between_command_sequence|Timeout in seconds between the switchbox commands|<parameter name="timeout_between_command_sequence" value="25" />|
67
+ # |:switchbox_commands_before_flash|Commands you want to be executed before flash|<parameter name="switchbox_commands_before_flash" value="" />|
68
+ # |:commands_before_flash|Flash commands before flash|<parameter name="commands_before_flash" value="" />|
69
+ # |:flash_command|Intial flash command|<parameter name="flash_command" value="" />|
70
+ # |:timeout_before_executing_commands_during_flash|Timeout in seconds before executing the commands during flash|<parameter name="timeout_before_executing_commands_during_flash" value="20" />|
71
+ # |:switchbox_commands_during_flash|Commands you want to be executed during flash|<parameter name="switchbox_commands_during_flash" value="" />|
72
+ # |:optional_parameters_after_flashing|Optional flash parameters|<parameter name="optional_parameters_after_flashing" value="" />|
73
+ # |:flash_images|Images to flash|<parameter name="flash_images" value="" />|
74
+ # |:sleep_time_after_flash_command|Wait time for the flash process to finish|<parameter name="sleep_time_after_flash_command" value="70" />|
75
+ # |:command_after_flash|Flash command after flash|<parameter name="command_after_flash" value="" />|
76
+ # |:switchbox_commands_after_failed_flash|Commands for switchbox after failed flash|<parameter name="switchbox_commands_after_failed_flash" value="" />|
77
+ # |:commands_after_failed_flash|Commands after failed flash|<parameter name="commands_after_failed_flash" value="" />|
78
+ # |:flash_command_success_string|If no error then no string is displayed|<parameter name="flash_command_success_string" value="" />|
79
+ # |:switchbox_commands_after_flash|Commands you want to be executed after flash|<parameter name="switchbox_commands_after_flash" value="" />|
80
+
85
81
  def flash()
86
82
 
87
83
  flash_images
@@ -89,49 +85,43 @@ module MobyBehaviour
89
85
  end
90
86
 
91
87
  # == description
92
- # Instructs the sut to start the flash operation with default TDriver parameters for sut that are:
93
- # how many times TDriver will attempt to flash the device:
94
- # <parameter name="flash_attempts" value="2" />
95
- # timeout in seconds between the switchbox commands:
96
- # <parameter name="timeout_between_command_sequence" value="25" />
97
- # commands you want to be executed before flash:
98
- # <parameter name="switchbox_commands_before_flash" value="" />
99
- # flash commands before flash:
100
- # <parameter name="commands_before_flash" value="" />
101
- # intial flash command:
102
- # <parameter name="flash_command" value="" />
103
- # timeout in seconds before executing the commands during flash:
104
- # <parameter name="timeout_before_executing_commands_during_flash" value="20" />
105
- # commands you want to be executed during flash:
106
- # <parameter name="switchbox_commands_during_flash" value="" />
107
- # optional flash parameters:
108
- # <parameter name="optional_parameters_after_flashing" value="" />
109
- # images to flash:
110
- # <parameter name="flash_images" value="" />
111
- # need to wait for the flash process to finish:
112
- # <parameter name="sleep_time_after_flash_command" value="70" />
113
- # flash command after flash:
114
- # <parameter name="command_after_flash" value="" />
115
- # commands for switchbox after failed flash:
116
- # <parameter name="switchbox_commands_after_failed_flash" value="" />
117
- # commands after failed flash:
118
- # <parameter name="commands_after_failed_flash" value="" />
119
- # If no error then no string is displayed:
120
- # <parameter name="flash_command_success_string" value="" />
121
- # commands you want to be executed after flash:
122
- # <parameter name="switchbox_commands_after_flash" value="" />
88
+ # Instructs the sut to start the flash operation with the configured flash files
89
+ #
123
90
  # == arguments
124
91
  # flash_files
125
92
  # String
126
93
  # description: The location of the software image file
127
94
  # example: "C:/images/flash_image.img"
128
95
  # == returns
96
+ # Boolean
97
+ # description: Indicating that did flashing success
98
+ # example: true
129
99
  # == raises
130
100
  # BehaviourError If mandatory parameters are missing
131
101
  # BehaviourError If flashing is failed
132
102
  # === examples
133
103
  # @sut.flash_images("C:/path/image_file.img")
134
- def flash_images(flash_files=nil)
104
+ # == tables
105
+ # flash_prameters
106
+ # title: Flash parameters
107
+ # description: Flash parameters for sut
108
+ # |Parameter|Description|Example|
109
+ # |:flash_attempts|How many times TDriver will attempt to flash the device|<parameter name="flash_attempts" value="2" />|
110
+ # |:timeout_between_command_sequence|Timeout in seconds between the switchbox commands|<parameter name="timeout_between_command_sequence" value="25" />|
111
+ # |:switchbox_commands_before_flash|Commands you want to be executed before flash|<parameter name="switchbox_commands_before_flash" value="" />|
112
+ # |:commands_before_flash|Flash commands before flash|<parameter name="commands_before_flash" value="" />|
113
+ # |:flash_command|Intial flash command|<parameter name="flash_command" value="" />|
114
+ # |:timeout_before_executing_commands_during_flash|Timeout in seconds before executing the commands during flash|<parameter name="timeout_before_executing_commands_during_flash" value="20" />|
115
+ # |:switchbox_commands_during_flash|Commands you want to be executed during flash|<parameter name="switchbox_commands_during_flash" value="" />|
116
+ # |:optional_parameters_after_flashing|Optional flash parameters|<parameter name="optional_parameters_after_flashing" value="" />|
117
+ # |:flash_images|Images to flash|<parameter name="flash_images" value="" />|
118
+ # |:sleep_time_after_flash_command|Wait time for the flash process to finish|<parameter name="sleep_time_after_flash_command" value="70" />|
119
+ # |:command_after_flash|Flash command after flash|<parameter name="command_after_flash" value="" />|
120
+ # |:switchbox_commands_after_failed_flash|Commands for switchbox after failed flash|<parameter name="switchbox_commands_after_failed_flash" value="" />|
121
+ # |:commands_after_failed_flash|Commands after failed flash|<parameter name="commands_after_failed_flash" value="" />|
122
+ # |:flash_command_success_string|If no error then no string is displayed|<parameter name="flash_command_success_string" value="" />|
123
+ # |:switchbox_commands_after_flash|Commands you want to be executed after flash|<parameter name="switchbox_commands_after_flash" value="" />|
124
+ def flash_images(flash_files = nil)
135
125
  file, line = caller.first.split(":")
136
126
 
137
127
  begin
@@ -221,12 +211,13 @@ module MobyBehaviour
221
211
  flash_command="#{str_flash_command} #{flash_files} #{str_optional_parameters}"
222
212
 
223
213
  #start flashing
224
- result=start_flashing(flash_command)
214
+ result = start_flashing( flash_command )
215
+
225
216
  Kernel::raise MobyBase::BehaviourError.new("flash_images", "Flashing failed") if result.to_s == 'false'
226
217
 
227
218
  end
228
219
 
229
- private
220
+ private
230
221
 
231
222
  def execute_command_sequence(command_sequence)
232
223
 
@@ -38,7 +38,7 @@ module MobyBehaviour
38
38
  # *
39
39
  #
40
40
  # == objects
41
- # *
41
+ # sut
42
42
  #
43
43
  module SUT
44
44
 
@@ -47,38 +47,50 @@ module MobyBehaviour
47
47
  # == nodoc
48
48
  attr_accessor(
49
49
 
50
- :dump_count, # number of UI dump requests done to current SUT
51
- :current_application_id, # id of the current appication if set
52
- :input, # the input method used for interacting with this sut as a symbol, eg. :key or :touch.
53
- :refresh_tries, # number of retries for ui dump on error case
54
- :refresh_timeout # timeout between timeout retry
50
+ :dump_count, # number of UI dump requests done to current SUT
51
+ :current_application_id, # id of the current appication if set
52
+ :input, # the input method used for interacting with this sut as a symbol, eg. :key or :touch.
53
+ :refresh_tries, # number of retries for ui dump on error case
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_crc, # crc of the previous ui state message
67
+ :verify_blocks # verify blocks
68
68
 
69
- )
69
+ )
70
70
 
71
-
72
71
  # == description
73
72
  # Connects selected SUT according to configuration in tdriver_parameters.xml.
74
- #
73
+ # == arguments
74
+ # id
75
+ # Symbol
76
+ # description: SUT id
77
+ # example: :sut_qt
78
+ # == returns
79
+ # Boolean
80
+ # description: Determines if SUT is connected
81
+ # example: true
75
82
  def connect( id )
76
83
 
77
84
  @_sutController.connect( id )
78
85
 
79
86
  end
80
87
 
81
- # Retrieves the total amount of data sent in bytes
88
+ # == description
89
+ # Disconnects the current SUT
90
+ # == returns
91
+ # Boolean
92
+ # description: Determines if SUT is connected
93
+ # example: false
82
94
  # == examples
83
95
  # @sut.disconnect
84
96
  def disconnect
@@ -87,16 +99,26 @@ module MobyBehaviour
87
99
 
88
100
  end
89
101
 
102
+ # == description
90
103
  # Retrieves the total amount of data received in bytes
104
+ # == returns
105
+ # Fixnum
106
+ # description: Total amount of data received in bytes
107
+ # example: 65535
91
108
  # == examples
92
109
  # @sut.disconnect
93
110
  def received_data
94
-
111
+
95
112
  @_sutController.received_bytes
96
113
 
97
114
  end
98
115
 
116
+ # == description
99
117
  # Retrieves the total amount of data sent in bytes
118
+ # == returns
119
+ # Fixnum
120
+ # description: Total amount of data sent in bytes
121
+ # example: 65535
100
122
  # == examples
101
123
  # @sut.sent_data
102
124
  def sent_data
@@ -105,19 +127,35 @@ module MobyBehaviour
105
127
 
106
128
  end
107
129
 
108
- # function to disable taking ui dumps from target for a moment
109
- # user must remember to enable ui dumps again using unfreeze
130
+ # == description
131
+ # Function to disable taking UI dumps from target for a moment. This method might be deprecated in future release.\n
132
+ # \n
133
+ # [b]NOTE:[/b] Remember to enable ui dumps again using unfreeze!
134
+ # == returns
135
+ # NilClass
136
+ # description: -
137
+ # example: -
110
138
  def freeze
111
139
 
112
140
  @frozen = true
113
141
 
142
+ nil
143
+
114
144
  end
115
145
 
116
- # function to enable taking ui dumps from target
146
+ # == description
147
+ # Function to enable taking ui dumps from target. This method might be deprecated in future release.\n
148
+ # \n
149
+ # == returns
150
+ # NilClass
151
+ # description: -
152
+ # example: -
117
153
  def unfreeze
118
154
 
119
155
  @frozen = false
120
156
 
157
+ nil
158
+
121
159
  end
122
160
 
123
161
  # == nodoc
@@ -131,41 +169,52 @@ module MobyBehaviour
131
169
 
132
170
  end
133
171
 
134
- # Force to use user defined ui state (e.g. for debugging purposes)
172
+ # == nodoc
173
+ # == description
174
+ # Force to use user defined ui state (e.g. for debugging purposes). Freezes the SUT xml_data, until unfreezed or set to nil.
135
175
  #
136
- # Freezes the SUT xml_data, until unfreezed or set to nil.
137
- # == params
138
- # xml:: String, MobyUtil::XML::Element or NilClass
139
- # == examples
140
- # @sut.xml_data = "<tasMessage>.....</tasMessage>"
141
- # @sut.xml_data = xml_element
142
- # @sut.xml_data = nil
143
- # == raises
144
- # ArgumentError:: Unexpected argument type (%s) for xml, expected: %s
176
+ # == arguments
177
+ # xml
178
+ # String
179
+ # description: Freeze SUT XML data with given XML string
180
+ # example: "<tasMessage>.....</tasMessage>"
181
+ # MobyUtil::XML::Element
182
+ # description: Freeze SUT XML data with given XML element
183
+ # example: -
184
+ # NilClass
185
+ # description: Unfreeze SUT XML data
186
+ # example: nil
187
+ #
188
+ # == returns
189
+ # NilClass
190
+ # description: This method doesn't return anything
191
+ # example: -
192
+ #
193
+ # == exception
194
+ # TypeError
195
+ # description: Wrong argument type %s for XML (expected MobyUtil::XML::Element, String or NilClass)
145
196
  def xml_data=( xml )
146
197
 
198
+ xml.check_type( [ MobyUtil::XML::Element, String, NilClass ], "Wrong argument type $1 for XML (expected $2)" )
199
+
147
200
  if xml.kind_of?( MobyUtil::XML::Element )
148
201
 
149
202
  @xml_data = xml
203
+ @frozen = true
150
204
 
151
205
  elsif xml.kind_of?( String )
152
206
 
153
207
  @xml_data = MobyUtil::XML.parse_string( xml ).root
208
+ @frozen = true
154
209
 
155
- elsif xml.nil?
210
+ elsif xml.kind_of?( NilClass )
156
211
 
157
212
  @xml_data = nil
158
-
159
213
  @frozen = false
160
214
 
161
- else
162
-
163
- Kernel::raise ArgumentError.new( "Unexpected argument type (%s) for xml, expected: %s" % [ xml.class, "MobyUtil::XML::Element or String"] )
164
-
165
215
  end
166
-
167
- # freeze sut - xml won't be updated unless unfreezed first
168
- @frozen = true unless xml.nil?
216
+
217
+ nil
169
218
 
170
219
  end
171
220
 
@@ -180,50 +229,50 @@ module MobyBehaviour
180
229
  if !@frozen && ( @_previous_refresh.nil? || ( current_time - @_previous_refresh ).to_f > @refresh_interval )
181
230
 
182
231
  MobyUtil::Retryable.while(
183
- :tries => @refresh_tries,
184
- :interval => @refresh_interval,
185
- :unless => [ MobyBase::ControllerNotFoundError, MobyBase::CommandNotFoundError ] ) {
186
-
187
-
188
- #use find_object if set on and the method exists
189
- if MobyUtil::Parameter[ @id ][ :use_find_object, 'false' ] == 'true' and self.methods.include?('find_object')
190
- new_xml_data, crc = find_object(refresh_args.clone, creation_attributes)
191
- else
192
- app_command = MobyCommand::Application.new(
193
- :State,
194
- ( refresh_args[ :FullName ] || refresh_args[ :name ] ),
195
- refresh_args[ :id ],
196
- self
197
- )
198
- #store in case needed
199
- app_command.refresh_args(refresh_args)
200
- new_xml_data, crc = execute_command( app_command )
201
- end
202
-
203
-
204
- # remove timestamp from the beginning of tasMessage, parse if not same as previous ui state
205
- if ( xml_data_no_timestamp = new_xml_data.split( ">", 2 ).last ) != @last_xml_data
206
-
207
- @xml_data, @childs_updated = MobyUtil::XML.parse_string( new_xml_data ).root, false
208
-
209
- @last_xml_data = xml_data_no_timestamp
210
-
211
- end
212
-
213
-
214
- # if ( @xml_data_crc == 0 || crc != @xml_data_crc || crc.nil? )
215
- # @xml_data, @xml_data_crc, @childs_updated = MobyUtil::XML.parse_string( new_xml_data ).root, crc, false
216
-
217
- # end
218
-
219
- @dump_count += 1
220
-
221
- @_previous_refresh = current_time
232
+ :tries => @refresh_tries,
233
+ :interval => @refresh_interval,
234
+ :unless => [ MobyBase::ControllerNotFoundError, MobyBase::CommandNotFoundError, MobyBase::ApplicationNotAvailableError ]
235
+ ) {
222
236
 
223
- }
237
+ #use find_object if set on and the method exists
238
+ if MobyUtil::Parameter[ @id ][ :use_find_object, 'false' ] == 'true' and self.respond_to?('find_object') # self.methods.include?('find_object')
224
239
 
225
-
226
-
240
+ new_xml_data, crc = find_object( refresh_args.clone, creation_attributes )
241
+
242
+ else
243
+
244
+ app_command = MobyCommand::Application.new(
245
+ :State,
246
+ refresh_args[ :FullName ] || refresh_args[ :name ],
247
+ refresh_args[ :id ],
248
+ self
249
+ )
250
+
251
+ #store in case needed
252
+ app_command.refresh_args( refresh_args )
253
+
254
+ new_xml_data, crc = execute_command( app_command )
255
+
256
+ end
257
+
258
+ # remove timestamp from the beginning of tasMessage, parse if not same as previous ui state
259
+ #if ( xml_data_no_timestamp = new_xml_data.split( ">", 2 ).last ) != @last_xml_data
260
+
261
+ @xml_data, @childs_updated = MobyUtil::XML.parse_string( new_xml_data ).root, false
262
+
263
+ #@last_xml_data = xml_data_no_timestamp
264
+
265
+ #end
266
+
267
+ #if ( @xml_data_crc == 0 || crc != @xml_data_crc || crc.nil? )
268
+ # @xml_data, @xml_data_crc, @childs_updated = MobyUtil::XML.parse_string( new_xml_data ).root, crc, false
269
+ #end
270
+
271
+ @dump_count += 1
272
+
273
+ @_previous_refresh = current_time
274
+
275
+ }
227
276
 
228
277
  end
229
278
 
@@ -233,109 +282,107 @@ module MobyBehaviour
233
282
 
234
283
  end
235
284
 
236
- # Creates a test object that belongs to this SUT.
237
- # Usually it is 'Application' TestObject
238
- # Associates child object as current object's child.
239
- # and associates self as child object's parent.
285
+ # TODO: merge TestObject#child and SUT#child
286
+ # == description
287
+ # Creates a child test object from this SUT. SUT object will be associated as child test objects parent.\n
240
288
  #
241
- # NOTE:
242
- # Subsequent calls to SUT#child(rule) always returns reference to same Testobject:
243
- # a = sut.child(rule) ; b = sut.child(rule) ; a.equal?( b ); # => true
244
- # note the usage of equal? above instead of normally used eql?. Please refer to Ruby manual for more information.
289
+ # [b]NOTE:[/b] Subsequent calls to TestObject#child( rule ) always returns reference to same Testobject:\n
290
+ # [code]a = sut.child( :type => 'Button', :text => '1' )
291
+ # b = sut.child( :type => 'Button', :text => '1' )
292
+ # a.eql?( b ) # => true[/code]
293
+ #
294
+ # == arguments
295
+ # attributes
296
+ # Hash
297
+ # description: Hash object holding information for identifying which child to create
298
+ # example: { :type => "application" }
245
299
  #
246
- # == params
247
- # hash_rule:: Hash object holding information for identifying which child to create, eg. :type => :application
248
300
  # == returns
249
- # TestObject:: new child test object or reference to existing child
250
- def child( hash_rule )
301
+ # TestObject
302
+ # description: New child test object or reference to existing child
303
+ # example: -
304
+ def child( attributes )
251
305
 
252
- creation_hash = hash_rule.clone
306
+ ###############################################################################################################
307
+ #
308
+ # NOTICE: Please do not add anything unnessecery to this method, it might cause a major performance impact
309
+ #
310
+
311
+ # verify attributes argument format
312
+ attributes.check_type( Hash, "Wrong argument type $1 for attributes (expected $2)" )
313
+
314
+ # store original hash
315
+ creation_hash = attributes.clone
253
316
 
254
- initial_timeout = @test_object_factory.timeout unless ( custom_timeout = creation_hash.delete( :__timeout ) ).nil?
317
+ identification_directives = creation_hash.strip_dynamic_attributes!
255
318
 
256
- logging_enabled = MobyUtil::Logger.instance.enabled
257
- MobyUtil::Logger.instance.enabled = false if ( creation_hash.delete( :__logging ) == 'false' )
319
+ # raise exception if wrong value type given for ;__logging
320
+ identification_directives[ :__logging ].check_type(
321
+
322
+ [ TrueClass, FalseClass ],
323
+
324
+ "Wrong value type $1 for :__logging test object creation directive (expected $2)"
325
+
326
+ ) if identification_directives.has_key?( :__logging )
327
+
328
+ # disable logging if requested, remove pair from creation_hash
329
+ MobyUtil::Logger.instance.push_enabled( identification_directives[ :__logging ] || TDriver.logger.enabled )
258
330
 
259
331
  begin
260
332
 
261
- @test_object_factory.timeout = custom_timeout unless custom_timeout.nil?
262
- child_test_object = @test_object_factory.make( self, MobyBase::TestObjectIdentificator.new( creation_hash ) )
333
+ # TODO: refactor me
334
+ child_test_object = @test_object_factory.get_test_objects(
335
+
336
+ # current object as parent, can be either TestObject or SUT
337
+ :parent => self,
338
+
339
+ # test object identification hash
340
+ :object_attributes_hash => creation_hash,
341
+
342
+ :identification_directives => identification_directives
343
+
344
+ )
263
345
 
264
346
  rescue MobyBase::MultipleTestObjectsIdentifiedError => exception
265
347
 
266
- MobyUtil::Logger.instance.log "behaviour", "FAIL;Multiple child objects matched criteria.;#{ id };sut;{};child;#{ hash_rule.inspect }"
348
+ MobyUtil::Logger.instance.log "behaviour", "FAIL;Multiple child objects matched criteria.;#{ id };sut;{};child;#{ attributes.inspect }"
349
+
267
350
  Kernel::raise exception
268
351
 
269
352
  rescue MobyBase::TestObjectNotFoundError => exception
270
353
 
271
- MobyUtil::Logger.instance.log "behaviour", "FAIL;The child object could not be found.;#{ id };sut;{};child;#{ hash_rule.inspect }"
354
+ MobyUtil::Logger.instance.log "behaviour", "FAIL;The child object could not be found.;#{ id };sut;{};child;#{ attributes.inspect }"
355
+
272
356
  Kernel::raise exception
273
357
 
274
358
  rescue Exception => exception
275
359
 
276
- MobyUtil::Logger.instance.log "behaviour", "FAIL;Failed when trying to find child object.;#{ id };sut;{};child;#{ hash_rule.inspect }"
360
+ MobyUtil::Logger.instance.log "behaviour", "FAIL;Failed when trying to find child object.;#{ id };sut;{};child;#{ attributes.inspect }"
361
+
277
362
  Kernel::raise exception
278
363
 
279
364
  ensure
280
365
 
281
- @test_object_factory.timeout = initial_timeout unless custom_timeout.nil?
282
- MobyUtil::Logger.instance.enabled = logging_enabled
366
+ # restore original logger state
367
+ MobyUtil::Logger.instance.pop_enabled
283
368
 
284
369
  end
285
370
 
286
- # return already existing child TestObject so that there is references to only one TestObject
287
- child_test_object.add_parent( self )
288
-
289
- # Type information is stored in a separate member, not in the Hash
290
- creation_hash.delete( :type )
291
-
292
- @_child_object_cache.each_value do | _child |
293
-
294
- if _child.eql?( child_test_object )
295
-
296
- # Update the attributes that were used to create the child object.
297
- #_child.creation_attributes = creation_hash
298
-
299
- _child.instance_eval("@creation_attributes = #{ creation_hash.inspect }")
300
-
301
- return _child
302
-
303
- end
304
-
305
- end
306
-
307
- =begin
308
- @_child_objects.each do | _child |
309
-
310
- if _child.eql? child_test_object
311
-
312
- # Update the attributes that were used to create the child object.
313
- _child.creation_attributes = creation_hash
314
- return _child
315
-
316
- end
317
-
318
- end
319
- =end
320
- # Store the attributes that were used to create the child object.
321
- child.creation_attributes = creation_hash
322
-
323
- add_child( child_test_object )
324
-
371
+ # return child test object
325
372
  child_test_object
326
373
 
327
374
  end
328
375
 
329
- # == description
376
+ # == description
330
377
  # Returns a StateObject containing the current state of this test object as XML.
331
378
  # The state object is static and thus is not refreshed or synchronized etc.
332
379
  # == returns
333
- # StateObject:: State of this test object
380
+ # StateObject
381
+ # description: State of this test object
382
+ # example: -
334
383
  # == exceptions
335
384
  # RuntimeError
336
- # description: If the xml source for the object is not in initialized
337
- # == example
338
- # sut_state = @sut.state #get the state object for the sut
385
+ # description: If the XML source for the object is not in initialized
339
386
  def state
340
387
 
341
388
  # refresh if xml data is empty
@@ -343,16 +390,12 @@ module MobyBehaviour
343
390
 
344
391
  Kernel::raise RuntimeError.new( "Can not create state object of SUT with id '%s', no XML content or SUT not initialized properly." % @id ) if @xml_data.empty?
345
392
 
346
- MobyBase::StateObject.new(
347
-
348
- MobyUtil::XML.parse_string(
349
-
350
- "<sut name='sut' type='sut' id='%s'><objects>%s</objects></sut>" % [ @id, xml_data.xpath("tasInfo/object").collect{ | element | element.to_s }.join ]
351
-
352
- ).root,
353
- self
354
-
355
- )
393
+ MobyBase::StateObject.new(
394
+ MobyUtil::XML.parse_string(
395
+ "<sut name='sut' type='sut' id='%s'><objects>%s</objects></sut>" % [ @id, xml_data.xpath("tasInfo/object").collect{ | element | element.to_s }.join ]
396
+ ).root,
397
+ self
398
+ )
356
399
 
357
400
  end
358
401
 
@@ -371,17 +414,20 @@ module MobyBehaviour
371
414
  # example: -
372
415
  #
373
416
  # == exceptions
374
- # ArgumentError
375
- # description: The attributes argument was not a Hash
417
+ # TypeError
418
+ # description: Wrong argument type %s for attributes (expected Hash)
419
+ #
376
420
  def application( attributes = {} )
377
421
 
378
422
  begin
379
423
 
380
- raise TypeError.new( "Input parameter not of Type: Hash.\nIt is: #{ attributes.class }" ) unless attributes.kind_of?( Hash )
424
+ attributes.check_type( Hash, "Wrong argument type $1 for attributes (expected $2)" )
425
+
381
426
  get_default_app = attributes.empty?
427
+
382
428
  attributes[ :type ] = 'application'
383
- current_application_id = nil if attributes[ :id ].nil?
384
429
 
430
+ @current_application_id = nil if attributes[ :id ].nil?
385
431
 
386
432
  app_child = child( attributes )
387
433
 
@@ -406,13 +452,13 @@ module MobyBehaviour
406
452
  # Hash
407
453
  # description:
408
454
  # Options to be used for screen capture. See [link="#capture_options_table"]Options table[/link] for valid keys
409
- # example: ( :Filename => "c:/screen_shot.png" )
455
+ # example: ( :filename => "output.png" )
410
456
  #
411
457
  # == tables
412
458
  # capture_options_table
413
459
  # title: Options table
414
460
  # |Key|Type|Description|Example|Required|
415
- # |:Filename|String|Filename where file is stored: either absolute path or if no path given uses working directory|:Filename => "c:/screen_shot.png"|Yes|
461
+ # |:filename|String|Store output binary to this file. Absolute or relative path supported.|:filename => "screen_shots/output.png"|Yes|
416
462
  #
417
463
  # == returns
418
464
  # NilClass
@@ -420,33 +466,53 @@ module MobyBehaviour
420
466
  # example: -
421
467
  #
422
468
  # == exceptions
469
+ # TypeError
470
+ # description: Wrong argument type %s (expected Hash)
471
+ #
423
472
  # ArgumentError
424
- # description: Wrong argument type %s (Expected Hash)
473
+ # description: Output filename (:filename) not defined in argument hash
425
474
  #
426
475
  # ArgumentError
427
- # description: Symbol %s expected in argument(s)
476
+ # description: Wrong argument type %s for output filename (expected String)
428
477
  #
429
478
  # ArgumentError
430
- # description: Invalid string length for output filename: '%s'
479
+ # description: Output filename must not be empty string
431
480
  #
432
481
  def capture_screen( arguments )
433
482
 
434
483
  begin
435
484
 
436
- MobyBase::Error.raise( :WrongArgumentType, arguments.class, "Hash" ) unless arguments.kind_of?( Hash )
437
- MobyBase::Error.raise( :ArgumentSymbolExpected, ":Filename" ) unless arguments.include?( :Filename )
438
- MobyBase::Error.raise( :WrongArgumentTypeFor, arguments[ :Filename ].class, "output filename", "String" ) unless arguments[:Filename].kind_of?( String )
439
- MobyBase::Error.raise( :InvalidStringLengthFor, arguments[ :Filename ].length, "output filename", ">=1" ) unless arguments[:Filename].length > 0
485
+ # raise exception with default message if wrong argument type given
486
+ arguments.check_type( Hash, "Wrong argument type $1 (expected $2)" )
487
+
488
+ # legacy support: support also :Filename
489
+ arguments[ :filename ] = arguments.delete( :Filename ) if arguments.has_key?( :Filename )
490
+
491
+ # raise exception with default message if hash doesn't contain required key
492
+ arguments.require_key( :filename, "Output filename ($1) not defined in argument hash" )
493
+
494
+ # verify that filename is type of String
495
+ arguments[ :filename ].check_type( String, "Wrong argument type $1 for output filename (expected $2)" )
496
+
497
+ # verify that filename is not empty string
498
+ arguments[ :filename ].not_empty( "Output filename must not be empty string" )
440
499
 
441
- screen_capture_command_object = MobyCommand::ScreenCapture.new()
442
- screen_capture_command_object.redraw = arguments[ :Redraw ] if arguments[ :Redraw ]
443
- image_binary = execute_command( screen_capture_command_object )
500
+ # create screen capture command object
501
+ command = MobyCommand::ScreenCapture.new()
444
502
 
445
- File.open( arguments[ :Filename ], 'wb:binary'){ | image_file | image_file << image_binary }
503
+ command.redraw = arguments[ :Redraw ] if arguments[ :Redraw ]
504
+
505
+ # execute command and write binary to file
506
+ File.open( File.expand_path( arguments[ :filename ] ), 'wb:binary' ){ | file |
507
+
508
+ file << execute_command( command )
509
+
510
+ }
446
511
 
447
512
  rescue Exception => e
448
513
 
449
- MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed to capture screen.;#{id.to_s};sut;{};capture_screen;" << (arguments.kind_of?( Hash ) ? arguments.inspect : arguments.class.to_s )
514
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed to capture screen.;#{id.to_s};sut;{};capture_screen;" << ( arguments.kind_of?( Hash ) ? arguments.inspect : arguments.class.to_s )
515
+
450
516
  Kernel::raise e
451
517
 
452
518
  end
@@ -457,47 +523,61 @@ module MobyBehaviour
457
523
 
458
524
  end
459
525
 
526
+ # == description
460
527
  # Instructs the SUT to start the specified application if it is not currenly being executed
461
528
  # The application will also be brought to the foregound.
462
- # === params
463
- # target:: Hash, used to indetify the application to be executed. All symbols defined in the hash
464
- # must match with the launched application.
465
- # The following symbols can be defined in the hash, at least one them must be included:
466
- # [:uid] = String or Integer, uid of the application (268458181)
467
- # [:name] = String, executable name of the application ('Mce.exe')
468
- # [:arguments] = Comma separated list of arguments passed to application when starting. ('--nogui,-v')
469
- # Examples:
470
- # @sut.run(:name => 'Mce.exe')
471
- # @sut.run(:name => 'Mce.exe', :uid => 268458181)
472
- # @sut.run(:name => 'demoapp.exe', :arguments => '--nogui')
473
- # === returns
474
- # TestObject:: Test object of the started application
475
- # === raises
476
- # ArgumentError:: If no Hash is provided as argument or the Hash does not contain at least a valid :uid or :name
477
- # VerificationError:: If no application test object can be found after starting the application, or the found object does not match the launched application
529
+ #
530
+ # == arguments
531
+ # target
532
+ # Hash
533
+ # description: used to indetify the application to be executed. All symbols defined in the hash must match with the launched application. See application [link="#run_hash_arguments"]run argument hash keys[/link] table.
534
+ # example: { :name => 'calculator' }
535
+ #
536
+ # == tables
537
+ # run_hash_arguments
538
+ # title: Run argument hash keys
539
+ # description: The following symbols can be defined in the hash, at least one them must be defined.
540
+ # |Key|Type|Description|Example|
541
+ # |:uid|String or Integer|Unique ID of the application|{ :uid => 268458181 }|
542
+ # |:name|String|Executable name of the application|{ :name => 'calculator' }|
543
+ # |:arguments|String|Comma separated list of arguments passed to application when starting|{ :arguments => '--nogui,-v' }|
544
+ #
545
+ # == returns
546
+ # TestObject
547
+ # description: Test object of the started application
548
+ # example: -
549
+ #
550
+ # == exceptions
551
+ # TypeError
552
+ # description: Wrong argument type %s for run method (expected Hash)
553
+ #
554
+ # ArgumentError
555
+ # description: Required key :uid or :name not found from argument hash
556
+ #
557
+ # VerificationError
558
+ # description: If no application test object can be found after starting the application, or the found object does not match the launched application
559
+ #
478
560
  def run( target )
479
561
 
480
562
  begin
563
+
481
564
  # set the refresh interval to zero while the application is launched
482
565
  #orig_interval = MobyUtil::Parameter[ @id ][ :refresh_interval ]
483
566
  #MobyUtil::Parameter[ @id ][ :refresh_interval ] = '0'
484
567
 
485
568
  # raise exception if argument type other than hash
486
- Kernel::raise ArgumentError.new( "Wrong argument type %s) for %s (Expected: %s)" % [ target.class, "run method", "Hash" ]) unless target.instance_of?( Hash )
569
+ target.check_type( Hash, "Wrong argument type $1 for run method (expected $2)" )
487
570
 
488
- # default value for keys that does not exist in hash
571
+ # default value for missing keys
489
572
  target.default = nil
490
573
 
491
- Kernel::raise ArgumentError.new( "Argument hash must contain at least :uid or :name" ) unless target[ :uid ] || target[ :name ]
574
+ # raise exception if :uid or :name not found from hash
575
+ target.require_key( [ :uid, :name ], "Required key :uid or :name not found from argument hash" )
492
576
 
493
- # nils are valid arguments here, at least one of :name, :id has been verified to not be nil
494
- # ArgumentError is raised by MobyCommnand::Application if the parameters are not valid
495
- sleep_time = target[ :sleep_after_launch ].to_i #( target[ :sleep_after_launch ] == nil ? 0 : target[ :sleep_after_launch ].to_i)
577
+ sleep_time = target[ :sleep_after_launch ].to_i
496
578
 
497
- #Kernel::raise ArgumentError.new( "Sleep time need to be Integer >= 0" ) unless sleep_time.kind_of? Numeric #instance_of?( Fixnum )
498
579
  Kernel::raise ArgumentError.new( "Sleep time need to be >= 0" ) unless sleep_time >= 0
499
580
 
500
-
501
581
  # try to find an existing app with the current arguments
502
582
  if target[ :try_attach ]
503
583
 
@@ -506,36 +586,52 @@ module MobyBehaviour
506
586
  # either ID or NAME have been passed to identify the application
507
587
  # raise exception if more than one app has been found for this id/name
508
588
  # otherwhise attempt to get the application test object
589
+
509
590
  app_info = find_app(app_list, {:id => target[ :uid ]}) if target[ :uid ] != nil
510
591
  app_info = find_app(app_list, {:name => target[ :name ]}) unless app_info
511
592
  app = self.application(:id => app_info.id) if app_info
593
+
512
594
  if app
513
- begin
514
- app.bring_to_foreground
515
- rescue Exception => e
516
- MobyUtil::Logger.instance.log "WARNING", "Could not bring app to foreground"
517
- end
518
- return app
595
+
596
+ begin
597
+
598
+ app.bring_to_foreground
599
+
600
+ rescue Exception => e
601
+
602
+ MobyUtil::Logger.instance.log "WARNING", "Could not bring app to foreground"
603
+
604
+ end
605
+
606
+ return app
607
+
519
608
  end
609
+
520
610
  end
521
611
 
522
612
  if ( target[ :start_command ] != nil )
613
+
523
614
  Kernel::raise MobyBase::BehaviourError.new("Run", "Failed to load execute_shell_method") unless self.respond_to?("execute_shell_command")
615
+
524
616
  execute_shell_command( target[ :start_command ], :detached => "true" )
617
+
525
618
  else
526
- run_command = MobyCommand::Application.new(
527
- :Run,
528
- target[ :name ],
529
- target[ :uid ],
530
- self,
531
- target[ :arguments ],
532
- target[ :environment ],
533
- target[ :events_to_listen ],
534
- target[ :signals_to_listen ]
535
- )
536
619
 
537
620
  # execute the application control service request
538
- execute_command( run_command )
621
+ execute_command(
622
+
623
+ MobyCommand::Application.new(
624
+ :Run,
625
+ target[ :name ],
626
+ target[ :uid ],
627
+ self,
628
+ target[ :arguments ],
629
+ target[ :environment ],
630
+ target[ :events_to_listen ],
631
+ target[ :signals_to_listen ]
632
+ )
633
+
634
+ )
539
635
 
540
636
  end
541
637
 
@@ -545,22 +641,16 @@ module MobyBehaviour
545
641
 
546
642
  sleep sleep_time if sleep_time > 0
547
643
 
548
- #TODO: Refresh should be initiated by sut_controller
549
- #PKI: one refresh might not be enough as application launch takes more time sometimes
550
- #PKI: added artificial wait for now until this has been refactored
551
-
552
- expected_attributes = Hash.new
553
-
554
- expected_attributes[ :type ] = 'application'
644
+ expected_attributes = { :type => 'application' }
555
645
 
556
646
  expected_attributes[ :id ] = target[ :uid ] unless target[ :uid ].nil?
647
+
557
648
  expected_attributes[ :FullName ] = target[ :name ] unless target[ :name ].nil?
558
649
 
559
650
  error_details = target[ :name ].nil? ? "" : "name: " << target[ :name ].to_s
560
-
561
651
  error_details << ( error_details.empty? ? "" : ", ") << "id: " << target[ :uid ].to_s if !target[ :uid ].nil?
562
652
 
563
- if( self.ui_type.downcase.include?( 'qt' ) && !expected_attributes[ :FullName ].nil? )
653
+ if( !expected_attributes[ :FullName ].nil? )
564
654
 
565
655
  if( expected_attributes[ :FullName ].include?('/') )
566
656
 
@@ -589,10 +679,10 @@ module MobyBehaviour
589
679
  begin
590
680
 
591
681
  self.wait_child(
592
- expected_attributes,
593
- MobyUtil::Parameter[ @id ][ :application_synchronization_timeout, '5' ].to_f,
594
- MobyUtil::Parameter[ @id ][ :application_synchronization_retry_interval, '0.5' ].to_f
595
- )
682
+ expected_attributes,
683
+ MobyUtil::Parameter[ @id ][ :application_synchronization_timeout, '5' ].to_f,
684
+ MobyUtil::Parameter[ @id ][ :application_synchronization_retry_interval, '0.5' ].to_f
685
+ )
596
686
 
597
687
  rescue MobyBase::SyncTimeoutError
598
688
 
@@ -611,10 +701,6 @@ module MobyBehaviour
611
701
 
612
702
  Kernel::raise MobyBase::BehaviourError.new("Run", "Failed to launch application")
613
703
 
614
- #MobyBase::Error.raise( :BehaviourErrorOccured, "Run", "Failed to launch application", e.message )
615
- #Kernel::raise behaviour_runtime_error("Run", "Failed to launch application", e.message, e.backtrace)
616
- #Kernel::raise e
617
-
618
704
  end
619
705
 
620
706
  MobyUtil::Logger.instance.log "behaviour" , "PASS;The application was launched successfully.;#{id.to_s};sut;{};run;" << target.inspect
@@ -648,7 +734,7 @@ module MobyBehaviour
648
734
  # |:LongPress|Holds a key as long_press_timeout specifies in tdriver_parameters.xml. Please note also long_press_interval (Only for S60)|MobyCommand::KeySequence.new( :kApp, :LongPress )|
649
735
  #
650
736
  # == arguments
651
- # symbol_or_sequence
737
+ # value
652
738
  # Symbol
653
739
  # description: one of the key symbols defined in /tdriver/keymaps/
654
740
  # example: @sut.press_key(:kDown)
@@ -662,38 +748,29 @@ module MobyBehaviour
662
748
  # example: -
663
749
  #
664
750
  # == exceptions
665
- # ArgumentError
666
- # description: if input not a symbol or not of type MobyCommand::KeySequence
751
+ # TypeError
752
+ # description: Wrong argument type $1 for press_key (expected $2)
667
753
  #
668
- def press_key( symbol_or_sequence )
754
+ def press_key( value )
669
755
 
670
756
  begin
671
757
 
672
- if symbol_or_sequence.instance_of?( Symbol )
673
-
674
- sequence = MobyCommand::KeySequence.new( symbol_or_sequence )
675
-
676
- elsif symbol_or_sequence.instance_of? MobyCommand::KeySequence
677
-
678
- sequence = symbol_or_sequence
758
+ value.check_type( [ Symbol, MobyCommand::KeySequence ], "Wrong argument type $1 for press_key (expected $2)" )
679
759
 
680
- else
681
-
682
- raise ArgumentError.new('Data not of type Symbol or MobyController::KeySequence.')
683
-
684
- end
760
+ sequence = value.kind_of?( Symbol ) ? MobyCommand::KeySequence.new( value ) : value
685
761
 
686
762
  sequence.set_sut( self )
763
+
687
764
  execute_command( sequence )
688
765
 
689
766
  rescue Exception => e
690
767
 
691
- MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed to press key(s).;#{id.to_s};sut;{};press_key;#{ symbol_or_sequence }"
768
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed to press key(s).;#{id.to_s};sut;{};press_key;#{ value }"
692
769
  Kernel::raise e
693
770
 
694
771
  end
695
772
 
696
- MobyUtil::Logger.instance.log "behaviour" , "PASS;Successfully pressed key(s).;#{id.to_s};sut;{};press_key;#{ symbol_or_sequence }"
773
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Successfully pressed key(s).;#{id.to_s};sut;{};press_key;#{ value }"
697
774
 
698
775
  nil
699
776
 
@@ -705,29 +782,29 @@ module MobyBehaviour
705
782
  #
706
783
  # == arguments
707
784
  # *arguments
708
- # String
785
+ # String
709
786
  # description: Optional argument which is the name of parameter.
710
787
  # example: 'new_parameter'
711
788
  # Symbol
712
789
  # description: Optional argument which is the name of parameter.
713
- # example: :product
790
+ # example: :product
714
791
  #
715
792
  # == returns
716
793
  # String
717
- # description: Value matching the parameter name given as argument
718
- # example: 'testability-driver-qt-sut-plugin'
794
+ # description: Value matching the parameter name given as argument
795
+ # example: 'testability-driver-qt-sut-plugin'
719
796
  #
720
797
  # MobyUtil::ParameterHash
721
- # description: Hash of values, if no arguments is specified
798
+ # description: Hash of values, if no arguments is specified
722
799
  # example: { :value => '1', :inner_hash => { :another_value => 100 } }
723
800
  #
724
801
  # == exceptions
725
802
  # ParameterNotFoundError
726
- # description: If the parameter with the given name does not exist
803
+ # description: If the parameter with the given name does not exist
727
804
  #
728
805
  # == example
729
- # parameter_hash = @sut.parameter #returns the hash of all sut parameters
730
- # value = @sut.parameter[:product] #returns the value for parameter 'product' for this particular sut
806
+ # parameter_hash = @sut.parameter #returns the hash of all sut parameters
807
+ # value = @sut.parameter[:product] #returns the value for parameter 'product' for this particular sut
731
808
  # value = @sut.parameter['non_existing_parameter'] #raises exception that 'non_existing_parameter' was not found
732
809
  # value = sut.parameter['non_existing_parameter', 'default'] #returns default value if given parameter is not found
733
810
  # sut.parameter[:new_parameter] ='new_value' # set the value of parameter 'product' for this particular sut
@@ -747,185 +824,191 @@ module MobyBehaviour
747
824
 
748
825
  end
749
826
 
750
- # == description
751
- # Wrapper function to return translated string for this SUT to read the values from localisation database.
752
- #
753
- # == arguments
754
- # logical_name
755
- # String
756
- # description: Logical name (LNAME) of the item to be translated. If prefix for User Information or Operator Data are used then the appropiate retrieve methods will be called
757
- # example: "txt_button_ok"
758
- # Symbol
759
- # description: Symbol form of the logical name (LNAME) of the item to be translated.
760
- # example: :txt_button_ok
761
- #
762
- # file_name
763
- # String
764
- # description: Optional FNAME search argument for the translation
765
- # example: "agenda"
766
- # default: nil
767
- #
768
- # plurality
769
- # String
770
- # description: Optional PLURALITY search argument for the translation
771
- # example: "a" or "singular"
772
- # default: nil
773
- #
774
- # numerus
775
- # String
776
- # description: Optional numeral replacement of '%Ln' tags on translation strings
777
- # example: "1"
778
- # default: nil
779
- # Integer
780
- # description: Optional numeral replacement of '%Ln' tags on translation strings
781
- # example: 1
782
- #
783
- # lengthvariant
784
- # String
785
- # description: Optional LENGTHVAR search argument for the translation (1-9)
786
- # example: "1"
787
- # default: nil
788
- #
789
- # == returns
790
- # String
791
- # description: Translation matching the logical_name
792
- # example: "Ok"
793
- # Array
794
- # description: If multiple translations have been found for the search conditions an Array with all Strings be returned
795
- # example: ["Ok", "OK"]
796
- #
797
- # == exceptions
798
- # LanguageNotFoundError
799
- # description: In case language is not found
800
- #
801
- # LogicalNameNotFoundError
802
- # description: In case no logical name is not found for current language
803
- #
804
- # SqlError
805
- # description: In case there are problems with the database connectivity
806
- #
807
- def translate( logical_name, file_name = nil, plurality = nil, numerus = nil, lengthvariant = nil )
808
-
809
- Kernel::raise LogicalNameNotFoundError.new("Logical name is nil") if logical_name.nil?
810
-
811
- translation_type = "localisation"
812
-
813
- # Check for User Information prefix( "uif_...")
814
- MobyUtil::Parameter[ :user_data_logical_string_identifier, 'uif_' ].split('|').each do |identifier|
815
- if logical_name.to_s.index(identifier)==0
816
- translation_type="user_data"
817
- end
818
- end
819
-
820
- # Check for Operator Data prefix( "operator_...")
821
- MobyUtil::Parameter[ :operator_data_logical_string_identifier, 'operator_' ].split('|').each do |identifier|
822
- if logical_name.to_s.index(identifier)==0
823
- translation_type="operator_data"
824
- end
825
- end
826
-
827
- case translation_type
828
-
829
- when "user_data"
830
- get_user_information( logical_name )
831
-
832
- when "operator_data"
833
- get_operator_data( logical_name )
834
-
835
- when "localisation"
836
- language=nil
837
- if ( MobyUtil::Parameter[ self.id ][:read_lang_from_app]=='true')
838
- #read localeName app
839
- language=self.application.attribute("localeName")
840
- #determine the language from the locale
841
- language=language.split('_')[0].to_s if (language!=nil && !language.empty?)
842
- else
843
- language=MobyUtil::Parameter[ self.id ][ :language ]
844
- end
845
- Kernel::raise LanguageNotFoundError.new("Language cannot be determind to perform translation") if (language==nil || language.empty?)
846
- translation = MobyUtil::Localisation.translation( logical_name, language,
847
- MobyUtil::Parameter[ self.id ][ :localisation_server_database_tablename ], file_name,
848
- plurality, lengthvariant )
849
-
850
- if translation.kind_of? String and !numerus.nil?
851
- translation.gsub!(/%(Ln|1)/){|s| numerus}
852
- elsif translation.kind_of? Array and !numerus.nil?
853
- translation.each do |trans|
854
- trans.gsub!(/%(Ln|1)/){|s| numerus}
855
- end
856
- end
857
- translation
858
- end
859
- end
860
-
861
- # == description
862
- # Wrapper function to retrieve user information for this SUT from the user information database.
863
- #
864
- # == arguments
865
- # user_data_lname
866
- # String
867
- # description: Logical name (LNAME) of the user information item to be retrieved.
868
- # example: "uif_first_name"
869
- # Symbol
870
- # description: Symbol form of the logical name (LNAME) of the user information item to be retrieved.
871
- # example: :uif_first_name
872
- #
873
- # == returns
874
- # String
875
- # description: User data string
876
- # example: "Ivan"
877
- # Array
878
- # description: Array of Strings when multiple user data strings found.
879
- # example: ["Ivan", "Manolo"]
880
- #
881
- # == exceptions
882
- # UserDataNotFoundError
883
- # description: In case the desired user data is not found
884
- #
885
- # UserDataColumnNotFoundError
886
- # description: In case the desired data column name to be used for the output is not found
887
- #
888
- # SqlError
889
- # description: In case there are problems with the database connectivity
890
- #
891
- def get_user_information( user_data_lname )
892
- language = MobyUtil::Parameter[ self.id ][ :language ]
893
- table_name = MobyUtil::Parameter[ self.id ][ :user_data_server_database_tablename ]
894
- MobyUtil::UserData.retrieve( user_data_lname, language, table_name )
895
- end
896
-
897
- # == description
898
- # Wrapper function to retrieve operator data for this SUT from the operator data database.
899
- #
900
- # == arguments
901
- # operator_data_lname
902
- # String
903
- # description: Logical name (LNAME) of the operator data item to be retrieved.
904
- # example: "operator_welcome_message"
905
- # Symbol
906
- # description: Symbol form of the logical name (LNAME) of the operator data item to be retrieved.
907
- # example: :operator_welcome_message
908
- #
909
- # == returns
910
- # String
911
- # description: User data string
912
- # example: "Welcome to Orange"
913
- #
914
- # == exceptions
915
- # OperatorDataNotFoundError
916
- # description: In case the desired operator data is not found
917
- #
918
- # OperatorDataColumnNotFoundError
919
- # description: In case the desired data column name to be used for the output is not found
920
- #
921
- # SqlError
922
- # description: In case there are problems with the database connectivity
923
- #
924
- def get_operator_data( operator_data_lname )
925
- operator = MobyUtil::Parameter[ self.id ][ :operator_selected ]
926
- table_name = MobyUtil::Parameter[ self.id ][ :operator_data_server_database_tablename]
927
- MobyUtil::OperatorData.retrieve( operator_data_lname, operator, table_name )
928
- end
827
+ # == description
828
+ # Wrapper function to return translated string for this SUT to read the values from localisation database.
829
+ #
830
+ # == arguments
831
+ # logical_name
832
+ # String
833
+ # description: Logical name (LNAME) of the item to be translated. If prefix for User Information or Operator Data are used then the appropiate retrieve methods will be called
834
+ # example: "txt_button_ok"
835
+ # Symbol
836
+ # description: Symbol form of the logical name (LNAME) of the item to be translated.
837
+ # example: :txt_button_ok
838
+ #
839
+ # file_name
840
+ # String
841
+ # description: Optional FNAME search argument for the translation
842
+ # example: "agenda"
843
+ # default: nil
844
+ #
845
+ # plurality
846
+ # String
847
+ # description: Optional PLURALITY search argument for the translation
848
+ # example: "a" or "singular"
849
+ # default: nil
850
+ #
851
+ # numerus
852
+ # String
853
+ # description: Optional numeral replacement of an '%Ln | %1' tag on the translated string
854
+ # example: "1"
855
+ # default: nil
856
+ # Integer
857
+ # description: Optional numeral replacement of an '%Ln | %1' tag on the translated string
858
+ # example: 1
859
+ # Array
860
+ # description: Optional numeral replacements for multiple '%L1 | %1, %L2 | %2, ...' tags on the translated string
861
+ # example: [ 3, 2]
862
+ #
863
+ # lengthvariant
864
+ # String
865
+ # description: Optional LENGTHVAR search argument for the translation (1-9)
866
+ # example: "1"
867
+ # default: nil
868
+ #
869
+ # == returns
870
+ # String
871
+ # description: Translation matching the logical_name
872
+ # example: "Ok"
873
+ # Array
874
+ # description: If multiple translations have been found for the search conditions an Array with all Strings be returned
875
+ # example: ["Ok", "OK"]
876
+ #
877
+ # == exceptions
878
+ # LanguageNotFoundError
879
+ # description: In case language is not found
880
+ #
881
+ # LogicalNameNotFoundError
882
+ # description: In case no logical name is not found for current language
883
+ #
884
+ # SqlError
885
+ # description: In case there are problems with the database connectivity
886
+ #
887
+ def translate( logical_name, file_name = nil, plurality = nil, numerus = nil, lengthvariant = nil )
888
+ Kernel::raise LogicalNameNotFoundError.new("Logical name is nil") if logical_name.nil?
889
+ translation_type = "localisation"
890
+
891
+ # Check for User Information prefix( "uif_...")
892
+ MobyUtil::Parameter[ :user_data_logical_string_identifier, 'uif_' ].split('|').each do |identifier|
893
+ if logical_name.to_s.index(identifier)==0
894
+ translation_type="user_data"
895
+ end
896
+ end
897
+
898
+ # Check for Operator Data prefix( "operator_...")
899
+ MobyUtil::Parameter[ :operator_data_logical_string_identifier, 'operator_' ].split('|').each do |identifier|
900
+ if logical_name.to_s.index(identifier)==0
901
+ translation_type="operator_data"
902
+ end
903
+ end
904
+
905
+ case translation_type
906
+ when "user_data"
907
+ get_user_information( logical_name )
908
+
909
+ when "operator_data"
910
+ get_operator_data( logical_name )
911
+
912
+ when "localisation"
913
+ language=nil
914
+ if ( MobyUtil::Parameter[ self.id ][:read_lang_from_app]=='true')
915
+ #read localeName app
916
+ language=self.application.attribute("localeName")
917
+ #determine the language from the locale
918
+ language=language.split('_')[0].to_s if (language!=nil && !language.empty?)
919
+ else
920
+ language=MobyUtil::Parameter[ self.id ][ :language ]
921
+ end
922
+ Kernel::raise LanguageNotFoundError.new("Language cannot be determind to perform translation") if (language==nil || language.empty?)
923
+ translation = MobyUtil::Localisation.translation( logical_name, language,
924
+ MobyUtil::Parameter[ self.id ][ :localisation_server_database_tablename ], file_name, plurality, lengthvariant )
925
+ if translation.kind_of? String and !numerus.nil?
926
+ if numerus.kind_of? Array
927
+ translation.gsub!(/%[L]?(\d)/){|s| numerus[($1.to_i) -1] }
928
+ elsif numerus.kind_of? String or numerus.kind_of? Integer
929
+ translation.gsub!(/%(Ln|1)/){|s| numerus.to_s}
930
+ end
931
+ elsif translation.kind_of? Array and !numerus.nil?
932
+ translation.each do |trans|
933
+ if numerus.kind_of? Array
934
+ trans.gsub!(/%[L]?(\d)/){|s| numerus[($1.to_i) -1] }
935
+ elsif numerus.kind_of? String or numerus.kind_of? Integer
936
+ trans.gsub!(/%(Ln|1)/){|s| numerus.to_s}
937
+ end
938
+ end
939
+ end
940
+ translation
941
+ end
942
+ end
943
+
944
+ # == description
945
+ # Wrapper function to retrieve user information for this SUT from the user information database.
946
+ #
947
+ # == arguments
948
+ # user_data_lname
949
+ # String
950
+ # description: Logical name (LNAME) of the user information item to be retrieved.
951
+ # example: "uif_first_name"
952
+ # Symbol
953
+ # description: Symbol form of the logical name (LNAME) of the user information item to be retrieved.
954
+ # example: :uif_first_name
955
+ #
956
+ # == returns
957
+ # String
958
+ # description: User data string
959
+ # example: "Ivan"
960
+ # Array
961
+ # description: Array of Strings when multiple user data strings found.
962
+ # example: ["Ivan", "Manolo"]
963
+ #
964
+ # == exceptions
965
+ # UserDataNotFoundError
966
+ # description: In case the desired user data is not found
967
+ #
968
+ # UserDataColumnNotFoundError
969
+ # description: In case the desired data column name to be used for the output is not found
970
+ #
971
+ # SqlError
972
+ # description: In case there are problems with the database connectivity
973
+ #
974
+ def get_user_information( user_data_lname )
975
+ language = MobyUtil::Parameter[ self.id ][ :language ]
976
+ table_name = MobyUtil::Parameter[ self.id ][ :user_data_server_database_tablename ]
977
+ MobyUtil::UserData.retrieve( user_data_lname, language, table_name )
978
+ end
979
+
980
+ # == description
981
+ # Wrapper function to retrieve operator data for this SUT from the operator data database.
982
+ #
983
+ # == arguments
984
+ # operator_data_lname
985
+ # String
986
+ # description: Logical name (LNAME) of the operator data item to be retrieved.
987
+ # example: "operator_welcome_message"
988
+ # Symbol
989
+ # description: Symbol form of the logical name (LNAME) of the operator data item to be retrieved.
990
+ # example: :operator_welcome_message
991
+ #
992
+ # == returns
993
+ # String
994
+ # description: User data string
995
+ # example: "Welcome to Orange"
996
+ #
997
+ # == exceptions
998
+ # OperatorDataNotFoundError
999
+ # description: In case the desired operator data is not found
1000
+ #
1001
+ # OperatorDataColumnNotFoundError
1002
+ # description: In case the desired data column name to be used for the output is not found
1003
+ #
1004
+ # SqlError
1005
+ # description: In case there are problems with the database connectivity
1006
+ #
1007
+ def get_operator_data( operator_data_lname )
1008
+ operator = MobyUtil::Parameter[ self.id ][ :operator_selected ]
1009
+ table_name = MobyUtil::Parameter[ self.id ][ :operator_data_server_database_tablename]
1010
+ MobyUtil::OperatorData.retrieve( operator_data_lname, operator, table_name )
1011
+ end
929
1012
 
930
1013
  # == nodoc
931
1014
  # Function to update all children of current SUT
@@ -940,13 +1023,12 @@ module MobyBehaviour
940
1023
 
941
1024
  unless @childs_updated
942
1025
 
943
- @_child_object_cache.each_value{ | test_object |
1026
+ @child_object_cache.each_object{ | test_object |
944
1027
 
945
1028
  test_object.update( @xml_data )
946
1029
 
947
1030
  }
948
1031
 
949
-
950
1032
  end
951
1033
 
952
1034
  @childs_updated = true
@@ -1001,26 +1083,25 @@ module MobyBehaviour
1001
1083
 
1002
1084
  @verify_blocks << MobyUtil::VerifyBlock.new( block,expected, message, 0, MobyUtil::KernelHelper.find_source( caller( 3 ).first.to_s ) )
1003
1085
 
1086
+ nil
1087
+
1004
1088
  end
1005
1089
 
1006
1090
  # == description
1007
1091
  # Clears all verification blocks added to the sut through verify_always() method and
1008
1092
  # verify_blocks configuration parameter in the tdriver parameters file
1009
1093
  #
1010
- # == arguments
1011
- #
1012
1094
  # == returns
1013
1095
  # Array
1014
- # description: Now empty array of verification blocks
1015
- #
1016
- # == exceptions
1017
- #
1096
+ # description: Empty array
1097
+ # example: []
1018
1098
  def clear_verify_blocks
1019
1099
 
1020
1100
  @verify_blocks = []
1021
1101
 
1022
1102
  end
1023
1103
 
1104
+ # == nodoc
1024
1105
  def get_application_id
1025
1106
 
1026
1107
  orig_frozen = @frozen;
@@ -1047,8 +1128,9 @@ module MobyBehaviour
1047
1128
 
1048
1129
  end
1049
1130
 
1050
- private
1131
+ private
1051
1132
 
1133
+ # TODO: document me
1052
1134
  def fetch_references( xml )
1053
1135
 
1054
1136
  pids = []
@@ -1064,7 +1146,7 @@ module MobyBehaviour
1064
1146
 
1065
1147
  nodes.each { | element |
1066
1148
 
1067
- pid = element.xpath('//attribute[@name = "uri"]/value/text()')[ 0 ].to_s
1149
+ pid = element.at_xpath('//attribute[@name = "uri"]/value/text()').content #[ 0 ].to_s
1068
1150
 
1069
1151
  if pid.nil? or pid.empty? or pid.to_i <= 0 # invalid reference
1070
1152
 
@@ -1078,7 +1160,7 @@ module MobyBehaviour
1078
1160
  y_abs = xml.xpath( '//object[@type = "TDriverRef"]/../../attributes/attribute[@name ="y_absolute"]/value/text()' )[ idx - 1 ]
1079
1161
 
1080
1162
  # window size
1081
- winSize = xml.xpath( "//objects/object[@type = 'MainWindow']/attributes/attribute[@name ='size']/value/text()" )[ 0 ].to_s
1163
+ winSize = xml.at_xpath( "//objects/object[@type = 'MainWindow']/attributes/attribute[@name ='size']/value/text()" ).content #[ 0 ].to_s
1082
1164
 
1083
1165
  # ref-ref parent does not know x coordinate, use the grandparent xys
1084
1166
  x_prev = x_abs.to_s unless x_abs.nil?
@@ -1090,56 +1172,56 @@ module MobyBehaviour
1090
1172
 
1091
1173
  begin
1092
1174
 
1093
- subdata =
1094
- MobyUtil::XML.parse_string(
1095
- execute_command(
1096
- MobyCommand::Application.new(
1097
- :State,
1098
- nil,
1099
- pid,
1100
- self,
1101
- nil,
1102
- nil,
1103
- nil,
1104
- nil,
1105
- {
1106
- 'x_parent_absolute' => x_prev,
1107
- 'y_parent_absolute' => y_prev,
1108
- 'embedded' => 'true',
1109
- 'parent_size' => winSize
1110
- }
1111
- )
1112
- )[ 0 ]
1113
- )
1114
-
1115
- child = subdata.root.xpath('//object')[0]
1116
-
1117
- # Remove the attribute with the pid retrieval was not successful.
1118
- # (server returns the previous hit if not found)
1119
- if child.attribute('id' ) != pid
1120
-
1121
- element.remove
1175
+ subdata =
1176
+ MobyUtil::XML.parse_string(
1177
+ execute_command(
1178
+ MobyCommand::Application.new(
1179
+ :State,
1180
+ nil,
1181
+ pid,
1182
+ self,
1183
+ nil,
1184
+ nil,
1185
+ nil,
1186
+ nil,
1187
+ {
1188
+ 'x_parent_absolute' => x_prev,
1189
+ 'y_parent_absolute' => y_prev,
1190
+ 'embedded' => 'true',
1191
+ 'parent_size' => winSize
1192
+ }
1193
+ )
1194
+ )[ 0 ]
1195
+ )
1196
+
1197
+ child = subdata.root.xpath('//object')[0]
1198
+
1199
+ # Remove the attribute with the pid retrieval was not successful.
1200
+ # (server returns the previous hit if not found)
1201
+ if child.attribute('id' ) != pid
1202
+
1203
+ element.remove
1122
1204
 
1123
- else
1205
+ else
1124
1206
 
1125
- # Remove the application layer
1126
- objs = child.xpath( '/tasMessage/tasInfo/object/objects/*' )
1207
+ # Remove the application layer
1208
+ objs = child.xpath( '/tasMessage/tasInfo/object/objects/*' )
1127
1209
 
1128
- if !objs.nil?
1210
+ if !objs.nil?
1129
1211
 
1130
- objs.each { | el | element.add_previous_sibling( el ) }
1212
+ objs.each { | el | element.add_previous_sibling( el ) }
1131
1213
 
1132
- element.remove
1214
+ element.remove
1133
1215
 
1134
- end
1216
+ end
1135
1217
 
1136
- end
1218
+ end
1137
1219
 
1138
1220
  rescue RuntimeError => e
1139
1221
 
1140
- raise e unless e.message.include? "no longer available"
1222
+ raise e unless e.message.include? "no longer available"
1141
1223
 
1142
- return xml
1224
+ return xml
1143
1225
 
1144
1226
  end
1145
1227
 
@@ -1193,11 +1275,10 @@ module MobyBehaviour
1193
1275
 
1194
1276
  @frozen = false
1195
1277
 
1196
- @_child_object_cache = {}
1278
+ @child_object_cache = TDriver::TestObjectCache.new
1197
1279
 
1198
1280
  @current_application_id = nil
1199
1281
 
1200
-
1201
1282
  @dump_count = 0
1202
1283
 
1203
1284
  # default values
@@ -1218,9 +1299,9 @@ module MobyBehaviour
1218
1299
  @refresh_interval = MobyUtil::Parameter[ @id ][ :refresh_interval, @refresh_interval ].to_f
1219
1300
 
1220
1301
  end
1221
-
1302
+
1222
1303
  @last_xml_data = nil
1223
-
1304
+
1224
1305
  ruby_file = MobyUtil::Parameter[ @id ][ :verify_blocks ]
1225
1306
 
1226
1307
  @verify_blocks = []
@@ -1240,7 +1321,7 @@ module MobyBehaviour
1240
1321
 
1241
1322
  end
1242
1323
 
1243
- public # deprecated
1324
+ public # deprecated
1244
1325
 
1245
1326
 
1246
1327
  # == nodoc
@@ -1253,7 +1334,7 @@ module MobyBehaviour
1253
1334
  # == raises
1254
1335
  # someException:: If Dump does not conform to the tasMessage schema error is raised
1255
1336
  def get_ui_dump( refresh_args = {} )
1256
-
1337
+
1257
1338
  #$stderr.puts "warning: SUT#get_ui_dump is deprecated, please use SUT#refresh_ui_dump instead."
1258
1339
 
1259
1340
  refresh_ui_dump refresh_args, {}