# encoding: utf-8 # # This file is part of the bovem gem. Copyright (C) 2012 and above Shogun . # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php. # require "spec_helper" describe Bovem::Logger do describe ".create" do it("should create a new default logger") do logger = ::Bovem::Logger.create expect(logger.device).to eq(::Bovem::Logger.default_file) expect(logger.level).to eq(::Logger::INFO) expect(logger.formatter).to eq(::Bovem::Logger.default_formatter) end it("should create a logger with a custom file and level") do logger = ::Bovem::Logger.create("/dev/null", ::Logger::WARN) expect(logger.device).to eq("/dev/null") expect(logger.level).to eq(::Logger::WARN) expect(logger.formatter).to eq(::Bovem::Logger.default_formatter) end it("should create a logger with a custom formatter") do formatter = Proc.new {|severity, datetime, progname, msg| msg } logger = ::Bovem::Logger.create("/dev/null", ::Logger::WARN, formatter) expect(logger.device).to eq("/dev/null") expect(logger.level).to eq(::Logger::WARN) expect(logger.formatter).to eq(formatter) end it("should raise exceptions for invalid files") do expect { ::Bovem::Logger.create("/invalid/file") }.to raise_error(::Bovem::Errors::InvalidLogger) end end describe ".default_formatter" do let(:output) { ::StringIO.new } let(:logger) { ::Bovem::Logger.create(output, Logger::DEBUG) } def get_last_line(buffer) buffer.string.split("\n").last.strip.gsub(/ T\+\d+\.\d+/, "") end it "should correctly format a DEBUG message" do logger.debug("Message.") expect(get_last_line(output)).to eq("\e[1m\e[36m[#{::Time.now.strftime("%Y/%b/%d %H:%M:%S")}] DEBUG:\e[0m Message.") end it "should correctly format a INFO message" do logger.info("Message.") expect(get_last_line(output)).to eq("\e[1m\e[32m[#{::Time.now.strftime("%Y/%b/%d %H:%M:%S")}] INFO:\e[0m Message.") end it "should correctly format a WARN message" do logger.warn("Message.") expect(get_last_line(output)).to eq("\e[1m\e[33m[#{::Time.now.strftime("%Y/%b/%d %H:%M:%S")}] WARN:\e[0m Message.") end it "should correctly format a ERROR message" do logger.error("Message.") expect(get_last_line(output)).to eq("\e[1m\e[31m[#{::Time.now.strftime("%Y/%b/%d %H:%M:%S")}] ERROR:\e[0m Message.") end it "should correctly format a FATAL message" do logger.fatal("Message.") expect(get_last_line(output)).to eq("\e[1m\e[35m[#{::Time.now.strftime("%Y/%b/%d %H:%M:%S")}] FATAL:\e[0m Message.") end it "should correctly format a INVALID message" do logger.log(::Logger::UNKNOWN, "Message.") expect(get_last_line(output)).to eq("\e[1m\e[37m[#{::Time.now.strftime("%Y/%b/%d %H:%M:%S")}] ANY:\e[0m Message.") end end describe ".get_real_file" do it("should return the standard ouput") do expect(::Bovem::Logger.get_real_file("STDOUT")).to eq($stdout ) end it("should return the standard error") do expect(::Bovem::Logger.get_real_file("STDERR")).to eq($stderr ) end it("should return the file") do expect(::Bovem::Logger.get_real_file("/dev/null")).to eq("/dev/null" ) end end describe ".default_file" do it("should return the standard output") do expect(::Bovem::Logger.default_file).to eq($stdout) end end end