# frozen_string_literal: true module Cucumber module Gherkin module Formatter # Defines aliases for ANSI coloured output. Default colours can be overridden by defining # a GHERKIN_COLORS variable in your shell, very much like how you can # tweak the familiar POSIX command ls with # $LSCOLORS: http://linux-sxs.org/housekeeping/lscolors.html # # The colours that you can change are: # # undefined:: defaults to yellow # pending:: defaults to yellow # pending_arg:: defaults to yellow,bold # executing:: defaults to grey # executing_arg:: defaults to grey,bold # failed:: defaults to red # failed_arg:: defaults to red,bold # passed:: defaults to green # passed_arg:: defaults to green,bold # outline:: defaults to cyan # outline_arg:: defaults to cyan,bold # skipped:: defaults to cyan # skipped_arg:: defaults to cyan,bold # comment:: defaults to grey # tag:: defaults to cyan # # For instance, if your shell has a black background and a green font (like the # "Homebrew" settings for OS X' Terminal.app), you may want to override passed # steps to be white instead of green. Examples: # # export GHERKIN_COLORS="passed=white" # export GHERKIN_COLORS="passed=white,bold:passed_arg=white,bold,underline" # # (If you're on Windows, use SET instead of export). # To see what colours and effects are available, just run this in your shell: # # ruby -e "require 'rubygems'; require 'term/ansicolor'; puts Term::ANSIColor.attributes" # # Although not listed, you can also use grey module AnsiEscapes COLORS = { 'black' => "\e[30m", 'red' => "\e[31m", 'green' => "\e[32m", 'yellow' => "\e[33m", 'blue' => "\e[34m", 'magenta' => "\e[35m", 'cyan' => "\e[36m", 'white' => "\e[37m", 'grey' => "\e[90m", 'bold' => "\e[1m" }.freeze ALIASES = Hash.new do |h, k| h[Regexp.last_match(1)] + ',bold' if k.to_s =~ /(.*)_arg/ end.merge( 'undefined' => 'yellow', 'pending' => 'yellow', 'executing' => 'grey', 'failed' => 'red', 'passed' => 'green', 'outline' => 'cyan', 'skipped' => 'cyan', 'comments' => 'grey', 'tag' => 'cyan' ) if ENV['GHERKIN_COLORS'] # Example: export GHERKIN_COLORS="passed=red:failed=yellow" ENV['GHERKIN_COLORS'].split(':').each do |pair| a = pair.split('=') ALIASES[a[0]] = a[1] end end ALIASES.keys.each do |key| define_method(key) do ALIASES[key].split(',').map { |color| COLORS[color] }.join('') end define_method("#{key}_arg") do ALIASES["#{key}_arg"].split(',').map { |color| COLORS[color] }.join('') end end def reset "\e[0m" end def up(n) "\e[#{n}A" end end end end end