spec/loggability/logger_spec.rb in loggability-0.15.1 vs spec/loggability/logger_spec.rb in loggability-0.16.0

- old
+ new

@@ -104,31 +104,35 @@ it "defaults to :warn level" do expect( logger.level ).to eq( :warn ) end + it "defaults to :debug level when $DEBUG is true" do begin $DEBUG = true expect( described_class.new.level ).to eq( :debug ) ensure $DEBUG = false end end + it "allows its levels to be set with integers like Logger" do newlevel = Logger::DEBUG $stderr.puts "Setting newlevel to %p" % [ newlevel ] logger.level = newlevel expect( logger.level ).to eq( :debug ) end + it "allows its levels to be set with Symbolic level names" do logger.level = :info expect( logger.level ).to eq( :info ) end + it "allows its levels to be set with Stringish level names" do logger.level = 'fatal' expect( logger.level ).to eq( :fatal ) end @@ -139,46 +143,78 @@ it "logs to STDERR by default" do expect( logger.logdev.dev ).to be( $stderr ) end + it "can be told to log to a file" do tmpfile = Tempfile.new( 'loggability-device-spec' ) logger.output_to( tmpfile.path ) expect( logger.logdev.dev ).to be_a( File ) end + it "supports log-rotation arguments for logfiles" do tmpfile = Tempfile.new( 'loggability-device-spec' ) logger.output_to( tmpfile.path, 5, 125000 ) expect( logger.logdev.dev ).to be_a( File ) expect( logger.logdev.filename ).to eq( tmpfile.path ) expect( logger.logdev.instance_variable_get(:@shift_age) ).to eq( 5 ) expect( logger.logdev.instance_variable_get(:@shift_size) ).to eq( 125000 ) end + + it "can be told to log to a file and delegate to ruby's built-in logger log device" do + logfile = double( "logfile.log" ) + expect( Loggability::LogDevice ).to receive( :create ). + with( :file, 'log_file.log' ). + and_return( logfile ) + + logfile = Loggability::LogDevice.create( :file, 'log_file.log' ) + expect( logger ).to receive( :output_to ). + with( logfile ). + and_return( nil ) + + logger.output_to( logfile ) + + expect( logger.logdev ).to be_a( Logger::LogDevice ) + end + + + it "can be told to log to a custom log device type" do + logger.output_to( :http, 'https://logapi.example.com:41133/v1/logintake' ) + + device = logger.logdev + + expect( device ).to be_a( Loggability::LogDevice::Http ) + expect( device.endpoint.to_s ).to eq( 'https://logapi.example.com:41133/v1/logintake' ) + end + + it "can be told to log to an Array" do logmessages = [] logger.output_to( logmessages ) - expect( logger.logdev ).to be_a( Loggability::Logger::AppendingLogDevice ) + expect( logger.logdev ).to be_a( Loggability::LogDevice::Appending ) logger.level = :debug logger.info( "Something happened." ) expect( logmessages.size ).to eq( 1 ) expect( logmessages.first ).to match( /something happened/i ) end + it "doesn't re-wrap a Logger::LogDevice" do tmpfile = Tempfile.new( 'loggability-device-spec' ) logger.output_to( tmpfile.path, 5, 125000 ) original_logdev = logger.logdev logger.output_to( original_logdev ) expect( logger.logdev ).to be( original_logdev ) end - it "doesn't re-wrap an AppendingLogDevice" do + + it "doesn't re-wrap an Appending log device" do log_array = [] logger.output_to( log_array ) logger.output_to( logger.logdev ) expect( logger.logdev.target ).to be( log_array ) @@ -191,28 +227,32 @@ it "logs with the default formatter by default" do expect( logger.formatter ).to be_a( Loggability::Formatter::Default ) end + it "can be told to use the default formatter explicitly" do logger.format_as( :default ) expect( logger.formatter ).to be_a( Loggability::Formatter::Default ) end + it "can be told to use a block as a formatter" do logger.format_with do |severity, datetime, progname, msg| original_formatter.call(severity, datetime, progname, msg.dump) end expect( logger.formatter ).to be_a( Proc ) end + it "can be told to use the HTML formatter" do logger.format_as( :html ) expect( logger.formatter ).to be_a( Loggability::Formatter::HTML ) end + it "supports formatting with ::Logger::Formatter, too" do output = [] logger.output_to( output ) logger.level = :debug logger.formatter = ::Logger::Formatter.new @@ -241,9 +281,10 @@ proxy.fatal( "A fatal message." ) expected_format = /DEBUG \{Object:0x[[:xdigit:]]+\} -- A debug message.\n/i expect( messages.first ).to match( expected_format ) end + it "has a terse inspection format" do object = Object.new expect( logger.proxy_for( object ).inspect