Welcome to mirror list, hosted at ThFree Co, Russian Federation.

style_spec.rb « ansi2json « ci « gitlab « lib « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 87085950a9f4d583cdb279d531a9885367ef9ccf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# 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) # rubocop:disable Rails/SaveBang

        style.update(ansi_commands) # rubocop:disable Rails/SaveBang

        expect(style.to_s).to eq(result)
      end
    end
  end
end