testability-driver-qt-sut-plugin 0.9.2

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 (61) hide show
  1. data/env.rb +26 -0
  2. data/installer/extconf.rb +62 -0
  3. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin.rb +23 -0
  4. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/action.rb +156 -0
  5. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/application.rb +318 -0
  6. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/attribute.rb +227 -0
  7. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/behaviour.rb +140 -0
  8. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/configure_behaviour.rb +317 -0
  9. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/events.rb +165 -0
  10. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/file_transfer.rb +333 -0
  11. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/find.rb +80 -0
  12. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/fixture.rb +178 -0
  13. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/gesture.rb +906 -0
  14. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/infologger.rb +604 -0
  15. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/key_press.rb +152 -0
  16. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/locale_db.rb +151 -0
  17. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/method.rb +85 -0
  18. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/multitouch.rb +455 -0
  19. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/os.rb +100 -0
  20. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/qt_api_method.rb +148 -0
  21. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/record.rb +124 -0
  22. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/screen_capture.rb +283 -0
  23. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/sut.rb +492 -0
  24. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/synchronization.rb +113 -0
  25. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/treewidgetitemcolumn.rb +93 -0
  26. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/type_text.rb +97 -0
  27. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/view_item.rb +97 -0
  28. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/webkit.rb +230 -0
  29. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/widget.rb +663 -0
  30. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/action.rb +30 -0
  31. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/configure_command.rb +38 -0
  32. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/drag.rb +44 -0
  33. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/find_object.rb +50 -0
  34. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/fixture.rb +45 -0
  35. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/group.rb +48 -0
  36. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/infologger_command.rb +38 -0
  37. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/qt.rb +170 -0
  38. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/tap.rb +54 -0
  39. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/widget.rb +226 -0
  40. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/application.rb +264 -0
  41. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/configure_command.rb +60 -0
  42. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/find_object.rb +114 -0
  43. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/fixture.rb +67 -0
  44. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/group.rb +52 -0
  45. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/infologger_command.rb +62 -0
  46. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/key_sequence.rb +99 -0
  47. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/screen_capture.rb +54 -0
  48. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/tap.rb +51 -0
  49. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/widget.rb +72 -0
  50. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/plugin.rb +119 -0
  51. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/adapter.rb +225 -0
  52. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/communication.rb +154 -0
  53. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/controller.rb +58 -0
  54. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/util/fixture_parameter.rb +77 -0
  55. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/util/widget.rb +82 -0
  56. data/lib/testability-driver-qt-sut-plugin.rb +24 -0
  57. data/xml/behaviour/qt.xml +717 -0
  58. data/xml/defaults/sut_qt.xml +9 -0
  59. data/xml/keymap/qt.xml +321 -0
  60. data/xml/template/qt.xml +124 -0
  61. metadata +141 -0
@@ -0,0 +1,165 @@
1
+ ############################################################################
2
+ ##
3
+ ## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4
+ ## All rights reserved.
5
+ ## Contact: Nokia Corporation (testabilitydriver@nokia.com)
6
+ ##
7
+ ## This file is part of TDriver.
8
+ ##
9
+ ## If you have questions regarding the use of this file, please contact
10
+ ## Nokia at testabilitydriver@nokia.com .
11
+ ##
12
+ ## This library is free software; you can redistribute it and/or
13
+ ## modify it under the terms of the GNU Lesser General Public
14
+ ## License version 2.1 as published by the Free Software Foundation
15
+ ## and appearing in the file LICENSE.LGPL included in the packaging
16
+ ## of this file.
17
+ ##
18
+ ############################################################################
19
+
20
+ module MobyBehaviour
21
+
22
+ module QT
23
+
24
+ # == description
25
+ # Events specific behaviours
26
+ #
27
+ # == behaviour
28
+ # QtEvents
29
+ #
30
+ # == requires
31
+ # testability-driver-qt-sut-plugin
32
+ #
33
+ # == input_type
34
+ # *
35
+ #
36
+ # == sut_type
37
+ # qt
38
+ #
39
+ # == sut_version
40
+ # *
41
+ #
42
+ # == objects
43
+ # *;application
44
+ #
45
+ module Events
46
+
47
+ include MobyBehaviour::QT::Behaviour
48
+
49
+ # == description
50
+ # Enable event listening. You can specify which events you want to listen for by including the names of
51
+ # those events separated by comma or integers if using user events. Use ALL if you want to listen for all
52
+ # events but be aware that there will be a lot of events.
53
+ # \n
54
+ # The events listened need to be sent the object to which the enabling is done for e.g. sut.button.enable_events('ALL')
55
+ # would listen to all events sent to the button. When disabling or getting the events the operation must be done to the same object.
56
+ #
57
+ # == arguments
58
+ # filter_array
59
+ # Array
60
+ # description: Array of the event named to listen
61
+ # example: ["Timer","MouseButtonPress","45677","67889"]
62
+ #
63
+ # == returns
64
+ # NilClass
65
+ # description: -
66
+ # example: -
67
+ #
68
+ # == exceptions
69
+ # Exception
70
+ # description: In case of an error
71
+ #
72
+ def enable_events(filter_array = nil)
73
+
74
+ begin
75
+ command = plugin_command #in qt_behaviour
76
+ command.command_name( 'EnableEvents' )
77
+ params_str = ''
78
+ filter_array.each {|value| params_str << value << ','} if filter_array
79
+ command.command_params( 'EventsToListen' => params_str)
80
+ command.service( 'collectEvents' )
81
+ @sut.execute_command( command)
82
+
83
+ rescue Exception => e
84
+
85
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed enable_events with refresh \"#{filter_array.to_s}\".;#{ identity };enable_events;"
86
+ Kernel::raise e
87
+
88
+ end
89
+
90
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation enable_events executed successfully with refresh \"#{ filter_array.to_s }\".;#{ identity };enable_events;"
91
+ nil
92
+ end
93
+
94
+ # == description
95
+ # Disables event listening on the target
96
+ #
97
+ # == returns
98
+ # NilClass
99
+ # description: -
100
+ # example: -
101
+ #
102
+ # == exceptions
103
+ # Exception
104
+ # description: In case of an error
105
+ #
106
+ def disable_events()
107
+
108
+ begin
109
+ command = plugin_command #in qt_behaviour
110
+ command.command_name( 'DisableEvents' )
111
+ command.service( 'collectEvents' )
112
+ @sut.execute_command( command)
113
+ rescue Exception => e
114
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed disable_events.;#{ identity };disable_events;"
115
+ Kernel::raise e
116
+ end
117
+
118
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation disable_events executed successfully.;#{ identity };disable_events;"
119
+ nil
120
+ end
121
+
122
+ # == description
123
+ # Gets event list occured since the enabling of events
124
+ # \n
125
+ # The format of the xml string is the same as with the ui state.
126
+ #
127
+ # == returns
128
+ # String
129
+ # description: Xml listing containing the details of the events logger since enable_events
130
+ # example: -
131
+ #
132
+ # == exceptions
133
+ # Exception
134
+ # description: In case of an error
135
+ #
136
+ def get_events()
137
+ ret = nil
138
+
139
+ begin
140
+
141
+ command = plugin_command(true) #in qt_behaviour
142
+ command.command_name( 'GetEvents' )
143
+ command.service( 'collectEvents' )
144
+ ret = @sut.execute_command( command)
145
+ # TODO: how to parse the output?
146
+
147
+ rescue Exception => e
148
+
149
+ MobyUtil::Logger.instance.log "behaviour" , "FAIL;Failed get_events.;#{ identity };get_events;"
150
+ Kernel::raise e
151
+
152
+ end
153
+
154
+ MobyUtil::Logger.instance.log "behaviour" , "PASS;Operation get_events executed successfully.;#{ identity };get_events;"
155
+ return ret
156
+ end
157
+
158
+ # enable hooking for performance measurement & debug logging
159
+ MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
160
+
161
+ end # EventsBehaviour
162
+
163
+ end
164
+
165
+ end # MobyBase
@@ -0,0 +1,333 @@
1
+ ############################################################################
2
+ ##
3
+ ## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4
+ ## All rights reserved.
5
+ ## Contact: Nokia Corporation (testabilitydriver@nokia.com)
6
+ ##
7
+ ## This file is part of TDriver.
8
+ ##
9
+ ## If you have questions regarding the use of this file, please contact
10
+ ## Nokia at testabilitydriver@nokia.com .
11
+ ##
12
+ ## This library is free software; you can redistribute it and/or
13
+ ## modify it under the terms of the GNU Lesser General Public
14
+ ## License version 2.1 as published by the Free Software Foundation
15
+ ## and appearing in the file LICENSE.LGPL included in the packaging
16
+ ## of this file.
17
+ ##
18
+ ############################################################################
19
+
20
+ module MobyBehaviour
21
+
22
+ module QT
23
+
24
+ # == description
25
+ # This module contains implementation to control sut file transfers
26
+ #
27
+ # == behaviour
28
+ # FileTransfer
29
+ #
30
+ # == requires
31
+ # testability-driver-qt-sut-plugin
32
+ #
33
+ # == input_type
34
+ # *
35
+ #
36
+ # == sut_type
37
+ # qt
38
+ #
39
+ # == sut_version
40
+ # *
41
+ #
42
+ # == objects
43
+ # sut
44
+ #
45
+ module FileTransfer
46
+
47
+ include MobyBehaviour::QT::Behaviour
48
+
49
+ # == description
50
+ # Delete files from sut \n
51
+ #
52
+ #
53
+ # == arguments
54
+ # arguments
55
+ # Hash
56
+ # description: Hash containing parameters to be used in file transfer
57
+ # example: Following symbols are supported
58
+ # [:file]
59
+ # [:from]
60
+ # [:dir]
61
+ #
62
+ # == returns
63
+ # Array
64
+ # description: Deleted files
65
+ # example: ["/dir/file.txt","/dir/file2.txt"]
66
+ #
67
+ # == exceptions
68
+ # ArgumentErrors
69
+ # description: For missing / wrong argument types
70
+ #
71
+ # == info
72
+ #
73
+ def delete_from_sut(arguments)
74
+ MobyBase::Error.raise( :WrongArgumentType, arguments.class, "hash" ) unless arguments.kind_of?( Hash )
75
+
76
+ if arguments.include?( :file )
77
+
78
+ file=arguments[ :file ].gsub('\\','/')
79
+ device_path=arguments[ :from ].gsub('\\','/') if arguments.include?(:from)
80
+
81
+ if device_path!=nil
82
+
83
+ ret_list_of_files = []
84
+ list_of_files = list_files_from_sut(:from=>device_path,:file=>file)
85
+ list_of_files.each do |name|
86
+ if fixture("file", "delete_file", {:file_name => name}) == "OK"
87
+ ret_list_of_files << name
88
+ end
89
+ end
90
+ return ret_list_of_files
91
+
92
+ else
93
+
94
+ if fixture("file", "delete_file", {:file_name => file}) == "OK"
95
+ return File.basename(file)
96
+ end
97
+ return
98
+
99
+ end
100
+
101
+ elsif arguments.include?(:dir)
102
+
103
+ if fixture("file", "rm_dir", {:file_name => arguments[:dir]}) == "OK"
104
+ return arguments[:dir]
105
+ end
106
+ return
107
+
108
+ else
109
+
110
+ Kernel::raise ArgumentError.new( "Argument :file not found") unless arguments.include?( :file )
111
+ Kernel::raise ArgumentError.new( "Argument :dir not found") unless arguments.include?( :dir )
112
+
113
+ end
114
+
115
+ end
116
+
117
+ # == description
118
+ # Copy files from sut \n
119
+ #
120
+ # == arguments
121
+ # arguments
122
+ # Hash
123
+ # description: Hash containing parameters to be used in file transfer
124
+ # example: Following symbols are supported
125
+ # [:file]
126
+ # [:from]
127
+ # [:to]
128
+ #
129
+ # == returns
130
+ # Array
131
+ # description: Copied files
132
+ # example: ["/dir/file.txt","/dir/file2.txt"]
133
+ #
134
+ # == exceptions
135
+ # ArgumentErrors
136
+ # description: For missing / wrong argument types
137
+ #
138
+ # == info
139
+ #
140
+ def copy_from_sut(arguments)
141
+ MobyBase::Error.raise( :WrongArgumentType, arguments.class, "hash" ) unless arguments.kind_of?( Hash )
142
+
143
+ device_path=arguments[ :from ].gsub('\\','/') if arguments.include?( :from )
144
+
145
+ if arguments[ :file ]!=nil
146
+ file=arguments[ :file ].gsub('\\','/')
147
+ else file='*.*'
148
+ file='*.*'
149
+ end
150
+
151
+ if arguments[:to]!=nil
152
+ tmp_path=arguments[:to].gsub('\\','/')
153
+ if File::directory?(tmp_path)==false
154
+ FileUtils.mkdir_p tmp_path
155
+ end
156
+ else
157
+ tmp_path=Dir.getwd
158
+ end
159
+
160
+ if device_path!=nil
161
+ list_of_files = list_files_from_sut(:from=>device_path,:file=>file)
162
+
163
+
164
+ list_of_files.each do |name|
165
+ end_index=(name.index File.basename(name))-1
166
+ start_index=(name.index device_path)+device_path.length
167
+ file_folder=name[start_index..end_index]
168
+ write_file("#{tmp_path}#{file_folder}",name)
169
+ end
170
+ return list_of_files
171
+ else
172
+ Kernel::raise ArgumentError.new( "Argument :file not found") unless arguments.include?( :file )
173
+ new_file=write_file(tmp_path,file)
174
+ return new_file
175
+ end
176
+ end
177
+
178
+ # == description
179
+ # Copy files to sut \n
180
+ #
181
+ # == arguments
182
+ # arguments
183
+ # Hash
184
+ # description: Hash containing parameters to be used in file transfer
185
+ # example: Following symbols are supported
186
+ # [:file]
187
+ # [:from]
188
+ # [:to]
189
+ #
190
+ #
191
+ # == returns
192
+ # Array
193
+ # description: Copied files
194
+ # example: ["/dir/file.txt","/dir/file2.txt"]
195
+ #
196
+ # == exceptions
197
+ # ArgumentErrors
198
+ # description: For missing / wrong argument types
199
+ #
200
+ # == info
201
+ #
202
+ def copy_to_sut(arguments)
203
+ MobyBase::Error.raise( :WrongArgumentType, arguments.class, "hash" ) unless arguments.kind_of?( Hash )
204
+ Kernel::raise ArgumentError.new( "Argument :to not found") unless arguments.include?( :to )
205
+
206
+ begin
207
+ local_dir = Dir.new( arguments[ :from ] ) if arguments.include?( :from )
208
+ rescue Errno::ENOENT => ee
209
+ Kernel::raise RuntimeError.new( "The source folder does not exist. Details:\n" + ee.inspect )
210
+ end
211
+
212
+ if arguments[ :file ]!=nil
213
+ file=arguments[ :file ].gsub('\\','/')
214
+ else file='*.*'
215
+ file='*.*'
216
+ end
217
+ transfered_files=Array.new
218
+
219
+ #ensure that the base dir exist
220
+ fixture("file","mk_dir",{:file_name=>"#{arguments[ :to ]}"})
221
+
222
+ if arguments.include?( :file )==false
223
+ Kernel::raise ArgumentError.new( "Argument :from not found") unless arguments.include?( :from )
224
+ local_dir.entries.each do | local_file_or_subdir |
225
+ if !File.directory?( File.join( arguments[ :from ], local_file_or_subdir ) )
226
+ fixture("file","write_file",
227
+ {:file_name=>arguments[ :to ]+'/'+File.basename(local_file_or_subdir),
228
+ :file_data=>Base64.encode64(read_file(File.join( arguments[ :from ],
229
+ local_file_or_subdir )))})
230
+ transfered_files << "#{arguments[ :to ]}/#{File.basename(local_file_or_subdir)}"
231
+ elsif local_file_or_subdir != "." && local_file_or_subdir != ".."
232
+ fixture("file","mk_dir",{:file_name=>"#{arguments[ :to ]}/#{local_file_or_subdir}"})
233
+ transfered_files << copy_to_sut(:from=>"#{arguments[ :from ]}/#{local_file_or_subdir}",
234
+ :to=>"#{arguments[ :to ]}/#{File.basename(local_file_or_subdir)}")
235
+ end
236
+ end
237
+ elsif arguments.include?( :file ) && arguments.include?( :from )
238
+ local_dir.entries.each do | local_file_or_subdir |
239
+ if !File.directory?( File.join( arguments[ :from ], local_file_or_subdir ) )
240
+ fixture("file","write_file",
241
+ {:file_name=>arguments[ :to ]+'/'+File.basename(local_file_or_subdir),
242
+ :file_data=>Base64.encode64(read_file(File.join( arguments[ :from ],
243
+ local_file_or_subdir )))}) if local_file_or_subdir.include?(file)
244
+ transfered_files << "#{arguments[ :to ]}/#{File.basename(local_file_or_subdir)}"
245
+ elsif local_file_or_subdir != "." && local_file_or_subdir != ".."
246
+ fixture("file","mk_dir",{:file_name=>"#{arguments[ :to ]}/#{local_file_or_subdir}"})
247
+ transfered_files << copy_to_sut(:file => arguments( :file ), :from=>"#{arguments[ :from ]}/#{local_file_or_subdir}",
248
+ :to=>"#{arguments[ :to ]}/#{local_file_or_subdir}")
249
+ end
250
+ end
251
+ else
252
+ Kernel::raise ArgumentError.new( "Argument :file not found") unless arguments.include?( :file )
253
+ fixture("file","mk_dir",{:file_name=>{:file_name=>arguments[ :to ]}})
254
+ fixture("file","write_file",
255
+ {:file_name=>arguments[ :to ]+'/'+File.basename(file),
256
+ :file_data=>Base64.encode64(read_file(file))})
257
+ transfered_files << "#{arguments[ :to ]}/#{File.basename(file)}"
258
+ end
259
+ return transfered_files
260
+ end
261
+
262
+ # == description
263
+ # List files from sut \n
264
+ #
265
+ # == arguments
266
+ # arguments
267
+ # Hash
268
+ # description: Hash containing parameters to be used in file transfer
269
+ # example: Following symbols are supported
270
+ # [:file]
271
+ # [:from]
272
+ #
273
+ # == returns
274
+ # Array
275
+ # description: file list array
276
+ # example: ["/dir/file.txt","/dir/file2.txt"]
277
+ #
278
+ # == exceptions
279
+ # ArgumentErrors
280
+ # description: For missing / wrong argument types
281
+ #
282
+ # == Info
283
+ #
284
+ def list_files_from_sut(arguments)
285
+ MobyBase::Error.raise( :WrongArgumentType, arguments.class, "hash" ) unless arguments.kind_of?( Hash )
286
+ Kernel::raise ArgumentError.new( "Argument :from not found") unless arguments.include?( :from )
287
+ device_path=arguments[ :from ].gsub('\\','/')
288
+
289
+ if arguments[ :file ]!=nil
290
+ file=arguments[ :file ].gsub('\\','/')
291
+ else file='*.*'
292
+ file='*.*'
293
+ end
294
+ list_of_files = fixture("file", "list_files",
295
+ {:file_name => file,
296
+ :file_path => device_path}).split(';')
297
+ return list_of_files
298
+
299
+ end
300
+
301
+ private
302
+
303
+ def write_file(target_folder,source_file)
304
+ if File::directory?(target_folder)==false
305
+ FileUtils.mkdir_p target_folder
306
+ end
307
+ new_file = File.open(target_folder + "/" + File.basename(source_file), 'w')
308
+ new_file << Base64.decode64( fixture("file", "read_file", {:file_name => source_file}) )
309
+ new_file.close
310
+ return target_folder + "/" + File.basename(source_file)
311
+ end
312
+
313
+ def read_file(source_file)
314
+ file_data=''
315
+ if File.file?(source_file)
316
+ open_file = File.open(source_file, 'r')
317
+ open_file.each_line do |line|
318
+ file_data += line
319
+ end
320
+ end
321
+ return file_data.to_s
322
+ end
323
+
324
+
325
+ # enable hooking for performance measurement & debug logging
326
+ MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
327
+
328
+
329
+ end
330
+
331
+ end
332
+
333
+ end