spec/loggability/formatter_spec.rb in loggability-0.14.0 vs spec/loggability/formatter_spec.rb in loggability-0.15.0.pre20190714094638
- old
+ new
@@ -1,53 +1,66 @@
-# -*- rspec -*-
+# -*- ruby -*-
+# vim: set nosta noet ts=4 sw=4:
+# frozen_string_literal: true
require_relative '../helpers'
-require 'tempfile'
-require 'rspec'
-
-require 'loggability/logger'
require 'loggability/formatter'
-require 'loggability/formatter/default'
describe Loggability::Formatter do
- it "formats messages with the pattern it's constructed with" do
- formatter = described_class.new( '[%5$s] %7$s' )
- result = formatter.call( 'INFO', Time.at(1336286481), nil, 'Foom.' )
- expect( result ).to match(/\[INFO\] Foom./i)
+ before( :all ) do
+ @actual_derivatives = described_class.derivatives.dup
end
+ after( :all ) do
+ described_class.derivatives.replace( @actual_derivatives )
+ end
- it "formats exceptions into useful messages" do
- formatter = described_class.new( '[%5$s] %7$s' )
- msg = nil
- begin
- raise ArgumentError, "invalid argument"
- rescue => err
- msg = formatter.call( 'INFO', Time.at(1336286481), nil, err )
+ describe "concrete subclasses" do
+
+ class Test < described_class
end
- expect( msg ).to match(/\[INFO\] ArgumentError: invalid argument/i)
- end
+ it "must implement #call" do
+ expect {
+ Test.new.call( 'INFO', Time.now, nil, "A message." )
+ }.to raise_error( /doesn't implement required method/i )
+ end
- it "formats regular objects into useful messages" do
- formatter = described_class.new( '[%5$s] %7$s' )
- result = formatter.call( 'INFO', Time.at(1336286481), nil, Object.new )
- expect( result ).to match(/\[INFO\] #<Object:0x[[:xdigit:]]+>/i)
- end
+ it "is tracked by the base class" do
+ expect( described_class.derivatives ).to include( test: Test )
+ end
- it "includes the thread ID if logging from a thread other than the main thread" do
- formatter = described_class.new( '%4$d' )
- thr = Thread.new do
- formatter.call( 'INFO', Time.now, nil, 'Foom.' )
+ it "is tracked if its anonymous" do
+ subclass = Class.new( described_class )
+ expect( described_class.derivatives.values ).to include( subclass )
end
- expect( thr.value ).to eq( thr.object_id.to_s )
+
+
+ it "can be loaded by name" do
+ expect( described_class ).to receive( :require ).
+ with( "loggability/formatter/test" )
+
+ expect( described_class.create(:test) ).to be_an_instance_of( Test )
+ end
+
+
+ it "raises a LoadError if loading doesn't work" do
+ expect( described_class ).to receive( :require ).
+ with( "loggability/formatter/circus" )
+
+ expect {
+ described_class.create( :circus )
+ }.to raise_error( LoadError, /didn't load a class/i )
+ end
+
+
end
end