diff options
Diffstat (limited to 'spec/mspec/lib/mspec/matchers/block_caller.rb')
-rw-r--r-- | spec/mspec/lib/mspec/matchers/block_caller.rb | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/spec/mspec/lib/mspec/matchers/block_caller.rb b/spec/mspec/lib/mspec/matchers/block_caller.rb new file mode 100644 index 0000000000..5451950712 --- /dev/null +++ b/spec/mspec/lib/mspec/matchers/block_caller.rb @@ -0,0 +1,35 @@ +class BlockingMatcher + def matches?(block) + started = false + blocking = true + + thread = Thread.new do + started = true + block.call + + blocking = false + end + + while !started and status = thread.status and status != "sleep" + Thread.pass + end + thread.kill + thread.join + + blocking + end + + def failure_message + ['Expected the given Proc', 'to block the caller'] + end + + def negative_failure_message + ['Expected the given Proc', 'to not block the caller'] + end +end + +class Object + def block_caller(timeout = 0.1) + BlockingMatcher.new + end +end |