testability-driver 1.1.1 → 1.2.1

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