171 lines
6.8 KiB
Ruby
171 lines
6.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Gitlab::Ci::Ansi2json::Style do
|
|
describe '#set?' do
|
|
subject { described_class.new(params).set? }
|
|
|
|
context 'when fg color is set' do
|
|
let(:params) { { fg: 'term-fg-black' } }
|
|
|
|
it { is_expected.to be_truthy }
|
|
end
|
|
|
|
context 'when bg color is set' do
|
|
let(:params) { { bg: 'term-bg-black' } }
|
|
|
|
it { is_expected.to be_truthy }
|
|
end
|
|
|
|
context 'when mask is set' do
|
|
let(:params) { { mask: 0x01 } }
|
|
|
|
it { is_expected.to be_truthy }
|
|
end
|
|
|
|
context 'nothing is set' do
|
|
let(:params) { {} }
|
|
|
|
it { is_expected.to be_falsey }
|
|
end
|
|
end
|
|
|
|
describe '#reset!' do
|
|
let(:style) { described_class.new(fg: 'term-fg-black', bg: 'term-bg-yellow', mask: 0x01) }
|
|
|
|
it 'set the style params to default' do
|
|
style.reset!
|
|
|
|
expect(style.fg).to be_nil
|
|
expect(style.bg).to be_nil
|
|
expect(style.mask).to be_zero
|
|
end
|
|
end
|
|
|
|
describe 'update formats to mimic terminals' do
|
|
subject { described_class.new(params) }
|
|
|
|
context 'when fg color present' do
|
|
let(:params) { { fg: 'term-fg-black', mask: mask } }
|
|
|
|
context 'when mask is set to bold' do
|
|
let(:mask) { 0x01 }
|
|
|
|
it 'changes the fg color to a lighter version' do
|
|
expect(subject.fg).to eq('term-fg-l-black')
|
|
end
|
|
end
|
|
|
|
context 'when mask set to another format' do
|
|
let(:mask) { 0x02 }
|
|
|
|
it 'does not change the fg color' do
|
|
expect(subject.fg).to eq('term-fg-black')
|
|
end
|
|
end
|
|
|
|
context 'when mask is not set' do
|
|
let(:mask) { 0 }
|
|
|
|
it 'does not change the fg color' do
|
|
expect(subject.fg).to eq('term-fg-black')
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#update' do
|
|
where(:initial_state, :ansi_commands, :result, :description) do
|
|
[
|
|
# add format
|
|
[[], %w[0], '', 'does not set any style'],
|
|
[[], %w[1], 'term-bold', 'enables format bold'],
|
|
[[], %w[3], 'term-italic', 'enables format italic'],
|
|
[[], %w[4], 'term-underline', 'enables format underline'],
|
|
[[], %w[8], 'term-conceal', 'enables format conceal'],
|
|
[[], %w[9], 'term-cross', 'enables format cross'],
|
|
# remove format
|
|
[%w[1], %w[21], '', 'disables format bold'],
|
|
[%w[1 3], %w[21], 'term-italic', 'disables format bold and leaves italic'],
|
|
[%w[1], %w[22], '', 'disables format bold using command 22'],
|
|
[%w[1 3], %w[22], 'term-italic', 'disables format bold and leaves italic using command 22'],
|
|
[%w[3], %w[23], '', 'disables format italic'],
|
|
[%w[1 3], %w[23], 'term-bold', 'disables format italic and leaves bold'],
|
|
[%w[4], %w[24], '', 'disables format underline'],
|
|
[%w[1 4], %w[24], 'term-bold', 'disables format underline and leaves bold'],
|
|
[%w[8], %w[28], '', 'disables format conceal'],
|
|
[%w[1 8], %w[28], 'term-bold', 'disables format conceal and leaves bold'],
|
|
[%w[9], %w[29], '', 'disables format cross'],
|
|
[%w[1 9], %w[29], 'term-bold', 'disables format cross and leaves bold'],
|
|
# set fg color
|
|
[[], %w[30], 'term-fg-black', 'sets fg color black'],
|
|
[[], %w[31], 'term-fg-red', 'sets fg color red'],
|
|
[[], %w[32], 'term-fg-green', 'sets fg color green'],
|
|
[[], %w[33], 'term-fg-yellow', 'sets fg color yellow'],
|
|
[[], %w[34], 'term-fg-blue', 'sets fg color blue'],
|
|
[[], %w[35], 'term-fg-magenta', 'sets fg color magenta'],
|
|
[[], %w[36], 'term-fg-cyan', 'sets fg color cyan'],
|
|
[[], %w[37], 'term-fg-white', 'sets fg color white'],
|
|
# sets xterm fg color
|
|
[[], %w[38 5 1], 'xterm-fg-1', 'sets xterm fg color 1'],
|
|
[[], %w[38 5 2], 'xterm-fg-2', 'sets xterm fg color 2'],
|
|
[[], %w[38 1], 'term-bold', 'ignores 38 command if not followed by 5 and sets format bold'],
|
|
# set bg color
|
|
[[], %w[40], 'term-bg-black', 'sets bg color black'],
|
|
[[], %w[41], 'term-bg-red', 'sets bg color red'],
|
|
[[], %w[42], 'term-bg-green', 'sets bg color green'],
|
|
[[], %w[43], 'term-bg-yellow', 'sets bg color yellow'],
|
|
[[], %w[44], 'term-bg-blue', 'sets bg color blue'],
|
|
[[], %w[45], 'term-bg-magenta', 'sets bg color magenta'],
|
|
[[], %w[46], 'term-bg-cyan', 'sets bg color cyan'],
|
|
[[], %w[47], 'term-bg-white', 'sets bg color white'],
|
|
# set xterm bg color
|
|
[[], %w[48 5 1], 'xterm-bg-1', 'sets xterm bg color 1'],
|
|
[[], %w[48 5 2], 'xterm-bg-2', 'sets xterm bg color 2'],
|
|
[[], %w[48 1], 'term-bold', 'ignores 48 command if not followed by 5 and sets format bold'],
|
|
# set light fg color
|
|
[[], %w[90], 'term-fg-l-black', 'sets fg color light black'],
|
|
[[], %w[91], 'term-fg-l-red', 'sets fg color light red'],
|
|
[[], %w[92], 'term-fg-l-green', 'sets fg color light green'],
|
|
[[], %w[93], 'term-fg-l-yellow', 'sets fg color light yellow'],
|
|
[[], %w[94], 'term-fg-l-blue', 'sets fg color light blue'],
|
|
[[], %w[95], 'term-fg-l-magenta', 'sets fg color light magenta'],
|
|
[[], %w[96], 'term-fg-l-cyan', 'sets fg color light cyan'],
|
|
[[], %w[97], 'term-fg-l-white', 'sets fg color light white'],
|
|
# set light bg color
|
|
[[], %w[100], 'term-bg-l-black', 'sets bg color light black'],
|
|
[[], %w[101], 'term-bg-l-red', 'sets bg color light red'],
|
|
[[], %w[102], 'term-bg-l-green', 'sets bg color light green'],
|
|
[[], %w[103], 'term-bg-l-yellow', 'sets bg color light yellow'],
|
|
[[], %w[104], 'term-bg-l-blue', 'sets bg color light blue'],
|
|
[[], %w[105], 'term-bg-l-magenta', 'sets bg color light magenta'],
|
|
[[], %w[106], 'term-bg-l-cyan', 'sets bg color light cyan'],
|
|
[[], %w[107], 'term-bg-l-white', 'sets bg color light white'],
|
|
# reset
|
|
[%w[1], %w[], '', 'resets style from format bold'],
|
|
[%w[1], %w[0], '', 'resets style from format bold'],
|
|
[%w[1 3], %w[0], '', 'resets style from format bold and italic'],
|
|
[%w[1 3 term-fg-l-red term-bg-yellow], %w[0], '', 'resets all formats and colors'],
|
|
# default foreground
|
|
[%w[31 42], %w[39], 'term-bg-green', 'set foreground from red to default leaving background unchanged'],
|
|
# default background
|
|
[%w[31 42], %w[49], 'term-fg-red', 'set background from green to default leaving foreground unchanged'],
|
|
# misc
|
|
[[], %w[1 30 42 3], 'term-fg-l-black term-bg-green term-bold term-italic', 'adds fg color, bg color and formats from no style'],
|
|
[%w[3 31], %w[23 1 43], 'term-fg-l-red term-bg-yellow term-bold', 'replaces format italic with bold and adds a yellow background']
|
|
]
|
|
end
|
|
|
|
with_them do
|
|
it 'change the style' do
|
|
style = described_class.new
|
|
style.update(initial_state)
|
|
|
|
style.update(ansi_commands)
|
|
|
|
expect(style.to_s).to eq(result)
|
|
end
|
|
end
|
|
end
|
|
end
|