summaryrefslogtreecommitdiff
path: root/spec/frontend/vue_shared/components/source_viewer/utils_spec.js
blob: 0631e7efd5418cb4e34f4d92b3be5e1602e9ae1b (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
import { wrapLines } from '~/vue_shared/components/source_viewer/utils';

describe('Wrap lines', () => {
  it.each`
    content                                            | language             | output
    ${'line 1'}                                        | ${'javascript'}      | ${'<span id="LC1" lang="javascript" class="line">line 1</span>'}
    ${'line 1\nline 2'}                                | ${'html'}            | ${`<span id="LC1" lang="html" class="line">line 1</span>\n<span id="LC2" lang="html" class="line">line 2</span>`}
    ${'<span class="hljs-code">line 1\nline 2</span>'} | ${'html'}            | ${`<span id="LC1" lang="html" class="hljs-code">line 1\n<span id="LC2" lang="html" class="line">line 2</span></span>`}
    ${'<span class="hljs-code">```bash'}               | ${'bash'}            | ${'<span id="LC1" lang="bash" class="hljs-code">```bash'}
    ${'<span class="hljs-code">```bash'}               | ${'valid-language1'} | ${'<span id="LC1" lang="valid-language1" class="hljs-code">```bash'}
    ${'<span class="hljs-code">```bash'}               | ${'valid_language2'} | ${'<span id="LC1" lang="valid_language2" class="hljs-code">```bash'}
  `('returns lines wrapped in spans containing line numbers', ({ content, language, output }) => {
    expect(wrapLines(content, language)).toBe(output);
  });

  it.each`
    language
    ${'invalidLanguage>'}
    ${'"invalidLanguage"'}
    ${'<invalidLanguage'}
  `('returns lines safely without XSS language is not valid', ({ language }) => {
    expect(wrapLines('<span class="hljs-code">```bash', language)).toBe(
      '<span id="LC1" lang="" class="hljs-code">```bash',
    );
  });
});