File: crash_checking.rb

package info (click to toggle)
ruby-celluloid 0.18.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 848 kB
  • sloc: ruby: 7,579; makefile: 10
file content (68 lines) | stat: -rw-r--r-- 1,354 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
module Specs
  class FakeLogger
    class << self
      def current
        allowed_logger.first
      end

      attr_accessor :allowed_logger
    end

    def initialize(real_logger, example)
      @mutex = Mutex.new
      @real_logger = real_logger
      @crashes = Queue.new
      @details = nil
      @example = example
      self.class.allowed_logger = [self, example]
    end

    def crash(*args)
      check
      raise "Testing block has already ended!" if @details
      @crashes << [args, caller.dup]
    end

    def debug(*args)
      check
      @real_logger.debug(*args)
    end

    def warn(*args)
      check
      @real_logger.warn(*args)
    end

    def with_backtrace(_backtrace)
      check
      yield self
    end

    def crashes
      check
      @mutex.synchronize do
        return @details if @details
        @details = []
        @details << @crashes.pop until @crashes.empty?
        @crashes = nil
        @details
      end
    end

    def crashes?
      check
      !crashes.empty?
    end

    private

    def check
      return if self.class.allowed_logger.first == self

      raise "Incorrect logger used:"\
        " active/allowed: \n#{clas.allowed_logger.inspect},\n"\
        " actual/self: \n#{[self, @example].inspect}\n"\
        " (maybe an actor from another test is still running?)"
    end
  end
end