testability-driver 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (125) hide show
  1. data/bin/tdriver-devtools +0 -0
  2. data/ext/native_extensions.c +165 -6
  3. data/lib/tdriver-devtools/behaviour/old/xml/update +0 -0
  4. data/lib/tdriver-devtools/behaviour/xml/generate.rb +0 -0
  5. data/lib/tdriver-devtools/behaviour/xml/rdoc_behaviour_xml_generator.rb +15 -1
  6. data/lib/tdriver-devtools/doc/update +0 -0
  7. data/lib/tdriver-devtools/doc/xslt/template.xsl +24 -14
  8. data/lib/tdriver-devtools/doc/xslt/update +0 -0
  9. data/lib/tdriver-devtools/tdriver-devtools.rb +0 -0
  10. data/lib/tdriver-devtools/tests/feature_tests/update +0 -0
  11. data/lib/tdriver/base/behaviour/{behaviour.rb → abstract.rb} +3 -6
  12. data/lib/tdriver/base/behaviour/behaviours/object_abstract.rb +107 -0
  13. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_composition.rb +2 -2
  14. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_description.rb +47 -37
  15. data/lib/tdriver/base/behaviour/factory.rb +260 -382
  16. data/lib/tdriver/base/behaviour/loader.rb +22 -4
  17. data/lib/tdriver/base/controller/abstraction.rb +56 -0
  18. data/lib/tdriver/base/controller/loader.rb +21 -0
  19. data/lib/tdriver/base/loader.rb +3 -1
  20. data/lib/tdriver/base/sut/controller.rb +91 -74
  21. data/lib/tdriver/base/sut/factory.rb +8 -8
  22. data/lib/tdriver/base/sut/generic/behaviours/agent.rb +77 -0
  23. data/lib/tdriver/base/sut/generic/behaviours/sut.rb +116 -96
  24. data/lib/tdriver/base/sut/generic/commands/agent.rb +43 -0
  25. data/lib/tdriver/base/sut/sut.rb +10 -8
  26. data/lib/tdriver/base/test_object/abstract.rb +25 -24
  27. data/lib/tdriver/base/test_object/adapter.rb +67 -44
  28. data/lib/tdriver/base/test_object/behaviours/test_object.rb +79 -20
  29. data/lib/tdriver/base/test_object/factory.rb +45 -15
  30. data/lib/tdriver/base/test_object/xml/adapter.rb +80 -57
  31. data/lib/tdriver/env.rb +0 -0
  32. data/lib/tdriver/loader.rb +0 -0
  33. data/lib/tdriver/matti.rb +0 -0
  34. data/lib/tdriver/report/error_recovery/tdriver_error_recovery.rb +1 -0
  35. data/lib/tdriver/report/report.rb +2 -1
  36. data/lib/tdriver/report/report_crash_file_capture.rb +12 -0
  37. data/lib/tdriver/report/report_creator.rb +6 -2
  38. data/lib/tdriver/report/report_execution_statistics.rb +27 -11
  39. data/lib/tdriver/report/report_graph_generator.rb +59 -0
  40. data/lib/tdriver/report/report_test_case_run.rb +34 -2
  41. data/lib/tdriver/report/report_writer.rb +12 -0
  42. data/lib/tdriver/tdriver.rb +12 -1
  43. data/lib/tdriver/util/agent/loader.rb +22 -0
  44. data/lib/tdriver/util/agent/service.rb +107 -0
  45. data/lib/tdriver/util/common/crc16.rb +17 -10
  46. data/lib/tdriver/util/common/hash.rb +4 -1
  47. data/lib/tdriver/util/common/kernel.rb +11 -0
  48. data/lib/tdriver/util/common/numeric.rb +48 -0
  49. data/lib/tdriver/util/common/object.rb +5 -2
  50. data/lib/tdriver/util/common/string.rb +8 -1
  51. data/lib/tdriver/util/filters/attribute_filter.rb +121 -0
  52. data/lib/tdriver/util/filters/loader.rb +29 -0
  53. data/lib/tdriver/util/fixture/loader.rb +22 -0
  54. data/lib/tdriver/util/fixture/service.rb +157 -0
  55. data/lib/tdriver/util/loader.rb +8 -2
  56. data/lib/tdriver/util/logger/logger.rb +12 -6
  57. data/lib/tdriver/util/other/config.rb +0 -0
  58. data/lib/tdriver/util/parameter/parameter.rb +221 -152
  59. data/lib/tdriver/util/plugin/error.rb +0 -0
  60. data/lib/tdriver/util/video/camera_linux.rb +36 -22
  61. data/lib/tdriver/util/xml/parsers/nokogiri/abstraction.rb +3 -13
  62. data/lib/tdriver/util/xml/parsers/nokogiri/node.rb +13 -8
  63. data/lib/tdriver/util/xml/parsers/nokogiri/nodeset.rb +51 -9
  64. data/lib/tdriver/util/xml/xml.rb +4 -2
  65. data/lib/tdriver/verify/verify.rb +280 -621
  66. data/lib/tdriver/version.rb +1 -1
  67. data/xml/behaviours/generic.xml +34 -0
  68. data/xml/templates/generic.xml +20 -3
  69. metadata +168 -240
  70. data/lib/tdriver-devtools/tests/feature_tests/output/application_closable_0x3f.feature +0 -10
  71. data/lib/tdriver-devtools/tests/feature_tests/output/application_close.feature +0 -15
  72. data/lib/tdriver-devtools/tests/feature_tests/output/application_environment.feature +0 -10
  73. data/lib/tdriver-devtools/tests/feature_tests/output/application_executable_name.feature +0 -10
  74. data/lib/tdriver-devtools/tests/feature_tests/output/application_uid.feature +0 -10
  75. data/lib/tdriver-devtools/tests/feature_tests/output/created.rid +0 -1
  76. data/lib/tdriver-devtools/tests/feature_tests/output/find_find.feature +0 -15
  77. data/lib/tdriver-devtools/tests/feature_tests/output/flash_behaviour_flash.feature +0 -10
  78. data/lib/tdriver-devtools/tests/feature_tests/output/flash_behaviour_flash_images.feature +0 -15
  79. data/lib/tdriver-devtools/tests/feature_tests/output/sut_application.feature +0 -15
  80. data/lib/tdriver-devtools/tests/feature_tests/output/sut_capture_screen.feature +0 -10
  81. data/lib/tdriver-devtools/tests/feature_tests/output/sut_child.feature +0 -10
  82. data/lib/tdriver-devtools/tests/feature_tests/output/sut_clear_verify_blocks.feature +0 -10
  83. data/lib/tdriver-devtools/tests/feature_tests/output/sut_connect.feature +0 -10
  84. data/lib/tdriver-devtools/tests/feature_tests/output/sut_controller_execution_order.feature +0 -10
  85. data/lib/tdriver-devtools/tests/feature_tests/output/sut_controller_execution_order_0x3d.feature +0 -10
  86. data/lib/tdriver-devtools/tests/feature_tests/output/sut_current_application_id.feature +0 -15
  87. data/lib/tdriver-devtools/tests/feature_tests/output/sut_disconnect.feature +0 -10
  88. data/lib/tdriver-devtools/tests/feature_tests/output/sut_dump_count.feature +0 -15
  89. data/lib/tdriver-devtools/tests/feature_tests/output/sut_freeze.feature +0 -10
  90. data/lib/tdriver-devtools/tests/feature_tests/output/sut_frozen.feature +0 -10
  91. data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_application_id.feature +0 -10
  92. data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_object.feature +0 -10
  93. data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_operator_data.feature +0 -10
  94. data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_ui_dump.feature +0 -15
  95. data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_user_information.feature +0 -10
  96. data/lib/tdriver-devtools/tests/feature_tests/output/sut_input.feature +0 -15
  97. data/lib/tdriver-devtools/tests/feature_tests/output/sut_parameter.feature +0 -15
  98. data/lib/tdriver-devtools/tests/feature_tests/output/sut_press_key.feature +0 -10
  99. data/lib/tdriver-devtools/tests/feature_tests/output/sut_received_data.feature +0 -10
  100. data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh.feature +0 -20
  101. data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh_timeout.feature +0 -15
  102. data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh_tries.feature +0 -15
  103. data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh_ui_dump.feature +0 -20
  104. data/lib/tdriver-devtools/tests/feature_tests/output/sut_run.feature +0 -10
  105. data/lib/tdriver-devtools/tests/feature_tests/output/sut_sent_data.feature +0 -10
  106. data/lib/tdriver-devtools/tests/feature_tests/output/sut_state.feature +0 -10
  107. data/lib/tdriver-devtools/tests/feature_tests/output/sut_translate.feature +0 -30
  108. data/lib/tdriver-devtools/tests/feature_tests/output/sut_ui_type.feature +0 -10
  109. data/lib/tdriver-devtools/tests/feature_tests/output/sut_ui_version.feature +0 -10
  110. data/lib/tdriver-devtools/tests/feature_tests/output/sut_unfreeze.feature +0 -10
  111. data/lib/tdriver-devtools/tests/feature_tests/output/sut_update.feature +0 -10
  112. data/lib/tdriver-devtools/tests/feature_tests/output/sut_verify_always.feature +0 -20
  113. data/lib/tdriver-devtools/tests/feature_tests/output/sut_verify_blocks.feature +0 -10
  114. data/lib/tdriver-devtools/tests/feature_tests/output/sut_x_path.feature +0 -10
  115. data/lib/tdriver-devtools/tests/feature_tests/output/sut_xml_data.feature +0 -10
  116. data/lib/tdriver-devtools/tests/feature_tests/output/sut_xml_data_0x3d.feature +0 -10
  117. data/lib/tdriver-devtools/tests/feature_tests/output/sut_xml_data_crc.feature +0 -10
  118. data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_power_down.feature +0 -10
  119. data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_power_status.feature +0 -10
  120. data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_power_up.feature +0 -10
  121. data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_reset.feature +0 -10
  122. data/lib/tdriver-devtools/tests/feature_tests/output/verification_test_object_exists_0x3f.feature +0 -15
  123. data/lib/tdriver/base/behaviour/factory_new.rb +0 -409
  124. data/lib/tdriver/base/test_object/identificator.rb +0 -518
  125. data/lib/tdriver/util/filters/dynamic_attributes.rb +0 -189
Binary file
@@ -17,6 +17,8 @@
17
17
  ##
18
18
  ############################################################################
19
19
 
20
+ require 'open3'
21
+
20
22
  module MobyUtil
21
23
 
22
24
  # Linux streamer webcam implementation
@@ -25,7 +27,7 @@ module MobyUtil
25
27
 
26
28
  STARTUP_TIMEOUT = 60
27
29
 
28
- DEFAULT_OPTIONS = { :device => '/dev/video0', :width => 320, :height => 240, :fps => 5 }
30
+ DEFAULT_OPTIONS = { :device => '/dev/video0', :width => 320, :height => 240, :fps => 5, :max_time => '99:00:00' }
29
31
 
30
32
  # TODO: document me
31
33
  def self.new_cam( *args )
@@ -51,6 +53,7 @@ module MobyUtil
51
53
  @_video_file = video_file
52
54
  @_rec_options = DEFAULT_OPTIONS.merge user_options
53
55
 
56
+ @rec_app = 'streamer'
54
57
  end
55
58
 
56
59
  # Starts recording based on options given during initialization
@@ -67,15 +70,13 @@ module MobyUtil
67
70
  # no reaction to failed file ops, unless recording fails
68
71
  end
69
72
  end
70
-
71
- rec_command = 'streamer -q -c ' + @_rec_options[ :device ].to_s + ' -f rgb24 -r ' + @_rec_options[ :fps ].to_s + ' -t 99:00:00 -o ' + @_video_file.to_s + ' -s ' + @_rec_options[ :width ].to_s + 'x' + @_rec_options[ :height ].to_s
72
-
73
- @_streamer_pid = fork do
74
- begin
75
- Kernel::exec( rec_command )
76
- rescue Exception => e
77
- raise RuntimeError.new( "An error was encountered while launching streamer:\n" << e.inspect )
78
- end
73
+
74
+ rec_opts = ' -q -c ' + @_rec_options[ :device ].to_s + ' -f rgb24 -r ' + @_rec_options[ :fps ].to_s + ' -t ' +
75
+ @_rec_options[:max_time] + ' -o ' + @_video_file.to_s + ' -s ' + @_rec_options[ :width ].to_s + 'x' + @_rec_options[ :height ].to_s
76
+ begin
77
+ @stdin, @stdout, @stderr = Open3.popen3(@rec_app + rec_opts)
78
+ rescue => e
79
+ raise RuntimeError.new( "An error was encountered while launching streamer:\n" << e.inspect )
79
80
  end
80
81
 
81
82
  file_timed_out = false
@@ -94,11 +95,8 @@ module MobyUtil
94
95
  if file_timed_out
95
96
 
96
97
  # make sure recording is not initializing, clean up any failed file
97
- begin
98
- Process.kill( 9, @_streamer_pid.to_i )
99
- rescue
100
- end
101
-
98
+ stop_recording
99
+
102
100
  if File.exists?( @_video_file )
103
101
  begin
104
102
  File.delete( @_video_file )
@@ -113,8 +111,9 @@ module MobyUtil
113
111
  @_recording = true
114
112
 
115
113
  nil
116
-
117
114
  end
115
+
116
+
118
117
 
119
118
  # Stops ongoing recording
120
119
  def stop_recording
@@ -122,14 +121,29 @@ module MobyUtil
122
121
  if @_recording
123
122
 
124
123
  @_recording = false
125
-
126
- Process.kill( 9, @_streamer_pid.to_i )
127
-
124
+
125
+ begin
126
+ @stdin.close unless @stdin.closed?
127
+ @stdout.close unless @stdout.closed?
128
+ @stderr.close unless @stderr.closed?
129
+
130
+ sleep 10 # allow some time to close (yes, it can take up to 10 seconds)
131
+ pid = `pidof #{@rec_app}`.to_i
132
+ begin
133
+ if pid != 0
134
+ Process.kill(9,pid)
135
+ end
136
+ rescue => e
137
+ puts "Got error " + e.inspect
138
+ end
139
+ rescue => e
140
+ raise RuntimeError.new( "Failed to end recording. Errror:\n " << e.inspect)
141
+ end
128
142
  end
129
-
143
+
130
144
  nil
131
-
132
- end
145
+
146
+ end
133
147
 
134
148
  # enable hooking for performance measurement & debug logging
135
149
  TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
@@ -44,10 +44,6 @@ module MobyUtil
44
44
  # TODO: document me
45
45
  def cache( key, value )
46
46
 
47
- yield
48
-
49
- # JKo: disable xml caching for now, need more investigation why tests starts to fail
50
- =begin
51
47
  if @options[ :cache_enabled ] == true
52
48
 
53
49
  @cache[ key ].fetch( value ){
@@ -61,7 +57,6 @@ module MobyUtil
61
57
  yield
62
58
 
63
59
  end
64
- =end
65
60
 
66
61
  end
67
62
 
@@ -78,13 +73,6 @@ module MobyUtil
78
73
 
79
74
  include Cache
80
75
 
81
- # TODO: Documentation
82
- def empty?
83
-
84
- cache( :is_nil, :value ){ @xml.nil? }
85
-
86
- end
87
-
88
76
  # TODO: Documentation
89
77
  def name
90
78
 
@@ -95,10 +83,12 @@ module MobyUtil
95
83
  # TODO: Documentation
96
84
  def nil?
97
85
 
98
- cache( :is_nil, :value ){ @xml.nil? }
86
+ cache( :nil?, :value ){ @xml.nil? }
99
87
 
100
88
  end
101
89
 
90
+ alias :empty? :nil?
91
+
102
92
  # TODO: Documentation
103
93
  def size
104
94
 
@@ -30,7 +30,7 @@ module MobyUtil
30
30
  # TODO: document me
31
31
  def []( value )
32
32
 
33
- cache( __method__, value ){ @xml[ value ] }
33
+ cache( :[], value ){ @xml[ value ] }
34
34
 
35
35
  end
36
36
 
@@ -46,7 +46,7 @@ module MobyUtil
46
46
  # TODO: document me
47
47
  def ==( object )
48
48
 
49
- cache( __method__, object.object_id ){ @xml.content == object.xml.content }
49
+ cache( :==, object.object_id ){ @xml.content == object.xml.content }
50
50
 
51
51
  end
52
52
 
@@ -56,7 +56,7 @@ module MobyUtil
56
56
  # TODO: document me
57
57
  def <=>( object )
58
58
 
59
- cache( __method__, object.object_id ){ @xml <=> object.xml }
59
+ cache( :<=>, object.object_id ){ @xml <=> object.xml }
60
60
 
61
61
  end
62
62
 
@@ -80,10 +80,15 @@ module MobyUtil
80
80
  def attributes
81
81
 
82
82
  cache( :attributes, :value ){
83
- # return hash of attributes
84
- Hash[ @xml.attribute_nodes.collect{ | node |
85
- [ node.node_name, node.value.to_s ] }
86
- ]
83
+
84
+ # return hash of attributes
85
+ #Hash[ @xml.attribute_nodes.collect{ | node |
86
+ # [ node.node_name, node.value.to_s ] }
87
+ #]
88
+
89
+ # approx. 20% faster
90
+ @xml.attribute_nodes.inject({}){ | result, node | result[ node.node_name ] = node.value; result }
91
+
87
92
  }
88
93
 
89
94
  end
@@ -91,7 +96,7 @@ module MobyUtil
91
96
  # TODO: document me
92
97
  def blank?
93
98
 
94
- cache( :is_blank, :value ){ @xml.blank? }
99
+ cache( :blank?, :value ){ @xml.blank? }
95
100
 
96
101
  end
97
102
 
@@ -35,7 +35,7 @@ module MobyUtil
35
35
 
36
36
  def first
37
37
 
38
- cache( :first, :vaue ){ node_object( @xml.first ) }
38
+ cache( :first, :value ){ node_object( @xml.first ) }
39
39
 
40
40
  end
41
41
 
@@ -47,13 +47,26 @@ module MobyUtil
47
47
 
48
48
  def each( &block )
49
49
 
50
- @xml.each{ | node |
50
+ #@xml.each{ | node |
51
+ # yield( cache( :each, node ){ node_object( node ) } )
52
+ #}
51
53
 
52
- yield( cache( :each, node ){ node_object( node ) } )
54
+ # approx. 3,5% faster
55
+ cache( :each, :cached_nodes ){
53
56
 
54
- }
57
+ @xml.collect{ | node |
55
58
 
56
- self
59
+ cache( :each, node ){ node_object( node ) }
60
+
61
+ }
62
+
63
+ }.each{ | node |
64
+
65
+ yield( node )
66
+
67
+ }
68
+
69
+ self
57
70
 
58
71
  end
59
72
 
@@ -87,7 +100,7 @@ module MobyUtil
87
100
 
88
101
  def compact
89
102
 
90
- cache( :compact, :value ){ nodeset_object( @xml.compact ) }
103
+ cache( :compact, :value ){ node_object( @xml.compact ) }
91
104
 
92
105
  end
93
106
 
@@ -99,9 +112,23 @@ module MobyUtil
99
112
 
100
113
  end
101
114
 
115
+ def inject( result, &block )
116
+
117
+ cache( :each, :cached_nodes ){
118
+
119
+ @xml.collect{ | node |
120
+
121
+ cache( :each, node ){ node_object( node ) }
122
+
123
+ }
124
+
125
+ }.__send__( :inject, result, &block )
126
+
127
+ end
128
+
102
129
  def sort( &block )
103
130
 
104
- nodeset_object( _sort( &block ) )
131
+ node_object( _sort( &block ) )
105
132
 
106
133
  end
107
134
 
@@ -117,7 +144,7 @@ module MobyUtil
117
144
 
118
145
  def empty?
119
146
 
120
- cache( :is_empty, :value ){ @xml.empty? }
147
+ cache( :empty?, :value ){ @xml.empty? }
121
148
 
122
149
  end
123
150
 
@@ -161,7 +188,22 @@ module MobyUtil
161
188
 
162
189
  def _collect( &block )
163
190
 
164
- @xml.collect{ | node | yield( cache( :each, node ){ node_object( node ) } ) }
191
+ #@xml.collect{ | node | yield( cache( :each, node ){ node_object( node ) } ) }
192
+
193
+ # approx. 3.5% faster
194
+ cache( :each, :cached_nodes ){
195
+
196
+ @xml.collect{ | node |
197
+
198
+ cache( :each, node ){ node_object( node ) }
199
+
200
+ }
201
+
202
+ }.collect{ | node |
203
+
204
+ yield( node )
205
+
206
+ }
165
207
 
166
208
  end
167
209
 
@@ -141,6 +141,7 @@ module MobyUtil
141
141
 
142
142
  begin
143
143
 
144
+ =begin
144
145
  unless crc.nil?
145
146
 
146
147
  [ Document.new( xml_string ), false ]
@@ -150,9 +151,10 @@ module MobyUtil
150
151
  Document.new( xml_string )
151
152
 
152
153
  end
154
+ =end
153
155
 
154
156
  # JKo: disable xml caching for now, need more investigation why tests starts to fail
155
- =begin
157
+ #=begin
156
158
  unless crc.nil?
157
159
 
158
160
  if @document_cache[ :cache ].include?( crc )
@@ -202,7 +204,7 @@ module MobyUtil
202
204
  Document.new( xml_string )
203
205
 
204
206
  end
205
- =end
207
+ #=end
206
208
  rescue
207
209
 
208
210
  if $TDRIVER_INITIALIZED == true
@@ -47,7 +47,7 @@ module TDriverVerify
47
47
 
48
48
  rescue Exception
49
49
 
50
- raise exception.class, "Exception was raised while executing on_error_verify_block. Reason: #{ $!.message.to_s }"
50
+ raise $!.class, "Exception was raised while executing on_error_verify_block. Reason: #{ $!.message.to_s }"
51
51
 
52
52
  end
53
53
 
@@ -83,18 +83,21 @@ module TDriverVerify
83
83
  # disable behaviour logging
84
84
  $logger.enabled = false
85
85
 
86
- # ensure that code block was given
87
- raise ArgumentError, "No block was given." unless block_given?
88
-
89
86
  # ensure that timeout is either nil or type of integer
90
- raise ArgumentError, "wrong argument type #{ timeout.class } for timeout (expected Fixnum or NilClass)" unless [ NilClass, Fixnum ].include?( timeout.class )
87
+ timeout.check_type [ Integer, NilClass ], 'wrong argument type $1 for timeout (expected $2)'
91
88
 
92
89
  # ensure that message is either nil or type of string
93
- raise ArgumentError, "Argument message was not a String" unless [ NilClass, String ].include?( message.class )
90
+ message.check_type [ String, NilClass ], 'wrong argument type $1 for exception message (expected $2)'
91
+
92
+ # verify that block was given
93
+ raise LocalJumpError, 'unable to verify due to no code block was given' unless block_given?
94
94
 
95
95
  # convert timeout to integer, nil will be zero
96
96
  timeout = get_timeout( timeout )
97
97
 
98
+ # verify that timeout is valid
99
+ timeout.not_negative 'timeout value cannot be negative'
100
+
98
101
  # calculate the time when timeout exceeds
99
102
  timeout_end_time = Time.now + timeout
100
103
 
@@ -127,7 +130,7 @@ module TDriverVerify
127
130
  raise if $!.kind_of?( MobyBase::ContinuousVerificationError )
128
131
 
129
132
  # refresh and retry unless timeout exceeded
130
- raise $! if Time.new > timeout_end_time
133
+ raise $! if Time.now > timeout_end_time
131
134
 
132
135
  # retry interval
133
136
  sleep TIMEOUT_CYCLE_SECONDS
@@ -204,18 +207,21 @@ module TDriverVerify
204
207
  # disable behaviour logging
205
208
  $logger.enabled = false
206
209
 
207
- # ensure that code block was given
208
- raise ArgumentError, "No block was given." unless block_given?
209
-
210
210
  # ensure that timeout is either nil or type of integer
211
- raise ArgumentError, "wrong argument type #{ timeout.class } for timeout (expected Fixnum or NilClass)" unless [ NilClass, Fixnum ].include?( timeout.class )
211
+ timeout.check_type [ Integer, NilClass ], 'wrong argument type $1 for timeout (expected $2)'
212
212
 
213
213
  # ensure that message is either nil or type of string
214
- raise ArgumentError, "Argument message was not a String" unless [ NilClass, String ].include?( message.class )
214
+ message.check_type [ String, NilClass ], 'wrong argument type $1 for exception message (expected $2)'
215
+
216
+ # verify that block was given
217
+ raise LocalJumpError, 'unable to verify due to no code block was given' unless block_given?
215
218
 
216
219
  # convert timeout to integer, nil will be zero
217
220
  timeout = get_timeout( timeout )
218
221
 
222
+ # verify that timeout is valid
223
+ timeout.not_negative 'timeout value cannot be negative'
224
+
219
225
  # calculate the time when timeout exceeds
220
226
  timeout_end_time = Time.now + timeout
221
227
 
@@ -253,7 +259,7 @@ module TDriverVerify
253
259
  end
254
260
 
255
261
  # refresh and retry unless timeout exceeded
256
- raise $! if Time.new > timeout_end_time
262
+ raise $! if Time.now > timeout_end_time
257
263
 
258
264
  # retry interval
259
265
  sleep TIMEOUT_CYCLE_SECONDS
@@ -337,18 +343,21 @@ module TDriverVerify
337
343
  # disable behaviour logging
338
344
  $logger.enabled = false
339
345
 
340
- # ensure that code block was given
341
- raise ArgumentError, "No block was given." unless block_given?
342
-
343
346
  # ensure that timeout is either nil or type of integer
344
- raise ArgumentError, "wrong argument type #{ timeout.class } for timeout (expected Fixnum or NilClass)" unless [ NilClass, Fixnum ].include?( timeout.class )
347
+ timeout.check_type [ Integer, NilClass ], 'wrong argument type $1 for timeout (expected $2)'
345
348
 
346
349
  # ensure that message is either nil or type of string
347
- raise ArgumentError, "Argument message was not a String" unless [ NilClass, String ].include?( message.class )
350
+ message.check_type [ String, NilClass ], 'wrong argument type $1 for exception message (expected $2)'
351
+
352
+ # verify that block was given
353
+ raise LocalJumpError, 'unable to verify due to no code block was given' unless block_given?
348
354
 
349
355
  # convert timeout to integer, nil will be zero
350
356
  timeout = get_timeout( timeout )
351
357
 
358
+ # verify that timeout is valid
359
+ timeout.not_negative 'timeout value cannot be negative'
360
+
352
361
  # calculate the time when timeout exceeds
353
362
  timeout_end_time = Time.now + timeout
354
363
 
@@ -387,7 +396,7 @@ module TDriverVerify
387
396
  raise if $!.kind_of?( MobyBase::ContinuousVerificationError )
388
397
 
389
398
  # refresh and retry unless timeout exceeded
390
- raise $! if Time.new > timeout_end_time
399
+ raise $! if Time.now > timeout_end_time
391
400
 
392
401
  # retry interval
393
402
  sleep TIMEOUT_CYCLE_SECONDS
@@ -473,18 +482,21 @@ module TDriverVerify
473
482
  # disable behaviour logging
474
483
  $logger.enabled = false
475
484
 
476
- # ensure that code block was given
477
- raise ArgumentError, "No block was given." unless block_given?
478
-
479
485
  # ensure that timeout is either nil or type of integer
480
- raise ArgumentError, "wrong argument type #{ timeout.class } for timeout (expected Fixnum or NilClass)" unless [ NilClass, Fixnum ].include?( timeout.class )
486
+ timeout.check_type [ Integer, NilClass ], 'wrong argument type $1 for timeout (expected $2)'
481
487
 
482
488
  # ensure that message is either nil or type of string
483
- raise ArgumentError, "Argument message was not a String" unless [ NilClass, String ].include?( message.class )
489
+ message.check_type [ String, NilClass ], 'wrong argument type $1 for exception message (expected $2)'
490
+
491
+ # verify that block was given
492
+ raise LocalJumpError, 'unable to verify due to no code block was given' unless block_given?
484
493
 
485
494
  # convert timeout to integer, nil will be zero
486
495
  timeout = get_timeout( timeout )
487
496
 
497
+ # verify that timeout is valid
498
+ timeout.not_negative 'timeout value cannot be negative'
499
+
488
500
  # calculate the time when timeout exceeds
489
501
  timeout_end_time = Time.now + timeout
490
502
 
@@ -523,7 +535,7 @@ module TDriverVerify
523
535
  raise if $!.kind_of?( MobyBase::ContinuousVerificationError )
524
536
 
525
537
  # refresh and retry unless timeout exceeded
526
- raise $! if Time.new > timeout_end_time
538
+ raise $! if Time.now > timeout_end_time
527
539
 
528
540
  # retry interval
529
541
  sleep TIMEOUT_CYCLE_SECONDS
@@ -581,7 +593,7 @@ module TDriverVerify
581
593
 
582
594
  end
583
595
 
584
- # Verifies that the block given to this method evaluates to the expected value. Verification is synchronized with all connected suts.
596
+ # Verifies that result of given block equals to expected value. Verification is synchronized with all connected suts.
585
597
  # If this method is called for a sut, synchronization is only done with that sut.
586
598
  #
587
599
  # === params
@@ -607,18 +619,21 @@ module TDriverVerify
607
619
  # disable behaviour logging
608
620
  $logger.enabled = false
609
621
 
610
- # ensure that code block was given
611
- raise ArgumentError, "No block was given." unless block_given?
612
-
613
622
  # ensure that timeout is either nil or type of integer
614
- raise ArgumentError, "wrong argument type #{ timeout.class } for timeout (expected Fixnum or NilClass)" unless [ NilClass, Fixnum ].include?( timeout.class )
623
+ timeout.check_type [ Integer, NilClass ], 'wrong argument type $1 for timeout (expected $2)'
615
624
 
616
625
  # ensure that message is either nil or type of string
617
- raise ArgumentError, "Argument message was not a String" unless [ NilClass, String ].include?( message.class )
626
+ message.check_type [ String, NilClass ], 'wrong argument type $1 for exception message (expected $2)'
627
+
628
+ # verify that block was given
629
+ raise LocalJumpError, 'unable to verify due to no code block was given' unless block_given?
618
630
 
619
631
  # convert timeout to integer, nil will be zero
620
632
  timeout = get_timeout( timeout )
621
633
 
634
+ # verify that timeout is valid
635
+ timeout.not_negative 'timeout value cannot be negative'
636
+
622
637
  # calculate the time when timeout exceeds
623
638
  timeout_end_time = Time.now + timeout
624
639
 
@@ -657,7 +672,7 @@ module TDriverVerify
657
672
  raise if $!.kind_of?( MobyBase::ContinuousVerificationError )
658
673
 
659
674
  # refresh and retry unless timeout exceeded
660
- raise $! if Time.new > timeout_end_time
675
+ raise $! if Time.now > timeout_end_time
661
676
 
662
677
  # retry interval
663
678
  sleep TIMEOUT_CYCLE_SECONDS
@@ -715,21 +730,20 @@ module TDriverVerify
715
730
 
716
731
  end
717
732
 
718
- # Verifies that the block given to return value matches with expected regular expression pattern. Verification is synchronized with all connected suts.
733
+ # Verifies that result of the given block is less than expected value. Verification is synchronized with all connected suts.
719
734
  # If this method is called for a sut, synchronization is only done with that sut.
720
735
  #
721
736
  # === params
722
- # expected:: Regular expression
737
+ # expected:: Expected result value of the block
723
738
  # timeout:: (optional) Integer defining the amount of seconds during which the verification must pass.
724
739
  # message:: (optional) A String that is displayed as additional information if the verification fails.
725
740
  # === returns
726
741
  # nil
727
742
  # === raises
728
743
  # ArgumentError:: message was not a String or timeout an integer, or no block was given.
729
- # TypeError:: if block result not type of String.
730
744
  # VerificationError:: The verification failed.
731
745
  # RuntimeError:: An unexpected error was encountered during verification.
732
- def verify_regexp( expected_value, timeout = nil, message = nil, &block )
746
+ def verify_less( expected_value, timeout = nil, message = nil, &block )
733
747
 
734
748
  begin
735
749
 
@@ -742,20 +756,21 @@ module TDriverVerify
742
756
  # disable behaviour logging
743
757
  $logger.enabled = false
744
758
 
745
- # ensure that code block was given
746
- raise ArgumentError, "No block was given." unless block_given?
747
-
748
759
  # ensure that timeout is either nil or type of integer
749
- raise ArgumentError, "wrong argument type #{ timeout.class } for timeout (expected Fixnum or NilClass)" unless [ NilClass, Fixnum ].include?( timeout.class )
760
+ timeout.check_type [ Integer, NilClass ], 'wrong argument type $1 for timeout (expected $2)'
750
761
 
751
762
  # ensure that message is either nil or type of string
752
- raise ArgumentError, "Argument message was not a String" unless [ NilClass, String ].include?( message.class )
763
+ message.check_type [ String, NilClass ], 'wrong argument type $1 for exception message (expected $2)'
753
764
 
754
- expected_value.check_type Regexp, "wrong argument type $1 for expected result (expected $2)"
765
+ # verify that block was given
766
+ raise LocalJumpError, 'unable to verify due to no code block was given' unless block_given?
755
767
 
756
768
  # convert timeout to integer, nil will be zero
757
769
  timeout = get_timeout( timeout )
758
770
 
771
+ # verify that timeout is valid
772
+ timeout.not_negative 'timeout value cannot be negative'
773
+
759
774
  # calculate the time when timeout exceeds
760
775
  timeout_end_time = Time.now + timeout
761
776
 
@@ -783,8 +798,8 @@ module TDriverVerify
783
798
  # execute code block
784
799
  result = yield
785
800
 
786
- # raise exception if result of yield does not match with expected value regexp
787
- raise MobyBase::VerificationError unless result =~ expected_value
801
+ # raise exception if result of yield is less than expected value
802
+ raise MobyBase::VerificationError unless result < expected_value
788
803
 
789
804
  # break loop if no exceptions thrown
790
805
  break
@@ -794,7 +809,7 @@ module TDriverVerify
794
809
  raise if $!.kind_of?( MobyBase::ContinuousVerificationError )
795
810
 
796
811
  # refresh and retry unless timeout exceeded
797
- raise $! if Time.new > timeout_end_time
812
+ raise $! if Time.now > timeout_end_time
798
813
 
799
814
  # retry interval
800
815
  sleep TIMEOUT_CYCLE_SECONDS
@@ -822,7 +837,7 @@ module TDriverVerify
822
837
  elsif $!.kind_of?( MobyBase::VerificationError )
823
838
 
824
839
  error_message = "Verification #{ message }at #{ verify_caller } failed: #{ MobyUtil::KernelHelper.find_source( verify_caller ) }"
825
- error_message << "The block did not return #{ expected_value.inspect } pattern. It returned: #{ result.inspect }"
840
+ error_message << "The block did not return #{ expected_value }. It returned: #{ result.inspect }"
826
841
 
827
842
  else
828
843
 
@@ -831,7 +846,7 @@ module TDriverVerify
831
846
 
832
847
  end
833
848
 
834
- $logger.behaviour "FAIL;Verification #{ message }failed: #{ $!.to_s }.\n #{ timeout.nil? ? '' : ' using timeout ' + timeout.to_s }.;#{ self.kind_of?( MobyBase::SUT ) ? self.id.to_s + ';sut' : ';' };{};verify_regexp;"
849
+ $logger.behaviour "FAIL;Verification #{ message }failed: #{ $!.to_s }.\n #{ timeout.nil? ? '' : ' using timeout ' + timeout.to_s }.;#{ self.kind_of?( MobyBase::SUT ) ? self.id.to_s + ';sut' : ';' };{};verify_less;"
835
850
 
836
851
  # raise the exception
837
852
  raise MobyBase::VerificationError, error_message
@@ -846,725 +861,365 @@ module TDriverVerify
846
861
 
847
862
  end
848
863
 
849
- $logger.behaviour "PASS;Verification #{ message }at #{ verify_caller } was successful#{ timeout.nil? ? '' : ' using timeout ' + timeout.to_s }.;#{ self.kind_of?( MobyBase::SUT ) ? self.id.to_s + ';sut' : ';' };{};verify_regexp;"
864
+ $logger.behaviour "PASS;Verification #{ message }at #{ verify_caller } was successful#{ timeout.nil? ? '' : ' using timeout ' + timeout.to_s }.;#{ self.kind_of?( MobyBase::SUT ) ? self.id.to_s + ';sut' : ';' };{};verify_less;"
850
865
 
851
866
  nil
852
867
 
853
868
  end
854
869
 
855
- # Verifies that the given signal is emitted.
856
- #
857
- # === params
858
- # timeout:: Integer, defining the amount of seconds during which the verification must pass.
859
- # signal_name:: String, name of the signal
860
- # message:: (optional) A String that is displayed as additional information if the verification fails.
861
- # block:: code to execute while listening signals
862
- # === returns
863
- # nil
864
- # === raises
865
- # ArgumentError:: message or signal_name was not a String or timeout a non negative Integer
866
- # VerificationError:: The verification failed.
867
- def verify_signal( timeout, signal_name, message = nil, &block )
868
-
869
- logging_enabled = $logger.enabled
870
- verify_caller = caller(1).first.to_s
871
-
872
- begin
873
-
874
- $logger.enabled = false
875
-
876
- raise ArgumentError, "Argument timeout was not a non negative Integer." unless (timeout.kind_of?(Integer) && timeout >= 0)
877
- raise ArgumentError, "Argument message was not a non empty String." unless (message.nil? || (message.kind_of?(String) && !message.empty?))
878
-
879
- # wait for the signal
880
- begin
881
-
882
- self.wait_for_signal( timeout, signal_name, &block )
883
-
884
- rescue
885
-
886
- error_msg = "Verification #{message.nil? ? '' : '"' << message.to_s << '" '}at #{verify_caller} failed:"
887
- error_msg << MobyUtil::KernelHelper.find_source(verify_caller)
888
- error_msg << "The signal #{signal_name} was not emitted in #{timeout} seconds.\nNested exception:\n" << $!.inspect
889
-
890
- raise MobyBase::VerificationError, error_msg
891
-
892
- end
893
-
894
- rescue
895
-
896
- execute_on_error_verify_block unless @@on_error_verify_block.nil?
897
-
898
- $logger.enabled = logging_enabled
899
-
900
- $logger.behaviour "FAIL;Verification #{message.nil? ? '' : '\"' << message << '\" '}failed: #{$!.to_s} using timeout '#{timeout}.;#{self.kind_of?(MobyBase::SUT) ? self.id.to_s + ';sut' : ';'};{};verify_signal;#{signal_name}"
901
-
902
- raise
903
-
904
- ensure
905
-
906
- $logger.enabled = logging_enabled
907
-
908
- end
909
-
910
- $logger.behaviour "PASS;Verification #{message.nil? ? '' : '\"' << message << '\" '}at #{verify_caller} was successful#{timeout.nil? ? '' : ' using timeout ' + timeout.to_s}.;#{self.kind_of?(MobyBase::SUT) ? self.id.to_s + ';sut' : ';'};{};verify_signal;#{signal_name}"
911
-
912
- nil
913
-
914
- end
915
-
916
- =begin
917
-
918
- # old implementation:
919
-
920
- # Verifies that the block given to return value matches with expected regular expression pattern. Verification is synchronized with all connected suts.
870
+ # Verifies that result of the given block is greater than expected value. Verification is synchronized with all connected suts.
921
871
  # If this method is called for a sut, synchronization is only done with that sut.
922
872
  #
923
873
  # === params
924
- # expected:: Regular expression
874
+ # expected:: Expected result value of the block
925
875
  # timeout:: (optional) Integer defining the amount of seconds during which the verification must pass.
926
876
  # message:: (optional) A String that is displayed as additional information if the verification fails.
927
877
  # === returns
928
878
  # nil
929
879
  # === raises
930
880
  # ArgumentError:: message was not a String or timeout an integer, or no block was given.
931
- # TypeError:: if block result not type of String.
932
881
  # VerificationError:: The verification failed.
933
882
  # RuntimeError:: An unexpected error was encountered during verification.
934
- def verify_regexp( expected, timeout = nil, message = nil, &block )
935
-
936
- logging_enabled = $logger.enabled
937
-
938
- verify_caller = caller( 1 ).first.to_s
939
-
883
+ def verify_greater( expected_value, timeout = nil, message = nil, &block )
884
+
940
885
  begin
941
886
 
942
- raise ArgumentError, "No block was given." unless block_given?
887
+ # determine name of caller method
888
+ verify_caller = caller( 1 ).first.to_s
943
889
 
944
- # verify argument types
945
- timeout.check_type [ Integer, NilClass ], "wrong argument type $1 for timeout (expected $2)"
946
- message.check_type [ String, NilClass ], "wrong argument type $1 for message (expected $2)"
947
- expected.check_type Regexp, "wrong argument type $1 for expected result (expected $2)"
890
+ # store orignal logging state
891
+ logging_enabled = $logger.enabled
948
892
 
893
+ # disable behaviour logging
949
894
  $logger.enabled = false
950
895
 
951
- #Set the testobject timeout to 0 for the duration of the verify call
952
- original_sync_timeout = MobyBase::TestObjectFactory.instance.timeout
953
-
954
- MobyBase::TestObjectFactory.instance.timeout = 0
896
+ # ensure that timeout is either nil or type of integer
897
+ timeout.check_type [ Integer, NilClass ], 'wrong argument type $1 for timeout (expected $2)'
955
898
 
956
- timeout_time = get_end_time( timeout )
899
+ # ensure that message is either nil or type of string
900
+ message.check_type [ String, NilClass ], 'wrong argument type $1 for exception message (expected $2)'
957
901
 
958
- loop do
959
-
960
- counter = ref_counter
961
-
962
- # catch errors thrown due to verification results
963
- begin
964
-
965
- # catch errors thrown in the provided block
966
- begin
967
-
968
- # execute block
969
- result = yield
902
+ # verify that block was given
903
+ raise LocalJumpError, 'unable to verify due to no code block was given' unless block_given?
970
904
 
971
- rescue Exception
905
+ # convert timeout to integer, nil will be zero
906
+ timeout = get_timeout( timeout )
972
907
 
973
- raise if $!.kind_of?( MobyBase::ContinuousVerificationError )
908
+ # verify that timeout is valid
909
+ timeout.not_negative 'timeout value cannot be negative'
974
910
 
975
- error_msg = "Verification #{ message.nil? ? '' : '"' << message.to_s << '" '}at #{ verify_caller } failed as an exception was thrown when the verification block was executed."
911
+ # calculate the time when timeout exceeds
912
+ timeout_end_time = Time.now + timeout
976
913
 
977
- error_msg << MobyUtil::KernelHelper.find_source( verify_caller )
914
+ # convert message to string, nil will be empty string
915
+ message = message.to_s
978
916
 
979
- error_msg << "\nDetails: \n#{ $!.inspect }"
917
+ # add double quotation and trailing whitespace if not empty string
918
+ message = "#{ message.inspect } " if message.length > 0
980
919
 
981
- raise MobyBase::VerificationError, error_msg
920
+ # store original timeout value
921
+ original_timeout_value = MobyBase::TestObjectFactory.instance.timeout
982
922
 
983
- end
923
+ # set the testobject timeout to 0 for the duration of the verify call
924
+ MobyBase::TestObjectFactory.instance.timeout = 0
984
925
 
985
- # verify that result value is type of string
986
- result.check_type String, "wrong variable type $1 for result (expected $2)"
987
-
988
- # result verification
989
- unless result =~ expected
926
+ # result container
927
+ result = nil
990
928
 
991
- error_msg = "Verification #{ message.nil? ? '' : '"' << message.to_s << '" '}at #{ verify_caller } failed:"
992
-
993
- error_msg << MobyUtil::KernelHelper.find_source( verify_caller )
994
-
995
- error_msg << "\nThe block did not match with pattern #{ expected.inspect }. It returned: #{ result.inspect }"
929
+ loop do
930
+
931
+ begin
932
+
933
+ counter = ref_counter
996
934
 
997
- raise MobyBase::VerificationError, error_msg
935
+ # execute code block
936
+ result = yield
998
937
 
999
- end
938
+ # raise exception if result of yield is greater than expected value
939
+ raise MobyBase::VerificationError unless result > expected_value
1000
940
 
1001
941
  # break loop if no exceptions thrown
1002
942
  break
1003
943
 
1004
- rescue MobyBase::VerificationError
1005
-
1006
- # refresh and retry unless timeout reached
944
+ rescue
1007
945
 
1008
- raise $! if Time.new > timeout_time
946
+ raise if $!.kind_of?( MobyBase::ContinuousVerificationError )
1009
947
 
948
+ # refresh and retry unless timeout exceeded
949
+ raise $! if Time.now > timeout_end_time
950
+
951
+ # retry interval
1010
952
  sleep TIMEOUT_CYCLE_SECONDS
1011
953
 
954
+ # refresh suts
1012
955
  refresh_suts if counter == ref_counter
1013
-
1014
- rescue MobyBase::ContinuousVerificationError
1015
-
1016
- raise
1017
-
1018
- rescue TypeError
1019
956
 
1020
- raise $!
1021
-
1022
- rescue Exception
957
+ end # begin
958
+
959
+ end # do loop
1023
960
 
1024
- raise if $!.kind_of?( MobyBase::ContinuousVerificationError )
1025
-
1026
- # an unexpected error has occurred
1027
- raise RuntimeError, "An unexpected error was encountered during verification:\n#{ $!.inspect }"
1028
-
1029
- end # begin, catch any VerificationErrors
1030
-
1031
- end # do
1032
-
1033
- rescue Exception
1034
-
1035
- execute_on_error_verify_block unless @@on_error_verify_block.nil?
1036
-
1037
- raise if $!.kind_of?( MobyBase::ContinuousVerificationError )
961
+ rescue
1038
962
 
963
+ # restore logger state
1039
964
  $logger.enabled = logging_enabled
1040
-
1041
- $logger.behaviour "FAIL;Verification #{message.nil? ? '' : '\"' << message << '\" '}failed:#{ $!.to_s }.\n#{ timeout.nil? ? '' : ' using timeout ' + timeout.to_s }.;#{ self.kind_of?( MobyBase::SUT ) ? "#{ self.id.to_s };sut" : ';' };{};verify_regexp;#{ expected.inspect }"
1042
965
 
1043
- raise $!
966
+ # execute on verification error code block
967
+ execute_on_error_verify_block unless @@on_error_verify_block.nil?
1044
968
 
1045
- ensure
969
+ # process the exception
970
+ if $!.kind_of?( MobyBase::ContinuousVerificationError )
971
+
972
+ raise
1046
973
 
1047
- MobyBase::TestObjectFactory.instance.timeout = original_sync_timeout
1048
-
1049
- $logger.enabled = logging_enabled
974
+ elsif $!.kind_of?( MobyBase::VerificationError )
1050
975
 
1051
- end
1052
-
1053
- $logger.behaviour "PASS;Verification #{ message.nil? ? '' : '\"' << message << '\" ' }at #{ verify_caller } was successful#{ timeout.nil? ? '' : ' using timeout ' + timeout.to_s}.;#{ self.kind_of?( MobyBase::SUT ) ? "#{ self.id.to_s };sut" : ';'};{};verify_regexp;#{ expected.inspect }"
1054
-
1055
- nil
1056
-
1057
- end
1058
-
1059
- # Verifies that the block given to this method evaluates without throwing any exceptions. Verification is synchronized with all connected suts.
1060
- # If this method is called for a sut, synchronization is only done with that sut.
1061
- #
1062
- # === params
1063
- # timeout:: (optional) Integer defining the amount of seconds during which the verification must pass.
1064
- # message:: (optional) A String that is displayed as additional information if the verification fails.
1065
- # === returns
1066
- # nil
1067
- # === raises
1068
- # ArgumentError:: message was not a String or timeout an integer, or no block was given.
1069
- # VerificationError:: The verification failed.
1070
- def verify( timeout = nil, message = nil, &block )
1071
-
1072
- logging_enabled = $logger.enabled
1073
-
1074
- verify_caller = caller(1).first.to_s
1075
-
1076
- begin
1077
-
1078
- $logger.enabled = false
976
+ error_message = "Verification #{ message }at #{ verify_caller } failed: #{ MobyUtil::KernelHelper.find_source( verify_caller ) }"
977
+ error_message << "The block did not return #{ expected_value }. It returned: #{ result.inspect }"
978
+
979
+ else
1079
980
 
1080
- Kernel::raise ArgumentError.new("No block was given.") unless block_given?
1081
- Kernel::raise ArgumentError.new("Argument timeout was not an Integer.") unless timeout.nil? or timeout.kind_of?(Integer)
1082
- Kernel::raise ArgumentError.new("Argument message was not a String.") unless message.nil? or message.kind_of?(String)
1083
-
1084
- #Set the testobject timeout to 0 for the duration of the verify call
1085
- original_sync_timeout = MobyBase::TestObjectFactory.instance.timeout
1086
- MobyBase::TestObjectFactory.instance.timeout = 0
1087
-
1088
- timeout_time = get_end_time(timeout)
1089
- #TIMEOUT_CYCLE_SECONDS
1090
-
1091
- loop do
1092
-
1093
- counter = ref_counter
1094
-
1095
- begin # catch errors thrown in the provided block
1096
-
1097
- yield
1098
-
1099
- # no error => verification ok
1100
- break
1101
-
1102
- rescue Exception => e
1103
-
1104
- raise if e.kind_of? MobyBase::ContinuousVerificationError
1105
-
1106
- source_contents = ""
1107
- error_msg = ""
1108
-
1109
- if Time.new > timeout_time
1110
-
1111
- error_msg = "Verification #{message.nil? ? '' : '"' << message.to_s << '" '}at #{verify_caller} failed\n"
1112
-
1113
- begin
1114
-
1115
- source_contents = MobyUtil::KernelHelper.find_source(verify_caller)
1116
-
1117
- rescue Exception
1118
- # failed to load line from file, do nothing
1119
- $logger.enabled = logging_enabled
1120
- $logger.behaviour "WARNING;Failed to load source line: #{e.backtrace.inspect}.;#{self.kind_of?(MobyBase::SUT) ? self.id.to_s + ';sut' : ';'};{};verify;"
1121
- end
1122
-
1123
- if !source_contents.empty?
1124
- error_msg << source_contents
1125
- end
1126
-
1127
- error_msg << "\nNested exception:" << e.message << "\n"
1128
-
1129
- Kernel::raise MobyBase::VerificationError.new(error_msg)
1130
-
1131
- end
1132
-
1133
- end
1134
-
1135
- sleep TIMEOUT_CYCLE_SECONDS
1136
-
1137
- refresh_suts if counter == ref_counter
1138
-
1139
- end # do
1140
-
1141
- rescue Exception => e
1142
-
1143
- execute_on_error_verify_block unless @@on_error_verify_block.nil?
1144
-
1145
- raise if e.kind_of? MobyBase::ContinuousVerificationError
981
+ error_message = "Verification #{ message }at #{ verify_caller } failed as an exception was thrown when the verification block was executed"
982
+ error_message << "#{ MobyUtil::KernelHelper.find_source( verify_caller ) }\nDetails: \n#{ $!.inspect }"
983
+
984
+ end
1146
985
 
1147
- $logger.enabled = logging_enabled
1148
- $logger.behaviour "FAIL;Verification #{message.nil? ? '' : '\"' << message << '\" '}failed: #{e.to_s}#{timeout.nil? ? '' : ' using timeout ' + timeout.to_s}.;#{self.kind_of?(MobyBase::SUT) ? self.id.to_s + ';sut' : ';'};{};verify;"
1149
- Kernel::raise e
986
+ $logger.behaviour "FAIL;Verification #{ message }failed: #{ $!.to_s }.\n #{ timeout.nil? ? '' : ' using timeout ' + timeout.to_s }.;#{ self.kind_of?( MobyBase::SUT ) ? self.id.to_s + ';sut' : ';' };{};verify_greater;"
1150
987
 
988
+ # raise the exception
989
+ raise MobyBase::VerificationError, error_message
990
+
1151
991
  ensure
1152
992
 
1153
- MobyBase::TestObjectFactory.instance.timeout = original_sync_timeout unless original_sync_timeout.nil?
1154
-
1155
- end
1156
-
1157
- $logger.enabled = logging_enabled
1158
- $logger.behaviour "PASS;Verification #{message.nil? ? '' : '\"' << message << '\" '}at #{verify_caller} was successful#{timeout.nil? ? '' : ' using timeout ' + timeout.to_s}.;#{self.kind_of?(MobyBase::SUT) ? self.id.to_s + ';sut' : ';'};{};verify;"
1159
-
1160
- return nil
1161
-
1162
- end
1163
-
1164
- # Verifies that the block given to this method throws an exception while being evaluated. Verification is synchronized with all connected suts.
1165
- # If this method is called for a sut, synchronization is only done with that sut.
1166
- #
1167
- # === params
1168
- # timeout:: (optional) Integer defining the amount of seconds during which the verification must pass.
1169
- # message:: (optional) A String that is displayed as additional information if the verification fails.
1170
- # === returns
1171
- # nil
1172
- # === raises
1173
- # ArgumentError:: message was not a String or timeout an integer, or no block was given.
1174
- # VerificationError:: The verification failed.
1175
- def verify_not( timeout = nil, message = nil, &block )
1176
-
1177
- logging_enabled = $logger.enabled
1178
- verify_caller = caller(1).first.to_s
1179
- begin
1180
-
1181
- $logger.enabled = false
1182
- Kernel::raise ArgumentError.new("No block was given.") unless block_given?
1183
- Kernel::raise ArgumentError.new("Argument timeout was not an Integer.") unless timeout.nil? or timeout.kind_of?(Integer)
1184
- Kernel::raise ArgumentError.new("Argument message was not a String.") unless message.nil? or message.kind_of?(String)
1185
-
1186
- #Set the testobject timeout to 0 for the duration of the verify call
1187
- original_sync_timeout = MobyBase::TestObjectFactory.instance.timeout
1188
- MobyBase::TestObjectFactory.instance.timeout = 0
1189
-
1190
- timeout_time = get_end_time(timeout)
1191
- #TIMEOUT_CYCLE_SECONDS
1192
-
1193
- loop do
1194
- counter = ref_counter
1195
- artificial_exception_raised = false
1196
- begin # catch errors thrown in the provided block
1197
-
1198
- yield
1199
- artificial_exception_raised = true
1200
- Kernel::raise "test"
1201
- rescue Exception => e
1202
- raise if e.kind_of? MobyBase::ContinuousVerificationError
1203
-
1204
- source_contents = ""
1205
- error_msg = ""
1206
-
1207
- if (!artificial_exception_raised)
1208
- # an error was encountered => verification ok
1209
- break
1210
- end
1211
-
1212
- if Time.new > timeout_time
1213
-
1214
- error_msg = "Verification #{message.nil? ? '' : '"' << message.to_s << '" '}at #{verify_caller} failed\n"
1215
-
1216
- source_contents = MobyUtil::KernelHelper.find_source(verify_caller)
1217
-
1218
- if !source_contents.empty?
1219
- error_msg << source_contents
1220
- end
1221
-
1222
- Kernel::raise MobyBase::VerificationError.new(error_msg)
1223
-
1224
- end
1225
-
1226
- sleep TIMEOUT_CYCLE_SECONDS
1227
-
1228
- refresh_suts if counter == ref_counter
1229
-
1230
- end
1231
-
1232
- end # do
1233
-
1234
-
1235
- rescue Exception => e
1236
-
1237
- execute_on_error_verify_block unless @@on_error_verify_block.nil?
1238
-
1239
- raise if e.kind_of? MobyBase::ContinuousVerificationError
993
+ # restore original test object factory timeout value
994
+ MobyBase::TestObjectFactory.instance.timeout = original_timeout_value
1240
995
 
996
+ # restore logger state
1241
997
  $logger.enabled = logging_enabled
1242
- $logger.behaviour "FAIL;Verification #{message.nil? ? '' : '\"' << message << '\" '}failed: #{e.to_s}#{timeout.nil? ? '' : ' using timeout ' + timeout.to_s}.;#{self.kind_of?(MobyBase::SUT) ? self.id.to_s + ';sut' : ';'};{};verify_not;"
1243
- Kernel::raise e
1244
-
1245
- ensure
1246
-
1247
- MobyBase::TestObjectFactory.instance.timeout = original_sync_timeout unless original_sync_timeout.nil?
1248
-
998
+
1249
999
  end
1250
1000
 
1251
- $logger.enabled = logging_enabled
1252
- $logger.behaviour "PASS;Verification #{message.nil? ? '' : '\"' << message << '\" '}at #{verify_caller} was successful#{timeout.nil? ? '' : ' using timeout ' + timeout.to_s}.;#{self.kind_of?(MobyBase::SUT) ? self.id.to_s + ';sut' : ';'};{};verify_not;"
1253
- return nil
1001
+ $logger.behaviour "PASS;Verification #{ message }at #{ verify_caller } was successful#{ timeout.nil? ? '' : ' using timeout ' + timeout.to_s }.;#{ self.kind_of?( MobyBase::SUT ) ? self.id.to_s + ';sut' : ';' };{};verify_greater;"
1254
1002
 
1003
+ nil
1004
+
1255
1005
  end
1256
1006
 
1257
- # Verifies that the block given to this method evaluates to the expected value. Verification is synchronized with all connected suts.
1007
+ # Verifies that the block given to return value matches with expected regular expression pattern. Verification is synchronized with all connected suts.
1258
1008
  # If this method is called for a sut, synchronization is only done with that sut.
1259
1009
  #
1260
1010
  # === params
1261
- # expected:: Expected result value of the block
1011
+ # expected:: Regular expression
1262
1012
  # timeout:: (optional) Integer defining the amount of seconds during which the verification must pass.
1263
1013
  # message:: (optional) A String that is displayed as additional information if the verification fails.
1264
1014
  # === returns
1265
1015
  # nil
1266
1016
  # === raises
1267
1017
  # ArgumentError:: message was not a String or timeout an integer, or no block was given.
1018
+ # TypeError:: if block result not type of String.
1268
1019
  # VerificationError:: The verification failed.
1269
1020
  # RuntimeError:: An unexpected error was encountered during verification.
1270
- def verify_equal( expected, timeout = nil, message = nil, &block )
1271
- logging_enabled = $logger.enabled
1272
- verify_caller = caller(1).first.to_s
1273
- begin
1274
- $logger.enabled = false
1275
- Kernel::raise ArgumentError.new("No block was given.") unless block_given?
1276
- Kernel::raise ArgumentError.new("Argument timeout was not an Integer.") unless timeout.nil? or timeout.kind_of?(Integer)
1277
- Kernel::raise ArgumentError.new("Argument message was not a String.") unless message.nil? or message.kind_of?(String)
1278
-
1279
- #Set the testobject timeout to 0 for the duration of the verify call
1280
- original_sync_timeout = MobyBase::TestObjectFactory.instance.timeout
1281
- MobyBase::TestObjectFactory.instance.timeout = 0
1282
-
1283
- timeout_time = get_end_time(timeout)
1284
-
1285
- #TIMEOUT_CYCLE_SECONDS
1286
-
1287
- loop do
1288
- counter = ref_counter
1289
- begin # catch errors thrown due to verification results
1290
-
1291
- begin # catch errors thrown in the provided block
1292
- result = yield
1293
-
1294
- rescue Exception => e
1295
- raise if e.kind_of? MobyBase::ContinuousVerificationError
1296
- error_msg = "Verification #{message.nil? ? '' : '"' << message.to_s << '" '}at #{verify_caller} failed as an exception was thrown when the verification block was executed."
1297
- error_msg << MobyUtil::KernelHelper.find_source(verify_caller)
1298
- error_msg << "\nDetails: "
1299
- error_msg << "\n" << e.inspect
1300
- raise MobyBase::VerificationError.new(error_msg)
1301
- end
1302
- if result != expected
1303
- error_msg = "Verification #{message.nil? ? '' : '"' << message.to_s << '" '}at #{verify_caller} failed:"
1304
- error_msg << MobyUtil::KernelHelper.find_source(verify_caller)
1305
- error_msg << "\nThe block did not return #{expected.inspect}. It returned: " << result.inspect
1306
- raise MobyBase::VerificationError.new(error_msg)
1307
- end
1308
- # break loop if no exceptions thrown
1309
- break
1310
-
1311
- rescue MobyBase::VerificationError => ve
1312
-
1313
- # refresh and retry unless timeout reached
1314
-
1315
- if Time.new > timeout_time
1316
- Kernel::raise ve
1317
- end
1318
-
1319
- sleep TIMEOUT_CYCLE_SECONDS
1021
+ def verify_regexp( expected_value, timeout = nil, message = nil, &block )
1320
1022
 
1321
- refresh_suts if counter == ref_counter
1322
- rescue MobyBase::ContinuousVerificationError
1323
- raise
1324
- rescue Exception => e
1325
- raise if e.kind_of? MobyBase::ContinuousVerificationError
1326
- # an unexpected error has occurred
1327
- Kernel::raise RuntimeError.new("An unexpected error was encountered during verification:\n" << e.inspect )
1023
+ begin
1328
1024
 
1329
- end # begin, catch any VerificationErrors
1025
+ # store original timeout value
1026
+ original_timeout_value = MobyBase::TestObjectFactory.instance.timeout
1027
+
1028
+ # determine name of caller method
1029
+ verify_caller = caller( 1 ).first.to_s
1330
1030
 
1331
- end # do
1031
+ # store orignal logging state
1032
+ logging_enabled = $logger.enabled
1332
1033
 
1333
- rescue Exception => e
1034
+ # disable behaviour logging
1035
+ $logger.enabled = false
1334
1036
 
1335
- execute_on_error_verify_block unless @@on_error_verify_block.nil?
1037
+ # verify that arguments was given in correct format
1038
+ expected_value.check_type Regexp, "wrong argument type $1 for expected result (expected $2)"
1336
1039
 
1337
- raise if e.kind_of? MobyBase::ContinuousVerificationError
1040
+ # ensure that timeout is either nil or type of integer
1041
+ timeout.check_type [ Integer, NilClass ], 'wrong argument type $1 for timeout (expected $2)'
1338
1042
 
1339
- $logger.enabled = logging_enabled
1340
- $logger.behaviour "FAIL;Verification #{message.nil? ? '' : '\"' << message << '\" '}failed:#{e.to_s}.\n#{timeout.nil? ? '' : ' using timeout ' + timeout.to_s}.;#{self.kind_of?(MobyBase::SUT) ? self.id.to_s + ';sut' : ';'};{};verify_equal;" << expected.to_s
1341
- Kernel::raise e
1342
- ensure
1343
- MobyBase::TestObjectFactory.instance.timeout = original_sync_timeout unless original_sync_timeout.nil?
1344
- end
1043
+ # ensure that message is either nil or type of string
1044
+ message.check_type [ String, NilClass ], 'wrong argument type $1 for exception message (expected $2)'
1045
+
1046
+ # verify that block was given
1047
+ raise LocalJumpError, 'unable to verify due to no code block was given' unless block_given?
1345
1048
 
1346
- $logger.enabled = logging_enabled
1347
- $logger.behaviour "PASS;Verification #{message.nil? ? '' : '\"' << message << '\" '}at #{verify_caller} was successful#{timeout.nil? ? '' : ' using timeout ' + timeout.to_s}.;#{self.kind_of?(MobyBase::SUT) ? self.id.to_s + ';sut' : ';'};{};verify_equal;" << expected.to_s
1348
- return nil
1049
+ # convert timeout to integer, nil will be zero
1050
+ timeout = get_timeout( timeout )
1349
1051
 
1350
- end
1052
+ # verify that timeout is valid
1053
+ timeout.not_negative 'timeout value cannot be negative'
1351
1054
 
1352
- # Verifies that the block given to this method evaluates to true. Verification is synchronized with all connected suts.
1353
- # If this method is called for a sut, synchronization is only done with that sut.
1354
- #
1355
- # === params
1356
- # timeout:: (optional) Integer defining the amount of seconds during which the verification must pass.
1357
- # message:: (optional) A String that is displayed as additional information if the verification fails.
1358
- # === returns
1359
- # nil
1360
- # === raises
1361
- # ArgumentError:: message was not a String or timeout an integer, or no block was given.
1362
- # VerificationError:: The verification failed.
1363
- # RuntimeError:: An unexpected error was encountered during verification.
1364
- def verify_true( timeout = nil, message = nil, &block )
1055
+ # calculate the time when timeout exceeds
1056
+ timeout_end_time = Time.now + timeout
1365
1057
 
1366
- logging_enabled = $logger.enabled
1367
- verify_caller = caller(1).first.to_s
1058
+ # convert message to string, nil will be empty string
1059
+ message = message.to_s
1368
1060
 
1369
- begin
1370
- $logger.enabled = false
1371
- Kernel::raise ArgumentError.new("No block was given.") unless block_given?
1372
- Kernel::raise ArgumentError.new("Argument timeout was not an Integer.") unless timeout.nil? or timeout.kind_of?(Integer)
1373
- Kernel::raise ArgumentError.new("Argument message was not a String.") unless message.nil? or message.kind_of?(String)
1061
+ # add double quotation and trailing whitespace if not empty string
1062
+ message = "#{ message.inspect } " if message.length > 0
1374
1063
 
1375
- #Set the testobject timeout to 0 for the duration of the verify call
1376
- original_sync_timeout = MobyBase::TestObjectFactory.instance.timeout
1064
+ # set the testobject timeout to 0 for the duration of the verify call
1377
1065
  MobyBase::TestObjectFactory.instance.timeout = 0
1378
1066
 
1379
- timeout_time = get_end_time(timeout)
1380
- #TIMEOUT_CYCLE_SECONDS
1067
+ # result container
1068
+ result = nil
1381
1069
 
1382
1070
  loop do
1071
+
1072
+ begin
1073
+
1074
+ counter = ref_counter
1383
1075
 
1384
- counter = ref_counter
1385
-
1386
- begin # catch errors thrown due to verification results
1387
-
1388
-
1389
- begin # catch errors thrown in the provided block
1390
-
1391
- result = yield
1392
-
1393
- rescue Exception => e
1394
-
1395
- #@@on_error_verify_block.call unless @@on_error_verify_block.nil?
1396
-
1397
- raise if e.kind_of? MobyBase::ContinuousVerificationError
1398
-
1399
- error_msg = "Verification #{message.nil? ? '' : '"' << message.to_s << '" '}at #{verify_caller} failed as an exception was thrown when the verification block was executed."
1400
- error_msg << MobyUtil::KernelHelper.find_source(verify_caller)
1401
- error_msg << "\nDetails: "
1402
- error_msg << "\n" << e.inspect
1403
-
1404
- raise MobyBase::VerificationError.new( error_msg )
1405
-
1406
- end
1407
-
1408
- unless result == true
1409
-
1410
- error_msg = "Verification #{message.nil? ? '' : '"' << message.to_s << '" '}at #{verify_caller} failed."
1411
- error_msg << MobyUtil::KernelHelper.find_source(verify_caller)
1412
-
1413
- error_msg << "\nThe block did not return true. It returned: " << result.inspect
1414
-
1415
- raise MobyBase::VerificationError.new( error_msg )
1076
+ # execute code block
1077
+ result = yield
1416
1078
 
1417
- end
1079
+ # raise exception if result of yield does not match with expected value regexp
1080
+ raise MobyBase::VerificationError unless result =~ expected_value
1418
1081
 
1419
1082
  # break loop if no exceptions thrown
1420
1083
  break
1421
1084
 
1422
- rescue MobyBase::VerificationError => ve
1423
-
1424
- # refresh and retry unless timeout reached
1425
-
1426
- if ( Time.new > timeout_time )
1427
-
1428
- execute_on_error_verify_block unless @@on_error_verify_block.nil?
1429
-
1430
- Kernel::raise ve
1085
+ rescue
1431
1086
 
1432
- end
1087
+ raise if $!.kind_of?( MobyBase::ContinuousVerificationError )
1433
1088
 
1089
+ # refresh and retry unless timeout exceeded
1090
+ raise $! if Time.now > timeout_end_time
1091
+
1092
+ # retry interval
1434
1093
  sleep TIMEOUT_CYCLE_SECONDS
1435
1094
 
1095
+ # refresh suts
1436
1096
  refresh_suts if counter == ref_counter
1097
+
1098
+ end # begin
1099
+
1100
+ end # do loop
1101
+
1102
+ rescue
1437
1103
 
1438
- rescue Exception => e
1104
+ # restore logger state
1105
+ $logger.enabled = logging_enabled
1439
1106
 
1440
- raise if e.kind_of? MobyBase::ContinuousVerificationError
1107
+ # execute on verification error code block
1108
+ execute_on_error_verify_block unless @@on_error_verify_block.nil?
1441
1109
 
1442
- $logger.enabled = logging_enabled
1110
+ # process the exception
1111
+ if $!.kind_of?( MobyBase::ContinuousVerificationError )
1112
+
1113
+ raise
1114
+
1115
+ elsif $!.kind_of?( MobyBase::VerificationError )
1116
+
1117
+ error_message = "Verification #{ message }at #{ verify_caller } failed: #{ MobyUtil::KernelHelper.find_source( verify_caller ) }"
1118
+ error_message << "The return value of block did not match with #{ expected_value.inspect } pattern. Block returned: #{ result.inspect }"
1119
+
1120
+ else
1121
+
1122
+ error_message = "Verification #{ message }at #{ verify_caller } failed as an exception was thrown when the verification block was executed"
1123
+ error_message << "#{ MobyUtil::KernelHelper.find_source( verify_caller ) }\nDetails: \n#{ $!.inspect }"
1124
+
1125
+ end
1443
1126
 
1444
- # an unexpected error has occurred
1445
- Kernel::raise RuntimeError.new("An unexpected error was encountered during verification:\n" << e.inspect )
1127
+ $logger.behaviour "FAIL;Verification #{ message }failed: #{ $!.to_s }.\n #{ timeout.nil? ? '' : ' using timeout ' + timeout.to_s }.;#{ self.kind_of?( MobyBase::SUT ) ? self.id.to_s + ';sut' : ';' };{};verify_regexp;"
1446
1128
 
1447
- end # begin, catch any VerificationErrors
1129
+ # raise the exception
1130
+ raise MobyBase::VerificationError, error_message
1131
+
1132
+ ensure
1448
1133
 
1449
- end # do
1134
+ # restore original test object factory timeout value
1135
+ MobyBase::TestObjectFactory.instance.timeout = original_timeout_value
1450
1136
 
1451
- rescue Exception => e
1452
- raise if e.kind_of? MobyBase::ContinuousVerificationError
1137
+ # restore logger state
1453
1138
  $logger.enabled = logging_enabled
1454
- $logger.behaviour "FAIL;Verification #{message.nil? ? '' : '\"' << message << '\" '}failed:#{e.to_s}.\n#{timeout.nil? ? '' : ' using timeout ' + timeout.to_s}.;#{self.kind_of?(MobyBase::SUT) ? self.id.to_s + ';sut' : ';'};{};verify_true;"
1455
- Kernel::raise e
1456
- ensure
1457
- MobyBase::TestObjectFactory.instance.timeout = original_sync_timeout unless original_sync_timeout.nil?
1139
+
1458
1140
  end
1459
1141
 
1460
- $logger.enabled = logging_enabled
1461
- $logger.behaviour "PASS;Verification #{message.nil? ? '' : '\"' << message << '\" '}at #{verify_caller} was successful#{timeout.nil? ? '' : ' using timeout ' + timeout.to_s}.;#{self.kind_of?(MobyBase::SUT) ? self.id.to_s + ';sut' : ';'};{};verify_true;"
1462
- return nil
1142
+ $logger.behaviour "PASS;Verification #{ message }at #{ verify_caller } was successful#{ timeout.nil? ? '' : ' using timeout ' + timeout.to_s }.;#{ self.kind_of?( MobyBase::SUT ) ? self.id.to_s + ';sut' : ';' };{};verify_regexp;"
1463
1143
 
1144
+ nil
1145
+
1464
1146
  end
1465
1147
 
1466
- # Verifies that the block given to this method evaluates to false. Verification is synchronized with all connected suts.
1467
- # If this method is called for a sut, synchronization is only done with that sut.
1148
+ # Verifies that the given signal is emitted.
1468
1149
  #
1469
1150
  # === params
1470
- # timeout:: (optional) Integer defining the amount of seconds during which the verification must pass.
1151
+ # timeout:: Integer, defining the amount of seconds during which the verification must pass.
1152
+ # signal_name:: String, name of the signal
1471
1153
  # message:: (optional) A String that is displayed as additional information if the verification fails.
1154
+ # block:: code to execute while listening signals
1472
1155
  # === returns
1473
1156
  # nil
1474
1157
  # === raises
1475
- # ArgumentError:: message was not a String or timeout an integer, or no block was given.
1158
+ # ArgumentError:: message or signal_name was not a String or timeout a non negative Integer
1476
1159
  # VerificationError:: The verification failed.
1477
- # RuntimeError:: An unexpected error was encountered during verification.
1478
- def verify_false( timeout = nil, message = nil, &block )
1479
-
1480
- logging_enabled = $logger.enabled
1481
-
1482
- verify_caller = caller(1).first.to_s
1160
+ def verify_signal( timeout, signal_name, message = nil, &block )
1483
1161
 
1484
1162
  begin
1485
1163
 
1486
- $logger.enabled = false
1487
-
1488
- Kernel::raise ArgumentError.new("No block was given.") unless block_given?
1164
+ logging_enabled = $logger.enabled
1489
1165
 
1490
- Kernel::raise ArgumentError.new("Argument timeout was not an Integer.") unless timeout.nil? or timeout.kind_of?(Integer)
1491
- Kernel::raise ArgumentError.new("Argument message was not a String.") unless message.nil? or message.kind_of?(String)
1166
+ $logger.enabled = false
1492
1167
 
1493
- #Set the testobject timeout to 0 for the duration of the verify call
1494
- original_sync_timeout = MobyBase::TestObjectFactory.instance.timeout
1495
- MobyBase::TestObjectFactory.instance.timeout = 0
1168
+ # ensure that timeout is either nil or type of integer
1169
+ timeout.check_type Integer, 'wrong argument type $1 for timeout (expected $2)'
1496
1170
 
1497
- timeout_time = get_end_time(timeout)
1498
- #TIMEOUT_CYCLE_SECONDS
1171
+ # ensure that message is either nil or type of string
1172
+ message.check_type [ String, NilClass ], 'wrong argument type $1 for exception message (expected $2)'
1499
1173
 
1500
- loop do
1501
- counter = ref_counter
1502
- begin # catch errors thrown due to verification results
1503
-
1504
- begin # catch errors thrown in the provided block
1505
- result = yield
1506
- rescue Exception => e
1507
- raise if e.kind_of? MobyBase::ContinuousVerificationError
1508
- error_msg = "Verification #{message.nil? ? '' : '"' << message.to_s << '" '}at #{verify_caller} failed as an exception was thrown when the verification block was executed."
1509
- error_msg << MobyUtil::KernelHelper.find_source(verify_caller)
1510
- error_msg << "\nDetails: "
1511
- error_msg << "\n" << e.inspect
1512
- raise MobyBase::VerificationError.new(error_msg)
1513
- end
1174
+ # verify that block was given
1175
+ raise LocalJumpError, 'unable to verify due to no code block was given' unless block_given?
1514
1176
 
1515
- error_msg = "Verification #{message.nil? ? '' : '"' << message.to_s << '" '}at #{verify_caller} failed:"
1516
- error_msg << MobyUtil::KernelHelper.find_source(verify_caller)
1517
- error_msg << "The block did not return false. It returned: " << result.inspect
1518
- raise MobyBase::VerificationError.new(error_msg) unless result == false
1177
+ # verify that timeout is valid
1178
+ timeout.not_negative 'timeout value cannot be negative'
1519
1179
 
1520
- # break loop if no exceptions thrown
1521
- break
1522
-
1523
- rescue MobyBase::VerificationError => ve
1180
+ # convert message to string, nil will be empty string
1181
+ message = message.to_s
1524
1182
 
1525
- # refresh and retry unless timeout reached
1183
+ # add double quotation and trailing whitespace if not empty string
1184
+ message = "#{ message.inspect } " if message.length > 0
1526
1185
 
1527
- if Time.new > timeout_time
1528
- Kernel::raise ve
1529
- end
1186
+ verify_caller = caller(1).first.to_s
1530
1187
 
1531
- sleep TIMEOUT_CYCLE_SECONDS
1188
+ # wait for the signal
1189
+ begin
1532
1190
 
1533
- refresh_suts if counter == ref_counter
1191
+ self.wait_for_signal( timeout, signal_name, &block )
1534
1192
 
1193
+ rescue
1535
1194
 
1536
- rescue Exception => e
1537
- raise if e.kind_of? MobyBase::ContinuousVerificationError
1538
- # an unexpected error has occurred
1539
- $logger.enabled = logging_enabled
1540
- Kernel::raise RuntimeError.new("An unexpected error was encountered during verification:\n" << e.inspect )
1195
+ error_msg = "Verification #{ message }at #{ verify_caller } failed: #{ MobyUtil::KernelHelper.find_source(verify_caller) }"
1196
+ error_msg << "The signal #{ signal_name } was not emitted in #{ timeout } seconds.\nNested exception:\n#{ $!.inspect }"
1541
1197
 
1542
- end # begin, catch any VerificationErrors
1198
+ raise MobyBase::VerificationError, error_msg
1543
1199
 
1544
- end # do
1200
+ end
1545
1201
 
1546
- rescue Exception => e
1202
+ rescue
1547
1203
 
1548
1204
  execute_on_error_verify_block unless @@on_error_verify_block.nil?
1549
1205
 
1550
- raise if e.kind_of? MobyBase::ContinuousVerificationError
1551
-
1552
1206
  $logger.enabled = logging_enabled
1553
- $logger.behaviour "FAIL;Verification #{message.nil? ? '' : '\"' << message << '\" '}failed:#{e.to_s}.\n #{timeout.nil? ? '' : ' using timeout ' + timeout.to_s}.;#{self.kind_of?(MobyBase::SUT) ? self.id.to_s + ';sut' : ';'};{};verify_false;"
1554
1207
 
1555
- Kernel::raise e
1208
+ $logger.behaviour "FAIL;Verification #{ message }failed: #{ $!.to_s } using timeout '#{ timeout }.;#{ self.kind_of?(MobyBase::SUT) ? self.id.to_s + ';sut' : ';' };{};verify_signal;#{ signal_name }"
1209
+
1210
+ raise
1556
1211
 
1557
1212
  ensure
1558
- MobyBase::TestObjectFactory.instance.timeout = original_sync_timeout unless original_sync_timeout.nil?
1213
+
1214
+ $logger.enabled = logging_enabled
1215
+
1559
1216
  end
1560
1217
 
1561
- $logger.enabled = logging_enabled
1562
- $logger.behaviour "PASS;Verification #{message.nil? ? '' : '\"' << message << '\" '}at #{verify_caller} was successful#{timeout.nil? ? '' : ' using timeout ' + timeout.to_s}.;#{self.kind_of?(MobyBase::SUT) ? self.id.to_s + ';sut' : ';'};{};verify_false;"
1563
- return nil
1218
+ $logger.behaviour "PASS;Verification #{ message }at #{ verify_caller } was successful#{ timeout.nil? ? '' : ' using timeout ' + timeout.to_s }.;#{ self.kind_of?( MobyBase::SUT ) ? self.id.to_s + ';sut' : ';' };{};verify_signal;#{ signal_name }"
1219
+
1220
+ nil
1564
1221
 
1565
1222
  end
1566
-
1567
- =end
1568
1223
 
1569
1224
  private
1570
1225
 
@@ -1572,11 +1227,11 @@ module TDriverVerify
1572
1227
 
1573
1228
  if self.kind_of?( MobyBase::SUT )
1574
1229
 
1575
- Time.new + ( timeout.nil? ? $parameters[ self.sut ][ :synchronization_timeout, '10' ].to_i : timeout.to_i )
1230
+ Time.now + ( timeout.nil? ? $parameters[ self.sut ][ :synchronization_timeout, '10' ].to_i : timeout.to_i )
1576
1231
 
1577
1232
  else
1578
1233
 
1579
- Time.new + ( timeout.nil? ? $parameters[ :synchronization_timeout, '10' ].to_i : timeout.to_i )
1234
+ Time.now + ( timeout.nil? ? $parameters[ :synchronization_timeout, '10' ].to_i : timeout.to_i )
1580
1235
 
1581
1236
  end
1582
1237
 
@@ -1584,15 +1239,19 @@ module TDriverVerify
1584
1239
 
1585
1240
  def get_timeout( timeout )
1586
1241
 
1587
- if self.kind_of?( MobyBase::SUT )
1242
+ #if timeout.nil?
1243
+
1244
+ if self.kind_of?( MobyBase::SUT )
1588
1245
 
1589
- timeout = $parameters[ self.sut ][ :synchronization_timeout, '10' ].to_i if timeout.nil?
1246
+ timeout = $parameters[ self.sut ][ :synchronization_timeout, '10' ].to_i if timeout.nil?
1590
1247
 
1591
- else
1248
+ else
1592
1249
 
1593
- timeout = $parameters[ :synchronization_timeout, '10' ].to_i if timeout.nil?
1250
+ timeout = $parameters[ :synchronization_timeout, '10' ].to_i if timeout.nil?
1594
1251
 
1595
- end
1252
+ end
1253
+
1254
+ #end
1596
1255
 
1597
1256
  timeout.to_i
1598
1257