testability-driver 0.9.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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, {}