File: testoutputter.rb

package info (click to toggle)
ruby-log4r 1.1.10-4.1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, sid, trixie
  • size: 648 kB
  • sloc: ruby: 2,744; xml: 96; makefile: 5
file content (143 lines) | stat: -rw-r--r-- 5,234 bytes parent folder | download | duplicates (3)
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# encoding: utf-8
require 'test_helper'

class TestOutputter < TestCase
  include Log4r

  def test_validation
    assert_raise(ArgumentError) { Outputter.new }
    assert_raise(ArgumentError) { Outputter.new 'fonda', :level=>-10}
    assert_raise(TypeError) { Outputter.new 'fonda', :formatter=>-10}
  end
  def test_io
    assert_nothing_raised {
      IOOutputter.new('foo3', $stdout)
      IOOutputter.new('foo4', $stderr)
    }
    f = File.new("junk/tmpx.log", "w")
    o = IOOutputter.new('asdf', f)
    o.close
    assert(f.closed? == true)
    assert(o.level == OFF)
  end
  def test_repository
    assert( Outputter['foo3'].class == IOOutputter )
    assert( Outputter['foo4'].class == IOOutputter )
    assert( Outputter['asdf'].class == IOOutputter )
  end
  def test_validation_and_creation
    assert_nothing_raised {
      StdoutOutputter.new('out', 'level'=>DEBUG)
      FileOutputter.new('file', 'filename'=>'junk/test', :trunc=>true)
    }
    a = StdoutOutputter.new 'out2'
    assert(a.level == Logger.root.level)
    assert(a.formatter.class == DefaultFormatter)
    b = StdoutOutputter.new('ook', :level => DEBUG, :formatter => Formatter)
    assert(b.level == DEBUG)
    assert(b.formatter.class == Formatter)
    c = StdoutOutputter.new('akk', :formatter => Formatter)
    assert(c.level == Logger.root.level)
    assert(c.formatter.class == Formatter)
    c = StderrOutputter.new('iikk', :level => OFF)
    assert(c.level == OFF)
    assert(c.formatter.class == DefaultFormatter)
    o = StderrOutputter.new 'ik'
    assert_nothing_raised(TypeError) { o.formatter = DefaultFormatter }
    assert(o.formatter.class == DefaultFormatter)
  end
  # test the resource= bounds
  def test_boundaries
    o = StderrOutputter.new('ak', :formatter => Formatter)
    assert_raise(TypeError) { o.formatter = nil }
    assert_raise(TypeError) { o.formatter = String }
    assert_raise(TypeError) { o.formatter = "bogus" }
    assert_raise(TypeError) { o.formatter = -3 }
    # the formatter should be preserved
    assert(o.formatter.class == Formatter)
  end
  def test_file
    assert_raise(TypeError) { FileOutputter.new 'f' }
    assert_raise(TypeError) { FileOutputter.new('fa', :filename => DEBUG) }
    assert_raise(TypeError) { FileOutputter.new('fo', :filename => nil) }
    assert_nothing_raised {
      FileOutputter.new('fi', :filename => './junk/tmp')
      FileOutputter.new('fum', :filename=>'./junk/tmp', :trunc => "true")
    }
    fo = FileOutputter.new('food', :filename => './junk/tmp', :trunc => false)
    assert(fo.trunc == false)
    assert(fo.filename == './junk/tmp')
    assert(fo.closed? == false)
    fo.close
    assert(fo.closed? == true)
    assert(fo.level == OFF)
  end
  # test the dynamic definition of outputter log messages
  def test_log_methods
    o = StderrOutputter.new('so1', :level => WARN )
    # test to see if all of the methods are defined
    for mname in LNAMES
      next if mname == 'OFF' || mname == 'ALL'
      assert_respond_to(o, mname.downcase.to_sym, "Test respond to #{mname.to_s}")
    end
    return # cuz the rest is borked
    # we rely on BasicFormatter's inability to reference a nil Logger to test
    # the log methods. Everything from WARN to FATAL should choke.
    event = LogEvent.new(nil, nil, nil, nil)
    assert_nothing_raised { o.debug event }
    assert_nothing_raised { o.info event }
    assert_raise(NameError) { o.warn event }
    assert_raise(NameError) { o.error event }
    assert_raise(NameError) { o.fatal event }
    # now let's dynamically change the level and repeat
    o.level = ERROR
    assert_nothing_raised { o.debug event}
    assert_nothing_raised { o.info event}
    assert_nothing_raised { o.warn event}
    assert_raise(NameError) { o.error event}
    assert_raise(NameError) { o.fatal event}
  end
  def test_only_at_validation
    o = StdoutOutputter.new 'so2'
    assert_raise(ArgumentError) { o.only_at }
    assert_raise(ArgumentError) { o.only_at ALL }
    assert_raise(TypeError) { o.only_at OFF }
    assert_nothing_raised { o.only_at DEBUG, ERROR }
    return # cuz the rest is borked
    # test the methods as before
    event = LogEvent.new(nil,nil,nil,nil)
    assert_raise(NameError) { o.debug event}
    assert_raise(NameError) { o.error event}
    assert_nothing_raised { o.warn event}
    assert_nothing_raised { o.info event}
    assert_nothing_raised { o.fatal event}
  end
  if defined?( Encoding )
    # tests that files are opened in binary mode
    def test_file_encoding
      Encoding.default_internal = Encoding::UTF_8
      File.open( './junk/tmp2', 'w' ) { |f| f.write( 'scheiß encoding' ) }
      fenc = FileOutputter.new('fenc', :filename => './junk/tmp2')
      event = LogEvent.new(1, Logger.root, nil, 'scheiß encoding'.force_encoding('ASCII-8BIT'))
      assert_nothing_raised(Encoding::UndefinedConversionError) do
        fenc.debug event
      end
    end
  end
  def broken_test_threading
    class << self
      def log_work
	o = StdoutOutputter.new 'so2'
	assert_nothing_raised { o.only_at DEBUG, ERROR }
	Thread.current().exit()
      end
      def log_thread_start
	t = Thread.new(log_work)
	t.join
      end
    end

    ts = Thread.new(log_thread_start)
    ts.join
  end
end