testability-driver-qt-sut-plugin 0.9.2

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