Sha256: af950f362df630f602c6f107e2198d1224e7c27079c4590aaa0baa2112a92f9d

Contents?: true

Size: 1.65 KB

Versions: 2

Compression:

Stored size: 1.65 KB

Contents

require "minitest/colorize/version"
require "minitest/unit"

module MiniTest
  class Colorize
    attr_accessor :stream

    def initialize(stream = $stdout)
      self.stream = stream.tap do |stream|
        stream.sync = true if stream.respond_to?(:sync=)
      end
    end

    def print(string = nil)
      return stream.print if string.nil?

      case string
      when 'E', 'F'
        stream.print red(string)
      when 'S'
        stream.print yellow(string)
      when '.'
        stream.print green(string)
      else
        stream.print string
      end

      unless report.empty?
        stream.puts
        stream.puts
        stream.puts report.shift
        stream.puts
      end
    end

    def puts(string = nil)
      return stream.puts if string.nil?

      if string =~ /(\d+) tests, (\d+) assertions, (\d+) failures, (\d+) errors, (\d+) skips/
        if $3 != '0' || $4 != '0'
          stream.puts red(string)
        elsif $5 != '0'
          stream.puts yellow(string)
        else
          stream.puts green(string)
        end
      else
        stream.puts string
      end
    end

    def method_missing(method, *args, &block)
      stream.send(method, *args, &block)
    end

    protected

    def color_enabled?
      stream.tty?
    end

    def tint(color, string)
      if color_enabled?
        "\e[#{color}m#{string}\e[0m"
      else
        string
      end
    end

    def red(string)
      tint(31, string)
    end

    def green(string)
      tint(32, string)
    end

    def yellow(string)
      tint(33, string)
    end

    def report
      MiniTest::Unit.runner.report
    end
  end
end

MiniTest::Unit.output = MiniTest::Colorize.new

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
minitest-colorize-0.0.5 lib/minitest/colorize.rb
minitest-colorize-0.0.4 lib/minitest/colorize.rb