File: broadcast_backend_spec.cr

package info (click to toggle)
crystal 1.14.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 24,384 kB
  • sloc: javascript: 6,400; sh: 695; makefile: 269; ansic: 121; python: 105; cpp: 77; xml: 32
file content (84 lines) | stat: -rw-r--r-- 2,097 bytes parent folder | download | duplicates (2)
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
require "spec"
require "log"

private def s(value : Log::Severity)
  value
end

describe Log::BroadcastBackend do
  it "writes to the backend based on level" do
    main = Log::BroadcastBackend.new
    backend_a = Log::MemoryBackend.new
    backend_b = Log::MemoryBackend.new

    main.append(backend_a, s(:info))
    main.append(backend_b, s(:error))

    debug_entry = Log::Entry.new("", s(:debug), "", Log::Metadata.empty, nil)
    info_entry = Log::Entry.new("", s(:info), "", Log::Metadata.empty, nil)
    error_entry = Log::Entry.new("", s(:error), "", Log::Metadata.empty, nil)

    main.write debug_entry
    main.write info_entry
    main.write error_entry

    backend_a.entries.should eq([info_entry, error_entry])
    backend_b.entries.should eq([error_entry])
  end

  it "overwriting log level overwrites to all backends" do
    main = Log::BroadcastBackend.new
    backend_a = Log::MemoryBackend.new
    backend_b = Log::MemoryBackend.new

    main.append(backend_a, s(:info))
    main.append(backend_b, s(:error))

    log = Log.new("", main, s(:info))
    log.level = s(:info)

    log.info { "lorem" }

    backend_a.entries.should_not be_empty
    backend_b.entries.should_not be_empty

    backend_a.entries.clear
    backend_b.entries.clear

    log.debug { "lorem" }

    backend_a.entries.should be_empty
    backend_b.entries.should be_empty

    backend_a.entries.clear
    backend_b.entries.clear

    main.level = nil
    log.info { "lorem" }

    backend_a.entries.should_not be_empty
    backend_b.entries.should be_empty
  end

  describe "#min_level" do
    it "on empty" do
      main = Log::BroadcastBackend.new
      main.min_level.should eq(s(:none))
    end

    it "single backend" do
      main = Log::BroadcastBackend.new
      main.append(Log::MemoryBackend.new, s(:warn))

      main.min_level.should eq(s(:warn))
    end

    it "multiple backends" do
      main = Log::BroadcastBackend.new
      main.append(Log::MemoryBackend.new, s(:info))
      main.append(Log::MemoryBackend.new, s(:warn))

      main.min_level.should eq(s(:info))
    end
  end
end