Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
PATH
remote: .
specs:
cli-ui (2.3.0)
cli-ui (2.3.1)

GEM
remote: https://rubygems.org/
Expand All @@ -14,7 +14,6 @@ GEM
docile (1.4.0)
erubi (1.13.0)
json (2.9.1)
json (2.9.1-java)
language_server-protocol (3.17.0.4)
method_source (1.1.0)
minitest (5.25.4)
Expand All @@ -32,7 +31,6 @@ GEM
racc
prism (1.2.0)
racc (1.8.1)
racc (1.8.1-java)
rainbow (3.1.1)
rake (13.2.1)
rbi (0.2.1)
Expand Down Expand Up @@ -68,7 +66,6 @@ GEM
sorbet (0.5.11781)
sorbet-static (= 0.5.11781)
sorbet-runtime (0.5.11781)
sorbet-static (0.5.11781-java)
sorbet-static (0.5.11781-universal-darwin)
sorbet-static (0.5.11781-x86_64-linux)
sorbet-static-and-runtime (0.5.11781)
Expand Down
1 change: 1 addition & 0 deletions lib/cli/ui/color.rb
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ def initialize(sgr, name)
reset: RESET,
bold: BOLD,
gray: GRAY,
orange: ORANGE,
}.freeze

class InvalidColorName < ArgumentError
Expand Down
1 change: 1 addition & 0 deletions lib/cli/ui/formatter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class Formatter
'magenta' => '35',
'cyan' => '36',
'gray' => '38;5;244',
'orange' => '38;5;214',
'white' => '97',
'bold' => '1',
'italic' => '3',
Expand Down
18 changes: 15 additions & 3 deletions test/cli/ui/color_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,30 @@ def test_colors
assert_equal("\x1b[0m", Color::RESET.code)
assert_equal("\x1b[1m", Color::BOLD.code)
assert_equal("\x1b[97m", Color::WHITE.code)
assert_equal("\x1b[38;5;244m", Color::GRAY.code)
assert_equal("\x1b[38;5;214m", Color::ORANGE.code)

assert_equal('36', Color::CYAN.sgr)
assert_equal(:bold, Color::BOLD.name)

assert_equal(Color::BLUE, Color.lookup(:blue))
assert_equal(Color::RESET, Color.lookup(:reset))

assert_raises(Color::InvalidColorName) do
Color.lookup(:foobar)
end
end

def test_all_colors_lookup
Color.available.each do |color_name|
# rubocop:disable Sorbet/ConstantsFromStrings
color_constant = Color.const_get(color_name.to_s.upcase)
# rubocop:enable Sorbet/ConstantsFromStrings
lookup_result = Color.lookup(color_name)

assert_equal(color_constant, lookup_result, "Color lookup failed for #{color_name}")
assert_equal(color_name, lookup_result.name, "Color name mismatch for #{color_name}")
assert_instance_of(Color, lookup_result, "Lookup result is not a Color instance for #{color_name}")
end
end

def test_useful_exception
e = begin
Color.lookup(:foobar)
Expand Down
11 changes: 11 additions & 0 deletions test/cli/ui/formatter_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,17 @@ def test_reset_after_glyph
actual = CLI::UI::Formatter.new(input).format
assert_equal(expected, actual)
end

def test_formatter_with_all_colors
CLI::UI::Color.available.each do |color_name|
input = "test {{#{color_name}:this is #{color_name} text}}"
color = CLI::UI::Color.lookup(color_name)
expected = "\e[0mtest \e[0;#{color.sgr}mthis is #{color_name} text\e[0m"

actual = CLI::UI::Formatter.new(input).format
assert_equal(expected, actual, "Color #{color_name} did not format correctly")
end
end
end
end
end
40 changes: 18 additions & 22 deletions test/cli/ui/glyph_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,8 @@ def test_glyphs
assert_equal("\x1b[31m✗\x1b[0m", Glyph::X.to_s)
assert_equal("\x1b[97m🐛\x1b[0m", Glyph::BUG.to_s)
assert_equal("\x1b[33m»\x1b[0m", Glyph::CHEVRON.to_s)

assert_equal(Glyph::STAR, Glyph.lookup('*'))
assert_equal(Glyph::INFO, Glyph.lookup('i'))
assert_equal(Glyph::QUESTION, Glyph.lookup('?'))
assert_equal(Glyph::CHECK, Glyph.lookup('v'))
assert_equal(Glyph::X, Glyph.lookup('x'))
assert_equal(Glyph::BUG, Glyph.lookup('b'))
assert_equal(Glyph::CHEVRON, Glyph.lookup('>'))

assert_raises(Glyph::InvalidGlyphHandle) do
Glyph.lookup('$')
end
assert_equal("\x1b[38;5;214m⧖\x1b[0m", Glyph::HOURGLASS.to_s)
assert_equal("\x1b[33m⚠️\x1b[0m", Glyph::WARNING.to_s)
end

def test_plain_glyphs
Expand All @@ -40,18 +30,24 @@ def test_plain_glyphs
assert_equal("\x1b[31mX\x1b[0m", Glyph::X.to_s)
assert_equal("\x1b[97m!\x1b[0m", Glyph::BUG.to_s)
assert_equal("\x1b[33m»\x1b[0m", Glyph::CHEVRON.to_s)
assert_equal("\x1b[38;5;214mH\x1b[0m", Glyph::HOURGLASS.to_s)
assert_equal("\x1b[33m!\x1b[0m", Glyph::WARNING.to_s)
end
end

assert_equal(Glyph::STAR, Glyph.lookup('*'))
assert_equal(Glyph::INFO, Glyph.lookup('i'))
assert_equal(Glyph::QUESTION, Glyph.lookup('?'))
assert_equal(Glyph::CHECK, Glyph.lookup('v'))
assert_equal(Glyph::X, Glyph.lookup('x'))
assert_equal(Glyph::BUG, Glyph.lookup('b'))
assert_equal(Glyph::CHEVRON, Glyph.lookup('>'))
def test_glyph_lookup
assert_equal(Glyph::STAR, Glyph.lookup('*'))
assert_equal(Glyph::INFO, Glyph.lookup('i'))
assert_equal(Glyph::QUESTION, Glyph.lookup('?'))
assert_equal(Glyph::CHECK, Glyph.lookup('v'))
assert_equal(Glyph::X, Glyph.lookup('x'))
assert_equal(Glyph::BUG, Glyph.lookup('b'))
assert_equal(Glyph::CHEVRON, Glyph.lookup('>'))
assert_equal(Glyph::HOURGLASS, Glyph.lookup('H'))
assert_equal(Glyph::WARNING, Glyph.lookup('!'))

assert_raises(Glyph::InvalidGlyphHandle) do
Glyph.lookup('$')
end
assert_raises(Glyph::InvalidGlyphHandle) do
Glyph.lookup('$')
end
end

Expand Down