testability-driver 1.1.1 → 1.2.1

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 (71) hide show
  1. data/config/sut_parameters.rb +21 -8
  2. data/config/tdriver_custom_error_recovery.rb +83 -0
  3. data/ext/extconf.rb +3 -2
  4. data/ext/native_extensions.c +60 -2
  5. data/lib/tdriver-devtools/behaviour/old/xml/example/flick-example.rb +2 -105
  6. data/lib/tdriver/base/behaviour/factory.rb +154 -89
  7. data/lib/tdriver/base/behaviour/factory_new.rb +409 -0
  8. data/lib/tdriver/base/errors.rb +3 -3
  9. data/lib/tdriver/base/state_object.rb +85 -22
  10. data/lib/tdriver/base/sut/adapter.rb +26 -0
  11. data/lib/tdriver/base/sut/controller.rb +1 -1
  12. data/lib/tdriver/base/sut/generic/behaviours/application.rb +89 -118
  13. data/lib/tdriver/base/sut/generic/behaviours/find.rb +67 -62
  14. data/lib/tdriver/base/sut/generic/behaviours/sut.rb +296 -187
  15. data/lib/tdriver/base/sut/generic/behaviours/switchbox_behaviour.rb +7 -7
  16. data/lib/tdriver/base/sut/generic/commands/application.rb +366 -295
  17. data/lib/tdriver/base/sut/sut.rb +19 -3
  18. data/lib/tdriver/base/test_object/abstract.rb +41 -21
  19. data/lib/tdriver/base/test_object/adapter.rb +62 -9
  20. data/lib/tdriver/base/test_object/behaviours/syncronization.rb +10 -6
  21. data/lib/tdriver/base/test_object/behaviours/test_object.rb +84 -47
  22. data/lib/tdriver/base/test_object/factory.rb +124 -68
  23. data/lib/tdriver/base/test_object/loader.rb +3 -4
  24. data/lib/tdriver/base/test_object/verification.rb +3 -3
  25. data/lib/tdriver/base/test_object/xml/adapter.rb +734 -0
  26. data/lib/tdriver/loader.rb +12 -0
  27. data/lib/tdriver/report/error_recovery/tdriver_error_recovery.rb +3 -2
  28. data/lib/tdriver/report/error_recovery/tdriver_error_recovery_settings.rb +14 -14
  29. data/lib/tdriver/report/report.rb +4 -8
  30. data/lib/tdriver/report/report_api.rb +9 -0
  31. data/lib/tdriver/report/report_crash_file_capture.rb +4 -4
  32. data/lib/tdriver/report/report_creator.rb +57 -35
  33. data/lib/tdriver/report/report_cucumber.rb +1 -1
  34. data/lib/tdriver/report/report_cucumber_listener.rb +5 -158
  35. data/lib/tdriver/report/report_cucumber_reporter.rb +7 -161
  36. data/lib/tdriver/report/report_execution_statistics.rb +4 -4
  37. data/lib/tdriver/report/report_file_capture.rb +5 -5
  38. data/lib/tdriver/report/report_grouping.rb +24 -22
  39. data/lib/tdriver/report/report_junit_xml.rb +5 -5
  40. data/lib/tdriver/report/report_test_case_run.rb +31 -22
  41. data/lib/tdriver/report/report_test_run.rb +107 -104
  42. data/lib/tdriver/report/report_writer.rb +150 -83
  43. data/lib/tdriver/tdriver.rb +147 -103
  44. data/lib/tdriver/util/common/boolean.rb +51 -0
  45. data/lib/tdriver/util/common/crc16.rb +110 -68
  46. data/lib/tdriver/util/common/hash.rb +63 -7
  47. data/lib/tdriver/util/common/kernel.rb +46 -1
  48. data/lib/tdriver/util/common/loader.rb +1 -0
  49. data/lib/tdriver/util/common/object.rb +20 -8
  50. data/lib/tdriver/util/common/string.rb +21 -2
  51. data/lib/tdriver/util/logger/logger.rb +4 -4
  52. data/lib/tdriver/util/parameter/loader.rb +2 -19
  53. data/lib/tdriver/util/parameter/parameter.rb +874 -177
  54. data/lib/tdriver/util/plugin/service.rb +1 -1
  55. data/lib/tdriver/util/recorder/recorder.rb +7 -1
  56. data/lib/tdriver/util/xml/abstraction.rb +13 -1
  57. data/lib/tdriver/util/xml/parsers/nokogiri/abstraction.rb +63 -10
  58. data/lib/tdriver/util/xml/parsers/nokogiri/attribute.rb +8 -2
  59. data/lib/tdriver/util/xml/parsers/nokogiri/document.rb +16 -3
  60. data/lib/tdriver/util/xml/parsers/nokogiri/node.rb +36 -32
  61. data/lib/tdriver/util/xml/parsers/nokogiri/nodeset.rb +19 -22
  62. data/lib/tdriver/util/xml/xml.rb +147 -32
  63. data/lib/tdriver/verify/verify.rb +1112 -289
  64. data/lib/tdriver/version.rb +1 -1
  65. data/xml/templates/generic.xml +14 -2
  66. metadata +51 -24
  67. data/lib/tdriver/util/parameter/parameter_hash.rb +0 -104
  68. data/lib/tdriver/util/parameter/parameter_new.rb +0 -869
  69. data/lib/tdriver/util/parameter/parameter_template.rb +0 -120
  70. data/lib/tdriver/util/parameter/parameter_user_api.rb +0 -116
  71. data/lib/tdriver/util/parameter/parameter_xml.rb +0 -261
@@ -22,14 +22,14 @@ class Hash
22
22
 
23
23
  def not_empty( message = "Hash must not be empty", exception = ArgumentError )
24
24
 
25
- raise exception, message if empty?
25
+ raise exception, message, caller if empty?
26
26
 
27
27
  self
28
28
 
29
29
  end
30
30
 
31
- # Verify that received object contains one of given keys. Raises exception is key not found.
32
- def require_key( keys, message = "None of key(s) $1 found from hash" )
31
+ # verify that receiver object contains one of given keys. Raises exception is key not found.
32
+ def require_one( keys, message = "None of key(s) $1 found from hash" )
33
33
 
34
34
  # create array of types
35
35
  keys_array = Array( keys )
@@ -55,7 +55,7 @@ class Hash
55
55
  [ verbose_keys_list.join ].each_with_index{ | param, index | message.gsub!( "$#{ index + 1 }", param.to_s ) }
56
56
 
57
57
  # raise the exception
58
- raise ArgumentError, message
58
+ raise ArgumentError, message, caller
59
59
 
60
60
  end
61
61
 
@@ -63,7 +63,18 @@ class Hash
63
63
 
64
64
  end
65
65
 
66
- # Verify that received object contains all of given keys. Raises exception is key not found.
66
+ # verify that receiver object contains all of given keys. Raises exception is key not found.
67
+ def require_key( key, message = 'required key $1 not found from hash' )
68
+
69
+ fetch( key ){
70
+
71
+ raise ArgumentError, message.gsub!( "$1", key.inspect ), caller
72
+
73
+ }
74
+
75
+ end
76
+
77
+ # verify that receiver object contains all of given keys. Raises exception is key not found.
67
78
  def require_keys( keys, message = "Required key(s) $1 not found from hash" )
68
79
 
69
80
  # create array of types
@@ -87,7 +98,7 @@ class Hash
87
98
  [ verbose_keys_list.join ].each_with_index{ | param, index | message.gsub!( "$#{ index + 1 }", param.to_s ) }
88
99
 
89
100
  # raise the exception
90
- raise ArgumentError, message
101
+ raise ArgumentError, message, caller
91
102
 
92
103
  end
93
104
 
@@ -187,6 +198,17 @@ class Hash
187
198
 
188
199
  end # strip_dynamic_attributes!
189
200
 
201
+ # TODO: document me
202
+ def to_attributes
203
+
204
+ self.collect{ | key, value |
205
+
206
+ "#{ key.to_s }=\"#{ value.to_s.encode_to_xml }\""
207
+
208
+ }.join(" ")
209
+
210
+ end
211
+
190
212
  # TODO: document me
191
213
  def recursive_merge( other )
192
214
 
@@ -226,4 +248,38 @@ class Hash
226
248
 
227
249
  end # recursive_merge!
228
250
 
229
- end
251
+ # TODO: document me
252
+ def if_found( key )
253
+
254
+ if has_key?( key )
255
+
256
+ yield( key, self[ key ] )
257
+
258
+ end
259
+
260
+ end # if_found
261
+
262
+ # TODO: document me
263
+ def rename_key!( key, new )
264
+
265
+ if has_key?( key )
266
+
267
+ self[ new ] = delete( key )
268
+
269
+ else
270
+
271
+ if block_given?
272
+
273
+ yield( key, new )
274
+
275
+ else
276
+
277
+ raise IndexError, "key #{ key.inspect } not found", caller
278
+
279
+ end
280
+
281
+ end # has_key?
282
+
283
+ end # rename_key!
284
+
285
+ end # Hash
@@ -17,9 +17,54 @@
17
17
  ##
18
18
  ############################################################################
19
19
 
20
+ module Kernel
21
+
22
+ # TODO: document me
23
+ def require_relative( file )
24
+
25
+ # require with full expanded path
26
+ require File.expand_path( File.join( File.dirname( caller.first.scan( /(.*?):/ ).to_s ), file ) )
27
+
28
+ end
29
+
30
+ # TODO: document me
31
+ def warn_caller( message, remove_eval = true )
32
+
33
+ # verify that message argument type is correct
34
+ raise TypeError, "wrong argument type #{ message.class } for message (expected String)" unless message.kind_of?( String )
35
+
36
+ # verify that remove_eval argument type is correct
37
+ raise TypeError, "wrong argument type #{ remove_eval.class } for remove evaluate calls value (expected TrueClass or FalseClass)" unless [ TrueClass, FalseClass ].include?( remove_eval.class )
38
+
39
+ # retrieve caller method, file and line number
40
+ begin
41
+
42
+ # remove evals if required
43
+ caller_stack = ( remove_eval == true ? caller.select{ | str | str !~ /^\(eval\)\:/ and str !~ /`eval'$/ } : caller )
44
+
45
+ # retrieve filename, line number and method name
46
+ /^(.+?):(\d+)(?::in `(.*)')?/.match( caller_stack.reverse[ -2 ].to_s )
47
+
48
+ # store matches
49
+ file, line, method = $1, $2, $3
50
+
51
+ rescue
52
+
53
+ # could not retrieve filename, line number and method name
54
+ file, line, method = [ '##', '##', 'unknown' ]
55
+
56
+ end
57
+
58
+ # print warning to STDOUT
59
+ warn message.gsub( '$1', file.to_s ).gsub( '$2', line.to_s ).gsub( '$3', method.to_s )
60
+
61
+ end
62
+
63
+ end
64
+
20
65
  module MobyUtil
21
66
 
22
- # Helper class to store verifyblock for
67
+ # Helper class to store verify block for
23
68
  # constant verifications for sut state
24
69
  class VerifyBlock
25
70
 
@@ -26,6 +26,7 @@ require 'rbconfig' # ??
26
26
  'numeric.rb',
27
27
  'hash.rb',
28
28
  'string.rb',
29
+ 'boolean.rb',
29
30
 
30
31
  'exceptions.rb',
31
32
  'error.rb', # TODO: move custom exceptions to exceptions.rb
@@ -27,9 +27,21 @@ class Object
27
27
 
28
28
  end
29
29
 
30
+ def true?
31
+
32
+ false
33
+
34
+ end
35
+
36
+ def false?
37
+
38
+ false
39
+
40
+ end
41
+
30
42
  def not_blank( message = "Object must not be blank", exception = ArgumentError )
31
43
 
32
- raise exception, message if blank?
44
+ raise exception, message, caller if blank?
33
45
 
34
46
  self
35
47
 
@@ -46,7 +58,7 @@ class Object
46
58
  def check_type( types, message = "wrong argument type $1 (expected $2)" )
47
59
 
48
60
  # raise exception if message is not type of String
49
- raise TypeError, "wrong argument type #{ message.class } for message (expected String)" unless message.kind_of?( String )
61
+ raise TypeError, "wrong argument type #{ message.class } for message (expected String)", caller unless message.kind_of?( String )
50
62
 
51
63
  # create array of types
52
64
  type_array = Array( types )
@@ -57,7 +69,7 @@ class Object
57
69
  # collect verbose type list
58
70
  verbose_type_list = type_array.each_with_index.collect{ | type, index |
59
71
 
60
- raise TypeError, "invalid argument type #{ type } for check_type. Did you mean #{ type.class }?" unless type.kind_of?( Class )
72
+ raise TypeError, "invalid argument type #{ type } for check_type. Did you mean #{ type.class }?", caller unless type.kind_of?( Class )
61
73
 
62
74
  if self.kind_of?( type )
63
75
 
@@ -79,7 +91,7 @@ class Object
79
91
  [ self.class, verbose_type_list.join, self.inspect ].each_with_index{ | param, index | message.gsub!( "$#{ index + 1 }", param.to_s ) }
80
92
 
81
93
  # raise the exception
82
- raise TypeError, message
94
+ raise TypeError, message, caller
83
95
 
84
96
  end
85
97
 
@@ -90,7 +102,7 @@ class Object
90
102
 
91
103
  def not_nil( message = "Value must not be nil", exception = ArgumentError )
92
104
 
93
- raise exception, message unless self
105
+ raise exception, message, caller unless self
94
106
 
95
107
  self
96
108
 
@@ -99,7 +111,7 @@ class Object
99
111
  def validate( values, message = "Unexpected value $3 for $1 (expected $2)" )
100
112
 
101
113
  # raise exception if message is not type of String
102
- raise TypeError, "wrong argument type #{ message.class } for message (expected String)" unless message.kind_of?( String )
114
+ raise TypeError, "wrong argument type #{ message.class } for message (expected String)", caller unless message.kind_of?( String )
103
115
 
104
116
  # create array of values
105
117
  values_array = Array( values )
@@ -110,7 +122,7 @@ class Object
110
122
  # collect verbose type list
111
123
  verbose_values_list = values_array.each_with_index.collect{ | value, index |
112
124
 
113
- raise TypeError.new( "Invalid argument type #{ value.class } for value (expected #{ self.class })" ) unless value.kind_of?( self.class )
125
+ raise TypeError, "Invalid argument type #{ value.class } for value (expected #{ self.class })", caller unless value.kind_of?( self.class )
114
126
 
115
127
  if self == value
116
128
 
@@ -132,7 +144,7 @@ class Object
132
144
  [ self.class, verbose_values_list.join, self.inspect ].each_with_index{ | param, index | message.gsub!( "$#{ index + 1 }", param.to_s ) }
133
145
 
134
146
  # raise the exception
135
- raise ArgumentError, message
147
+ raise ArgumentError, message, caller
136
148
 
137
149
  end
138
150
 
@@ -20,14 +20,33 @@
20
20
  # extend Ruby String class functionality
21
21
  class String
22
22
 
23
+ def true?
24
+
25
+ /^true$/i.match( self.to_s ) != nil
26
+
27
+ end
28
+
29
+ def false?
30
+
31
+ /^false$/i.match( self.to_s ) != nil
32
+
33
+ end
34
+
23
35
  def not_empty( message = "String must not be empty", exception = ArgumentError )
24
36
 
25
- raise exception, message if empty?
37
+ raise exception, message, caller if empty?
26
38
 
27
39
  self
28
40
 
29
41
  end
30
42
 
43
+ # TODO: document me
44
+ def encode_to_xml
45
+
46
+ gsub('&', '&amp;').gsub('<', '&lt;').gsub('>', '&gt;').gsub( '"', '&quot;' ).gsub( '\'', '&apos;' )
47
+
48
+ end
49
+
31
50
  # Function determines if string is "true" or "false"
32
51
  # == params
33
52
  # string:: String
@@ -78,7 +97,7 @@ class String
78
97
  else
79
98
 
80
99
  # raise exception if no default given
81
- Kernel::raise TypeError, "Unable to convert string \"#{ self }\" to boolean (Expected \"true\" or \"false\")"
100
+ raise TypeError, "Unable to convert string \"#{ self }\" to boolean (Expected \"true\" or \"false\")", caller
82
101
 
83
102
  end
84
103
 
@@ -349,7 +349,7 @@ module MobyUtil
349
349
  set_debug_exceptions # if enabled
350
350
 
351
351
  # returns logging level as string
352
- logging_level = Parameter[ :logging_level, nil ]
352
+ logging_level = $parameters[ :logging_level, nil ]
353
353
 
354
354
  # do not enable logging if no logging level is not defined
355
355
  return nil if logging_level.nil?
@@ -384,7 +384,7 @@ module MobyUtil
384
384
  # create error dump folder if not exist, used e.g. when xml parse error
385
385
  MobyUtil::FileHelper.mkdir_path( MobyUtil::FileHelper.expand_path( $last_parameter ) )
386
386
 
387
- rescue #Exception
387
+ rescue
388
388
 
389
389
  warn("warning: Unable to create log folder #{ $parameters[ :logging_xml_parse_error_dump_path ] } for corrupted XML UI state files")
390
390
 
@@ -403,12 +403,12 @@ module MobyUtil
403
403
 
404
404
  end
405
405
 
406
- rescue ArgumentError => exception
406
+ rescue ArgumentError
407
407
 
408
408
  # disable xml logging
409
409
  $parameters[ :logging_xml_parse_error_dump ] = 'false'
410
410
 
411
- rescue #Exception => exception
411
+ rescue
412
412
 
413
413
  # disable xml logging
414
414
  warn( "warning: Disabling logging due to failure (#{ $!.class }: #{ $!.message })" )
@@ -20,23 +20,6 @@
20
20
  # Parameter related errors
21
21
  require File.expand_path( File.join( File.dirname( __FILE__ ), 'error.rb' ) )
22
22
 
23
- require File.expand_path( File.join( File.dirname( __FILE__ ), 'parameter_user_api.rb' ) )
24
-
25
- require File.expand_path( File.join( File.dirname( __FILE__ ), 'parameter_new.rb' ) )
26
-
27
- =begin
28
- # Parameter hash class
29
- require File.expand_path( File.join( File.dirname( __FILE__ ), 'parameter_hash.rb' ) )
30
-
31
- # Parameter API etc
32
- require File.expand_path( File.join( File.dirname( __FILE__ ), 'parameter_template.rb' ) )
33
-
34
- # Parameter API etc
35
- require File.expand_path( File.join( File.dirname( __FILE__ ), 'parameter_xml.rb' ) )
36
-
37
- # Parameter end user API etc
38
- require File.expand_path( File.join( File.dirname( __FILE__ ), 'parameter_user_api.rb' ) )
39
-
40
- # Parameter API etc
23
+ # parameters related classes
41
24
  require File.expand_path( File.join( File.dirname( __FILE__ ), 'parameter.rb' ) )
42
- =end
25
+
@@ -17,348 +17,1045 @@
17
17
  ##
18
18
  ############################################################################
19
19
 
20
- module MobyUtil
20
+ module TDriver
21
21
 
22
- class Parameter
22
+ class ParameterUserAPI
23
23
 
24
- include Singleton
24
+ class << self
25
25
 
26
- @@initialized = false
26
+ def new
27
+
28
+ warn_caller "$1:$2 warning: #{ self.to_s } is static class; unable initialize new instance of it"
29
+
30
+ nil
31
+
32
+ end
27
33
 
28
- private
34
+ # TODO: document me
35
+ def []=( key, value )
29
36
 
30
- def initialize
37
+ $parameters[ key ] = value
31
38
 
32
- # this can be done only once due to following method removes --tdriver_parameters argument from ARGV
33
- parse_command_line_arguments
39
+ end
34
40
 
35
- # initialize and load templates, default parameters and user defined parameter file
36
- reset( true, true, true, true )
41
+ # TODO: document me
42
+ def []( *args )
37
43
 
38
- # parameter singleton is now initialized
39
- @@initialized = true
44
+ $parameters[ *args ]
40
45
 
41
- end
46
+ end
42
47
 
43
- def parse_command_line_arguments
48
+ # TODO: document me
49
+ def fetch( *args, &block )
44
50
 
45
- # reset user_defined_file_defined_in_command_line_arguments flag
46
- @@user_defined_parameters_file_defined_in_command_line_arguments = false
51
+ $parameters.fetch( *args, &block )
47
52
 
48
- filename = Array.new
53
+ end
49
54
 
50
- delete_values = Array.new
55
+ # TODO: document me
56
+ def files
51
57
 
52
- # use command line argument if one exists.
53
- ARGV.each_index do | index |
58
+ $parameters.files
54
59
 
55
- if ARGV[ index ].to_s == '--matti_parameters'
56
- puts "--matti_parameters is deprecated, use -tdriver_parameters instead"
57
- Kernel::raise ArgumentError.new( "TDriver parameters command line argument given without a filename" ) if ARGV.count == index + 1
58
- delete_values << ARGV[ index ].to_s
59
- end
60
+ end
60
61
 
61
- if ARGV[ index ].to_s == '--tdriver_parameters'
62
- Kernel::raise ArgumentError.new( "TDriver parameters command line argument given without a filename" ) if ARGV.count == index + 1
63
- delete_values << ARGV[ index ].to_s
64
- end
62
+ # TODO: document me
63
+ def clear
65
64
 
66
- if ARGV[ index ].to_s.downcase.include?('.xml')
67
- # no absolute path required
68
- filename << File.expand_path( ARGV[ index ].to_s )
69
- #filename << MobyUtil::FileHelper.expand_path( ARGV[ index ].to_s )
70
- @@user_defined_parameters_file_defined_in_command_line_arguments = true
71
- delete_values << ARGV[ index ].to_s
72
- end
65
+ $parameters.clear
66
+
67
+ end
68
+
69
+ # TODO: document me
70
+ def load_xml( filename )
71
+
72
+ $parameters.parse_file( filename )
73
+
74
+ end
75
+
76
+ # TODO: document me
77
+ def reset( *keys )
78
+
79
+ $parameters.reset
73
80
 
74
81
  end
75
82
 
76
- #clean up ARGV
77
- delete_values.each do | value |
78
- indx = ARGV.index( value )
79
- ARGV.delete_at( indx )
83
+ # TODO: document me
84
+ def inspect
85
+
86
+ $parameters.inspect
87
+
80
88
  end
81
89
 
82
- if filename
90
+ # TODO: document me
91
+ def to_s
92
+
93
+ $parameters.to_s
94
+
95
+ end
96
+
97
+ # TODO: document me
98
+ def keys
99
+
100
+ $parameters.keys
101
+
102
+ end
103
+
104
+ # TODO: document me
105
+ def values
106
+
107
+ $parameters.values
108
+
109
+ end
110
+
111
+ # TODO: document me
112
+ def configured_suts
113
+
114
+ $parameters.configured_suts
115
+
116
+ end
117
+
118
+ end # self
119
+
120
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
121
+
122
+ end # ParameterUserAPI
123
+
124
+ class ParameterHash < Hash
125
+
126
+ # TODO: document me
127
+ def []( key, *default, &block )
128
+
129
+ $last_parameter = fetch( key ){
130
+
131
+ if default.empty?
132
+
133
+ raise MobyUtil::ParameterNotFoundError, "Parameter #{ key } not found" unless block_given?
83
134
 
84
- filename.each do | parameter_file |
135
+ # yield with key if block given
136
+ yield key
137
+
138
+ else
139
+
140
+ raise ArgumentError, "Only one default value allowed for parameter (#{ default.join(', ') })" unless default.size == 1
141
+
142
+ #result = default.first
143
+
144
+ #result.kind_of?( Hash ) ? convert_hash( result ) : result
145
+
146
+ convert_hash( default.first )
85
147
 
86
- raise MobyUtil::FileNotFoundError, "User defined TDriver parameters file #{ parameter_file } does not exist" unless File.exist?( parameter_file )
87
148
 
88
149
  end
150
+
151
+ }
152
+
153
+ end
154
+
155
+ # TODO: document me
156
+ def []=( key, value )
157
+
158
+ raise MobyUtil::ParameterNotFoundError, 'Parameter key nil is not valid' unless key
159
+
160
+ super key, convert_hash( value ) # value.kind_of?( Hash ) ? convert_hash( value ) : value
161
+
162
+ end
163
+
164
+ # for backwards compatibility
165
+ def kind_of?( klass )
166
+
167
+ if klass == MobyUtil::ParameterHash
168
+
169
+ warn_caller '$1:$2 warning: deprecated class MobyUtil::ParameterHash, use TDriver::ParameterHash instead'
170
+
171
+ true
172
+
173
+ else
89
174
 
175
+ super klass
176
+
90
177
  end
178
+
179
+ end
180
+
181
+ private
91
182
 
92
- @@filename_from_command_list_arguments = filename
183
+ # TODO: document me
184
+ def convert_hash( value )
185
+
186
+ value.kind_of?( Hash ) ? ParameterHash[ value.collect{ | key, value | [ key, value.kind_of?( Hash ) ? convert_hash( value ) : value ] } ] : value
93
187
 
94
- filename
188
+ #value.class == Hash ? ParameterHash[ value.collect{ | key, value | [ key, value.class == Hash ? convert_hash( value ) : value ] } ] : value
95
189
 
96
190
  end
191
+
192
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
193
+
194
+ end # ParameterHash
97
195
 
98
- protected
196
+ class Parameter
197
+
198
+ # singleton and private methods
199
+ class << self
99
200
 
100
- def reset_flags
201
+ def new
202
+
203
+ warn_caller "$1:$2 warning: #{ self.to_s } is static class; unable initialize new instance of it"
204
+
205
+ nil
206
+
207
+ end
208
+
209
+ # TODO: document me
210
+ def init
101
211
 
102
- # reset loaded_parameter_files list
103
- @@loaded_parameter_files = []
212
+ # initialize only once
213
+ return if defined?( @initalized )
104
214
 
105
- # reset templates_loaded flag
106
- @@templates_loaded = false
215
+ # retrieve platform name
216
+ @platform = MobyUtil::EnvironmentHelper.platform
107
217
 
108
- # reset default_parameters_loaded flag
109
- @@default_parameters_loaded = false
218
+ # detect is posix platform
219
+ @is_posix = MobyUtil::EnvironmentHelper.posix?
110
220
 
111
- end
221
+ # retrieve parameter filenames from command line arguments
222
+ parse_command_line_arguments
223
+
224
+ # reset templates and parameters
225
+ reset_hashes
226
+
227
+ # indicates that class is already initialized - templates and parameters will not reset
228
+ @initialized = true
229
+
230
+ end
231
+
232
+ private
233
+
234
+ def parse_command_line_arguments
235
+
236
+ # reset command line argument files list
237
+ @command_line_argument_files = []
238
+
239
+ capture_elements = false
240
+
241
+ ARGV.each_with_index do | value, index |
242
+
243
+ value = value.to_s
244
+
245
+ case value
246
+
247
+ when '--tdriver_parameters', '--matti_parameters'
248
+
249
+ warn "warning: #{ value } is deprecated, use -tdriver_parameters instead" if value == '--matti_parameters'
250
+
251
+ # capture following xml filenames
252
+ capture_elements = true
253
+
254
+ # mark element to be removed
255
+ ARGV[ index ] = nil
256
+
257
+ else
258
+
259
+ # process the string if capturing arguments
260
+ if capture_elements
261
+
262
+ # stop capturing if is a option (e.g. --version)
263
+ if [ '-' ].include?( value[ 0 ].chr )
264
+
265
+ capture_elements = false
266
+
267
+ # add argument to parameters list if meets the regexp and capture_element is true
268
+ elsif /\.xml$/i.match( value )
269
+
270
+ # expand filename
271
+ value = File.expand_path( value )
272
+
273
+ # raise exception if given file does not found
274
+ raise MobyUtil::FileNotFoundError, "User defined TDriver parameters file #{ value } does not exist" unless File.exist?( value )
275
+
276
+ # add file to command line arguments files
277
+ @command_line_argument_files << value
278
+
279
+ # mark element to be removed
280
+ ARGV[ index ] = nil
281
+
282
+ end # if
283
+
284
+ end # else
285
+
286
+ end # case
287
+
288
+ end # each_with_index
112
289
 
113
- def reset( load_template_files = true, load_parameter_defaults = true, load_default_parameters = true, load_command_line_parameters = true )
290
+ # raise exception if "--tdriver_parameters" option found but no filenames defined
291
+ if capture_elements && @command_line_argument_files.empty?
292
+
293
+ raise ArgumentError, 'TDriver parameters command line argument given without a filename'
294
+
295
+ end
296
+
297
+ # remove nil elements from array
298
+ ARGV.compact!
299
+
300
+ # return collected filenames
301
+ @command_line_argument_files
302
+
303
+ end
114
304
 
115
- reset_flags
305
+ # TODO: document me
306
+ def initialize_class
307
+
308
+ # initialize only once
309
+ return if defined?( @parameters )
310
+
311
+ # class variables not used; read below article:
312
+ # http://www.oreillynet.com/ruby/blog/2007/01/nubygems_dont_use_class_variab_1.html
313
+
314
+ # parameters container
315
+ @parameters = ParameterHash.new
116
316
 
117
- # load parameter templates
118
- load_templates if load_template_files
317
+ # templates container
318
+ @templates = ParameterHash.new
119
319
 
120
- # load global parameters (root level, e.g. MobyUtil::Parameter[ :logging_outputter_enabled ])
121
- @@parameters = MobyUtil::ParameterTemplates.instance.get_template_from_xml( 'global' )
320
+ # platform enum
321
+ @platform = nil
322
+
323
+ # determine if platform is type of posix
324
+ @is_posix = nil
325
+
326
+ # list of loaded SUT's
327
+ @sut_list = []
328
+
329
+ # list of loaded parameter filenames
330
+ @parameter_files = []
331
+
332
+ # list of loaded template filenames
333
+ @template_files = []
334
+
335
+ # files defined in command line arguments
336
+ @command_line_argument_files = []
337
+
338
+ # templates cache
339
+ @cache = {}
122
340
 
123
- # load and merge with default parameters
124
- @@parameters.merge_with_hash!( load_default_parameter_files ) if load_parameter_defaults
341
+ end
125
342
 
126
- # use filename from command line argument if one exists otherwise use default.
127
- filename = load_command_line_parameters ? @@filename_from_command_list_arguments : nil
343
+ # TODO: document me
344
+ def load_default_parameters
345
+
346
+ # collect all templates
347
+ Dir.glob( MobyUtil::FileHelper.expand_path( 'defaults/*.xml' ) ).each { | filename |
128
348
 
129
- # load default tdriver/tdriver_parameters.xml file
130
- load_parameters_xml( "tdriver_parameters.xml" ) if load_default_parameters
349
+ file_content = load_file( filename )
350
+
351
+ MobyUtil::XML.parse_string( file_content ).xpath( '*' ).each{ | element |
352
+
353
+ # merge new hash to parameters hash
354
+ @parameters.recursive_merge!(
355
+
356
+ # parse element and convert it to hash
357
+ process_element( element )
358
+
359
+ )
360
+
361
+ }
362
+
363
+ # add file to loaded parameter files list
364
+ @parameter_files << filename
131
365
 
132
- # load parameters files unless file does not exist
133
- if filename
366
+ }
134
367
 
135
- filename.each do | parameter_file |
368
+ end
369
+
370
+ # TODO: document me
371
+ def load_file( filename )
136
372
 
137
- load_parameters_xml( parameter_file ) #if File.exist?( parameter_file )
373
+ filename = MobyUtil::FileHelper.expand_path( filename )
374
+
375
+ begin
376
+
377
+ MobyUtil::FileHelper.get_file( filename )
378
+
379
+ rescue MobyUtil::EmptyFilenameError
380
+
381
+ raise $!, 'Unable to load parameters XML file due to filename is empty or nil'
382
+
383
+ rescue MobyUtil::FileNotFoundError
384
+
385
+ raise
386
+
387
+ rescue IOError
388
+
389
+ raise $!, "Error occured while loading xml file. Reason: #{ $!.message }"
390
+
391
+ rescue
392
+
393
+ raise MobyUtil::ParameterFileParseError, "Error occured while parsing parameters xml file #{ filename }\nDescription: #{ $!.message }"
138
394
 
139
395
  end
396
+
397
+ end
398
+
399
+ # TODO: document me
400
+ def process_element( xml )
401
+
402
+ # calculate xml hash
403
+ xml_hash = xml.to_s.hash
140
404
 
405
+ return @cache[ xml_hash ] if @cache.has_key?( xml_hash )
406
+
407
+ # default results
408
+ results = ParameterHash.new
409
+
410
+ # go through each element in xml
411
+ xml.xpath( "*" ).each{ | element |
412
+
413
+ # retrieve element attributes as hash
414
+ attributes = element.attributes
415
+
416
+ # default value
417
+ value = attributes[ 'value' ]
418
+
419
+ # generic posix value - overwrites attribute["value"] if found
420
+ value = attributes[ 'posix' ] unless attributes[ 'posix' ].nil? if @is_posix
421
+
422
+ # platform specific value - overwrites existing value
423
+ value = attributes[ @platform.to_s ] unless attributes[ @platform.to_s ].nil?
424
+
425
+ # retrieve name attribute
426
+ name = attributes[ 'name' ]
427
+
428
+ case element.name
429
+
430
+ when 'keymap'
431
+
432
+ # use element name as parameter name ("keymap")
433
+ name = element.name
434
+
435
+ # read xml file from given location if defined - otherwise pass content as is
436
+ if attributes[ 'xml_file' ]
437
+
438
+ # merge hash values (value type of hash)
439
+ value = process_file( attributes[ 'xml_file' ] )
440
+
441
+ else
442
+
443
+ # use element content as value
444
+ value = process_element( element )
445
+
446
+ end
447
+
448
+ # retrieve environment attribute from xml
449
+ env = attributes[ 'env' ].to_s
450
+
451
+ # set environment to 'default' unless defined in xml element
452
+ env = 'default' if env.empty?
453
+
454
+ # store keymap as hash
455
+ value = { env.to_sym => value, :all => value, :default_keymap => env.to_sym }
456
+
457
+ when 'fixture'
458
+
459
+ name.not_blank( "No name defined for fixture \"#{ element.to_s }\"", SyntaxError )
460
+
461
+ value = {
462
+
463
+ :plugin => attributes[ 'plugin' ].not_blank( "No name defined for fixture with value #{ name }", SyntaxError ),
464
+
465
+ :env => attributes[ 'env' ]
466
+
467
+ }
468
+
469
+ when 'parameter'
470
+
471
+ # verify that name attribute is defined
472
+ name.not_blank( "No name defined for parameter with value #{ value }", SyntaxError )
473
+
474
+ # return value as is
475
+ #value.not_nil( "No value defined for parameter with name #{ name }", SyntaxError )
476
+
477
+ value = '' if value.nil?
478
+
479
+ when 'method'
480
+
481
+ # verify that name attribute is defined
482
+ name.not_blank( "No name defined for parameter with value #{ value }", SyntaxError )
483
+
484
+ # return value as is
485
+ #value.not_nil( "No value defined for parameter with name #{ name }", SyntaxError )
486
+
487
+ value = attributes[ 'args' ]
488
+
489
+ when 'sut'
490
+
491
+ # use id as parameter name
492
+ name = attributes[ 'id' ]
493
+
494
+ # verify that name attribute is defined
495
+ name.not_blank( "No name defined for SUT \"#{ element.to_s }\"", SyntaxError )
496
+
497
+ # add SUT to found sut list
498
+ @sut_list << name unless @sut_list.include?( name )
499
+
500
+ # retrieve names of used templates
501
+ templates = attributes[ 'template' ]
502
+
503
+ # empty value by default
504
+ value = ParameterHash.new
505
+
506
+ unless templates.blank?
507
+
508
+ # retrieve each defined template
509
+ templates.split( ';' ).each{ | template |
510
+
511
+ # merge template with current value hash
512
+ value.recursive_merge!(
513
+
514
+ # retrieve template
515
+ get_template( template )
516
+
517
+ )
518
+
519
+ }
520
+
521
+ end
522
+
523
+ # merge sut content with template values
524
+ value.recursive_merge!( process_element( element ) )
525
+
526
+ else
527
+
528
+ # use element name as parameter name (e.g. fixture, keymap etc)
529
+ name = element.name
530
+
531
+ # read xml file from given location if defined - otherwise pass content as is
532
+ if attributes[ 'xml_file' ]
533
+
534
+ # merge hash values (value type of hash)
535
+ value = process_file( attributes[ 'xml_file' ] )
536
+
537
+ else
538
+
539
+ # use element content as value
540
+ value = process_element( element )
541
+
542
+ end
543
+
544
+ end
545
+
546
+ # store values to parameters
547
+ results[ name.to_sym ] = value
548
+
549
+ }
550
+
551
+ # store to cache and return hash as result
552
+ @cache[ xml_hash ] = results
553
+
554
+ end
555
+
556
+ # TODO: document me
557
+ def parse_template( name )
558
+
559
+ template = @templates[ name ]
560
+
561
+ unless template.kind_of?( Hash )
562
+
563
+ result = ParameterHash.new
564
+
565
+ # retrieve each inherited template
566
+ template[ 'inherits' ].to_s.split(";").each{ | inherited_template |
567
+
568
+ result.recursive_merge!(
569
+
570
+ parse_template( inherited_template )
571
+
572
+ )
573
+
574
+ }
575
+
576
+ # merge template content with inherited templates and store to templates hash table
577
+ @templates[ name ] = result.recursive_merge!(
578
+
579
+ process_element( template )
580
+
581
+ )
582
+
583
+ else
584
+
585
+ # template is already parsed, pass template hash as is
586
+ template
587
+
588
+ end
589
+
141
590
  end
142
591
 
592
+ # TODO: document me
593
+ def load_templates
143
594
 
144
- end
595
+ # collect all templates
596
+ Dir.glob( MobyUtil::FileHelper.expand_path( 'templates/*.xml' ) ).each { | filename |
145
597
 
146
- def load_templates
598
+ unless @template_files.include?( filename )
147
599
 
148
- @@templates_loaded = true
600
+ # read file content
601
+ file_content = load_file( filename )
149
602
 
150
- MobyUtil::ParameterTemplates.instance.load_templates()
603
+ MobyUtil::XML.parse_string( file_content ).root.xpath( 'template' ).each{ | template |
151
604
 
152
- end
605
+ # store template element to hash
606
+ @templates[ template[ 'name' ] ] = template
607
+
608
+ }
153
609
 
154
- def load_default_parameter_files
610
+ # add file to loaded templates files list
611
+ @template_files << filename
155
612
 
156
- @@default_parameters_loaded = true
613
+ end
157
614
 
158
- # load default parameter values
159
- MobyUtil::ParameterXml.parse(
615
+ }
616
+
617
+ # parse templates hash; convert elements to hash
618
+ @templates.each_pair{ | name, template |
619
+
620
+ # convert element to hash
621
+ parse_template( name )
622
+
623
+ }
624
+
625
+ end
160
626
 
161
- MobyUtil::ParameterXml.merge_files( 'defaults/', 'parameters', '/parameters/*' ){ | filename |
627
+ # TODO: document me
628
+ def get_template( name )
629
+
630
+ @templates.fetch( name ){
162
631
 
163
- @@loaded_parameter_files << filename unless @@loaded_parameter_files.include?( filename )
632
+ # return empty hash if template not found
633
+ ParameterHash.new
164
634
 
165
635
  }
636
+
637
+ end
166
638
 
167
- )
639
+ # TODO: document me
640
+ def reset_hashes( options = {} )
641
+
642
+ # default options
643
+ options.default_values(
644
+
645
+ :reset_templates => true,
646
+ :reset_parameters => true,
647
+
648
+ :load_default_parameters => true,
649
+ :load_user_parameters => true,
650
+ :load_command_line_parameters => true
651
+
652
+ )
653
+
654
+ # empty parameters hash
655
+ if options[ :reset_parameters ] == true
168
656
 
169
- end
657
+ @parameter_files.clear
170
658
 
171
- public
659
+ @parameters.clear
172
660
 
173
- # reset parameters class
174
- def reset_parameters
661
+ end
175
662
 
176
- MobyUtil::ParameterXml.reset
663
+ if options[ :reset_templates ] == true
664
+
665
+ @template_files.clear
666
+
667
+ # empty templates hash
668
+ @templates.clear
177
669
 
178
- reset( true, true, true, true )
670
+ # load parameter templates
671
+ load_templates
179
672
 
180
- end
673
+ end
181
674
 
182
- # load additional parameter xml files
183
- def load_parameters_xml( filename, reset = false )
675
+ # apply global parameters to root level (e.g. MobyUtil::Parameter[ :logging_outputter_enabled ])
676
+ @parameters.recursive_merge!( get_template( 'global' ) )
184
677
 
185
- reset_parameters if reset == true
678
+ # load and apply default parameter values
679
+ load_default_parameters if options[ :load_default_parameters ] == true
186
680
 
187
- filename = MobyUtil::FileHelper.expand_path( filename )
681
+ # load main parameter configuraion file
682
+ load_parameters_file( 'tdriver_parameters.xml' ) if options[ :load_user_parameters ] == true
188
683
 
189
- Kernel::raise MobyUtil::FileNotFoundError.new( "Parameters file %s does not exist" % [ filename ] ) if !File.exist?( filename )
684
+ if options[ :load_command_line_parameters ] == true
190
685
 
191
- @@parameters.merge_with_hash!(
686
+ @command_line_argument_files.each{ | filename |
687
+
688
+ load_parameters_file( filename )
689
+
690
+ }
192
691
 
193
- MobyUtil::ParameterXml.parse_file( filename )
692
+ end
194
693
 
195
- )
694
+ end
196
695
 
197
- @@loaded_parameter_files << filename
696
+ # TODO: document me
697
+ def process_file( filename )
198
698
 
199
- end
200
-
201
- # empty parameters hash
202
- def clear
699
+ begin
700
+
701
+ # load content from file
702
+ file_content = load_file( filename )
703
+
704
+ # parse file content and retrieve root element
705
+ root_element = MobyUtil::XML.parse_string( file_content ).root
706
+
707
+ # parse root element
708
+ process_element( root_element )
203
709
 
204
- MobyUtil::ParameterXml.reset
710
+ rescue MobyUtil::FileNotFoundError
205
711
 
206
- reset_flags
712
+ raise $!, "Parameters file #{ MobyUtil::FileHelper.expand_path( filename ) } does not exist"
207
713
 
208
- @@parameters.clear
714
+ rescue
209
715
 
210
- end
716
+ raise MobyUtil::ParameterFileParseError, "Error occured while parsing parameters XML file #{ filename }. Reason: #{ $!.message } (#{ $!.class })"
717
+
718
+ end
719
+
720
+ end
721
+
722
+ def process_string( source )
723
+
724
+ begin
725
+
726
+ # parse file content and retrieve root element
727
+ root_element = MobyUtil::XML.parse_string( source ).root
728
+
729
+ # parse root element
730
+ process_element( root_element )
731
+
732
+ rescue
733
+
734
+ raise MobyUtil::ParameterXmlParseError, "Error occured while parsing parameters XML string. Reason: #{ $!.message } (#{ $!.class })"
735
+
736
+ end
737
+
738
+ end
739
+
740
+ def load_parameters_file( filename )
211
741
 
212
- public # singleton methods
742
+ filename = MobyUtil::FileHelper.expand_path( filename )
743
+
744
+ unless @parameter_files.include?( filename )
213
745
 
746
+ begin
747
+
748
+ @parameters.recursive_merge!(
749
+
750
+ process_file( filename )
751
+
752
+ )
753
+
754
+ rescue MobyUtil::FileNotFoundError
755
+
756
+ raise $!, "Parameters file #{ filename } does not exist"
757
+
758
+ end
759
+
760
+ # add file to loaded parameter files list
761
+ @parameter_files << filename
762
+
763
+ end # unless
764
+
765
+ end # def
766
+
767
+ end # self
768
+
214
769
  # TODO: document me
215
- def self.parse_file( *args )
770
+ def self.parse_file( filename, reset_parameters = false )
771
+
772
+ # check argument type for filename
773
+ filename.check_type [ String ], 'wrong argument type $1 for filename argument (expected $2)'
774
+
775
+ # check argument type for filename
776
+ reset_parameters.check_type [ TrueClass, FalseClass ], 'wrong argument type $1 for reset_parameters boolean argument (expected $2)'
777
+
778
+ # reset parameter hash if requested
779
+ @parameters.clear if reset_parameters == true
216
780
 
217
- self.instance.load_parameters_xml( *args )
781
+ # load and parse given file
782
+ load_parameters_file( filename )
218
783
 
219
784
  end
220
-
785
+
221
786
  # TODO: document me
222
787
  def self.parse_string( source, merge_hashes = true )
223
-
224
- self.instance unless @@initialized
225
788
 
226
- if merge_hashes
789
+ # check argument type for source
790
+ source.check_type [ String ], 'wrong argument type $1 for source XML argument (expected $2)'
227
791
 
228
- @@parameters.merge_with_hash!(
792
+ # check argument type for merge_hashes
793
+ merge_hashes.check_type [ TrueClass, FalseClass ], 'wrong argument type $1 for merge_hashes argument (expected $2)'
229
794
 
230
- MobyUtil::ParameterXml.parse( source )
795
+ # process xml string, returns hash as result
796
+ hash = process_string( source )
231
797
 
232
- )
798
+ if merge_hashes
799
+
800
+ @parameters.recursive_merge!( hash )
233
801
 
234
802
  else
235
803
 
236
- @@parameters.merge!(
237
-
238
- MobyUtil::ParameterXml.parse( source )
239
-
240
- )
804
+ @parameters.merge!( hash )
241
805
 
242
806
  end
243
807
 
244
808
  end
245
-
809
+
246
810
  # TODO: document me
247
811
  def self.clear
248
812
 
249
- self.instance.clear
813
+ @parameter_files.clear
250
814
 
251
- end
815
+ @parameters.clear
252
816
 
817
+ end
818
+
253
819
  # TODO: document me
254
- def self.reset
820
+ def self.files
255
821
 
256
- self.instance.reset_parameters
822
+ # return loaded parameter files list
823
+ @parameter_files
257
824
 
258
825
  end
259
826
 
260
- # Function for returning the value of a parameter. If the parameters is not yet populated it populates
261
- # it with default file (tdriver_home/tdriver_parameters.xml)
262
- # == params
263
- # key:: Symbol containing the name of the parameter to be returned
264
- # == returns
265
- # String:: value of the parameter, or nil if not found
266
- def self.[]( key, *default )
267
-
268
- self.instance unless @@initialized
269
-
270
- @@parameters[ key, *default ]
827
+ # TODO: document me
828
+ def self.template_files
829
+
830
+ # return loaded parameter files list
831
+ @template_files
832
+
833
+ end
271
834
 
835
+ # TODO: document me
836
+ def self.has_key?( key )
837
+
838
+ @parameters.has_key?( key )
839
+
272
840
  end
273
841
 
274
- def self.fetch( key, *default, &block )
842
+ # TODO: document me
843
+ def self.has_value?( key )
844
+
845
+ @parameters.has_value?( key )
846
+
847
+ end
275
848
 
276
- self.instance unless @@initialized
849
+ # TODO: document me
850
+ def self.keys
851
+
852
+ @parameters.keys
853
+
854
+ end
277
855
 
278
- @@parameters.method(:[]).call( key, *default, &block )
856
+ # TODO: document me
857
+ def self.values
858
+
859
+ @parameters.values
860
+
861
+ end
279
862
 
863
+ # TODO: document me
864
+ def self.[]( key, *default )
865
+
866
+ @parameters[ key, *default ]
867
+
280
868
  end
281
869
 
282
- def self.delete( key )
870
+ # TODO: document me
871
+ def self.[]=( key, value )
283
872
 
284
- @@parameters.delete( key )
873
+ @parameters[ key ] = value
285
874
 
286
875
  end
287
876
 
288
- # Function for setting the value of a parameter. If the parameters is not yet populated it populates
289
- # it with default file (tdriver_home/tdriver_parameters.xml)
290
- # == params
291
- # key:: Symbol containing the name of the parameter to be modified
292
- # == returns
293
- # String:: new value of the parameter, or nil if not found
294
- def self.[]=( key, value )
877
+ # TODO: document me
878
+ def self.fetch( key, *default, &block )
295
879
 
296
- self.instance unless @@initialized
880
+ @parameters.__send__( :[], key, *default, &block )
297
881
 
298
- Kernel::raise ParameterNotFoundError.new( "Unable to set parameter value due to nil is not valid key; Parameter key must be type of String or Symbol" ) unless key
882
+ end
883
+
884
+ # TODO: document me
885
+ def self.if_found( key, &block )
299
886
 
300
- @@parameters[ key ] = value
887
+ @parameters.__send__( :if_found, key, &block )
301
888
 
302
889
  end
303
890
 
891
+ # TODO: document me
892
+ def self.delete( key )
893
+
894
+ @parameters.delete( key )
895
+
896
+ end
897
+
898
+ # TODO: document me
304
899
  def self.inspect
900
+
901
+ @parameters.inspect
902
+
903
+ end
305
904
 
306
- self.instance unless @@initialized
905
+ # TODO: document me
906
+ def self.templates
907
+
908
+ @templates
909
+
910
+ end
307
911
 
308
- @@parameters.inspect
912
+ def self.parameters
309
913
 
914
+ warn "warning: deprecated method #{ self.name }##{ __method__ }; please use #{ self.name }#hash instead"
915
+
916
+ hash
917
+
310
918
  end
311
919
 
312
- def self.to_s
920
+ def self.hash
921
+
922
+ @parameters
923
+
924
+ end
313
925
 
314
- self.instance unless @@initialized
926
+ # TODO: document me
927
+ def self.reset
315
928
 
316
- @@parameters.to_s
929
+ reset_hashes
930
+
931
+ end
317
932
 
933
+ # TODO: document me
934
+ def self.configured_suts
935
+
936
+ @sut_list
937
+
938
+ end
939
+
940
+ # deprecated methods
941
+ def self.reset_parameters
942
+
943
+ warn "warning: deprecated method #{ self.name }##{ __method__ }; please use #{ self.name }#reset instead"
944
+
945
+ reset
946
+
318
947
  end
319
948
 
320
- def self.parameters
949
+ # load parameter xml files
950
+ def self.load_parameters_xml( filename, reset = false )
321
951
 
322
- self.instance unless @@initialized
952
+ warn "warning: deprecated method #{ self.name }##{ __method__ }; please use #{ self.name }#parse_file instead"
323
953
 
324
- @@parameters
954
+ parse_file( filename, reset )
325
955
 
326
956
  end
957
+
958
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
327
959
 
328
- def self.keys
960
+ # initialize parameters class
961
+ initialize_class
329
962
 
330
- @@initialized ? @@parameters.keys : []
963
+ end # Parameter
331
964
 
332
- end
965
+ end
333
966
 
334
- def self.values
967
+ module MobyUtil
335
968
 
336
- @@initialized ? @@parameters.values : []
969
+ class ParameterHash
337
970
 
338
- end
971
+ class << self
972
+
973
+ def new
974
+
975
+ warn_caller "$1:$2 warning: #{ self.to_s } is deprecated; use TDriver::ParameterHash instead"
976
+
977
+ TDriver::ParameterHash.new
978
+
979
+ end
339
980
 
340
- def self.configured_suts
981
+ end # self
982
+
983
+ end # ParameterHash
341
984
 
342
- self.instance unless @@initialized
985
+ class Parameter
986
+
987
+ class << self
988
+
989
+ undef :inspect
990
+
991
+ def new
992
+
993
+ warn_caller "$1:$2 warning: #{ self.to_s } is static class; unable initialize new instance of it"
994
+
995
+ nil
996
+
997
+ end
998
+
999
+ def method_missing( id, *args )
1000
+
1001
+ warn_caller "$1:$2 warning: deprecated method; use TDriver::Parameter##{ id.to_s } instead of MobyUtil::Parameter##{ id.to_s }"
1002
+
1003
+ TDriver::Parameter.__send__( id, *args )
1004
+
1005
+ end
343
1006
 
344
- MobyUtil::ParameterXml.sut_list
1007
+ # TODO: document me
1008
+ def instance
1009
+
1010
+ warn_caller "$1:$2 warning: deprecated method #{ self.name }##{ __method__ }; please use #{ self.name } class static methods instead"
1011
+
1012
+ TDriver::Parameter
1013
+
1014
+ end
1015
+
1016
+ end # self
1017
+
1018
+ end # Parameter
1019
+
1020
+ class ParameterUserAPI
1021
+
1022
+ class << self
345
1023
 
346
- end
1024
+ undef :inspect
347
1025
 
348
- def self.files
1026
+ def new
1027
+
1028
+ warn_caller "$1:$2 warning: #{ self.to_s } is static class; unable initialize new instance of it"
1029
+
1030
+ nil
1031
+
1032
+ end
1033
+
1034
+ def method_missing( id, *args )
1035
+
1036
+ warn_caller "$1:$2 warning: deprecated method; use TDriver::ParameterUserAPI##{ id.to_s } instead of MobyUtil::ParameterUserAPI##{ id.to_s }"
1037
+
1038
+ TDriver::ParameterUserAPI.__send__( id, *args )
1039
+
1040
+ end
349
1041
 
350
- @@loaded_parameter_files
1042
+ # TODO: document me
1043
+ def instance
351
1044
 
352
- end
1045
+ warn_caller "$1:$2 warning: deprecated method #{ self.name }##{ __method__ }; please use #{ self.name } class static methods instead"
353
1046
 
354
- TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
1047
+ TDriver::ParameterUserAPI
355
1048
 
356
- end # Parameter
1049
+ end
1050
+
1051
+ end # self
1052
+
1053
+ end # ParameterUserAPI
357
1054
 
358
1055
  end # MobyUtil
359
1056
 
360
1057
  # set global variable pointing to parameter class
361
- $parameters = MobyUtil::Parameter
1058
+ $parameters = TDriver::Parameter #MobyUtil::Parameter
362
1059
 
363
1060
  # set global variable pointing to parameter API class
364
- $parameters_api = MobyUtil::ParameterUserAPI
1061
+ $parameters_api = TDriver::ParameterUserAPI