require 'tempfile' module Loggr module Lint # == Adapter and Logger Lint Tests # # You can test whether an object provides a compliant adapter and logger # by including Logger::Lint::Tests # in your tests. # # Ensure you set the instance variable @adapter to the adapter to lint. # module Tests # Verifies `adapter#logger`, it checks that: # # - the factory method named #logger exists # - that it accepts two arguments, name and options hash # - the returned instnace responds to debug, info, warn, error and fatal # - responds to tagged and mapped # def test_adapter_logger assert adapter.respond_to?(:logger), "The adapter should respond to #logger" assert adapter.method('logger').arity == -2, "The adapter should accept two parameters for #logger, name and options hash" @tempfile = Tempfile.new('lint') logger = adapter.logger('lint', :to => @tempfile.path) %w{debug info warn error fatal}.each do |level| assert logger.respond_to?(level), "The logger should respond to ##{level}" #assert logger.respond_to?("#{level}?"), "The logger should respond to ##{level}?" end assert logger.respond_to?(:tagged), "The logger should respond to #tagged" assert logger.respond_to?(:mapped), "The logger should respond to #mapped" ensure @tempfile.unlink if @tempfile end # Verifies `adapter#mdc`, it checks that: # # - the factory method named #mdc exists # - it accepts no arguments # - the returned mdc responds to []=, [], delete, clear and to_hash # def test_adapter_mdc assert adapter.respond_to?(:mdc), "The adapter should respond to #mdc" assert adapter.method('mdc').arity == 0, "The adapter should accept no parameters for #mdc" mdc = adapter.mdc assert mdc.respond_to?(:[]=), "The mdc should respond to #[]=" assert mdc.respond_to?(:[]), "The mdc should respond to #[]" assert mdc.respond_to?(:delete), "The mdc should respond to #delete" assert mdc.respond_to?(:clear), "The mdc should respond to #clear" assert mdc.respond_to?(:to_hash), "The mdc should respond to #to_hash" end protected # Access the adapter, must be defined @adapter in the # `setup` method. def adapter assert !!@adapter, "An adapter must be defined" @adapter end end end end