aboutsummaryrefslogtreecommitdiffstats
path: root/web_src/js/utils.test.js
blob: 812ef3bedfdc0b106fd92be2e1f7b70a1733cdb4 (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
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /*
import {expect, test} from 'vitest';
import {
  basename, extname, isObject, stripTags, joinPaths, parseIssueHref,
  parseUrl, translateMonth, translateDay, blobToDataURI,
  toAbsoluteUrl, encodeURLEncodedBase64, decodeURLEncodedBase64,
} from './utils.js';

test('basename', () => {
  expect(basename('/path/to/file.js')).toEqual('file.js');
  expect(basename('/path/to/file')).toEqual('file');
  expect(basename('file.js')).toEqual('file.js');
});

test('extname', () => {
  expect(extname('/path/to/file.js')).toEqual('.js');
  expect(extname('/path/')).toEqual('');
  expect(extname('/path')).toEqual('');
  expect(extname('file.js')).toEqual('.js');
});

test('joinPaths', () => {
  expect(joinPaths('', '')).toEqual('');
  expect(joinPaths('', 'b')).toEqual('b');
  expect(joinPaths('', '/b')).toEqual('/b');
  expect(joinPaths('', '/b/')).toEqual('/b/');
  expect(joinPaths('a', '')).toEqual('a');
  expect(joinPaths('/a', '')).toEqual('/a');
  expect(joinPaths('
"nx">expect(joinPaths('a', 'b')).toEqual('a/b'); expect(joinPaths('a', '/b')).toEqual('a/b'); expect(joinPaths('/a', '/b')).toEqual('/a/b'); expect(joinPaths('/a', '/b')).toEqual('/a/b'); expect(joinPaths('/a/', '/b')).toEqual('/a/b'); expect(joinPaths('/a', '/b/')).toEqual('/a/b/'); expect(joinPaths('/a/', '/b/')).toEqual('/a/b/'); expect(joinPaths('', '', '')).toEqual(''); expect(joinPaths('', 'b', '')).toEqual('b'); expect(joinPaths('', 'b', 'c')).toEqual('b/c'); expect(joinPaths('', '', 'c')).toEqual('c'); expect(joinPaths('', '/b', '/c')).toEqual('/b/c'); expect(joinPaths('/a', '', '/c')).toEqual('/a/c'); expect(joinPaths('/a', '/b', '')).toEqual('/a/b'); expect(joinPaths('', '/')).toEqual('/'); expect(joinPaths('a', '/')).toEqual('a/'); expect(joinPaths('', '/', '/')).toEqual('/'); expect(joinPaths('/', '/')).toEqual('/'); expect(joinPaths('/', '')).toEqual('/'); expect(joinPaths('/', 'b')).toEqual('/b'); expect(joinPaths('/', 'b/')).toEqual('/b/'); expect(joinPaths('/', '', '/')).toEqual('/'); expect(joinPaths('/', 'b', '/')).toEqual('/b/'); expect(joinPaths('/', 'b/', '/')).toEqual('/b/'); expect(joinPaths('a', '/', '/')).toEqual('a/'); expect(joinPaths('/', '/', 'c')).toEqual('/c'); expect(joinPaths('/', '/', 'c/')).toEqual('/c/'); }); test('isObject', () => { expect(isObject({})).toBeTruthy(); expect(isObject([])).toBeFalsy(); }); test('stripTags', () => { expect(stripTags('<a>test</a>')).toEqual('test'); }); test('parseIssueHref', () => { expect(parseIssueHref('/owner/repo/issues/1')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'}); expect(parseIssueHref('/owner/repo/pulls/1?query')).toEqual({owner: 'owner', repo: 'repo', type: 'pulls', index: '1'}); expect(parseIssueHref('/owner/repo/issues/1#hash')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'}); expect(parseIssueHref('/sub/owner/repo/issues/1')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'}); expect(parseIssueHref('/sub/sub2/owner/repo/pulls/1')).toEqual({owner: 'owner', repo: 'repo', type: 'pulls', index: '1'}); expect(parseIssueHref('/sub/sub2/owner/repo/issues/1?query')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'}); expect(parseIssueHref('/sub/sub2/owner/repo/issues/1#hash')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'}); expect(parseIssueHref('https://example.com/owner/repo/issues/1')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'}); expect(parseIssueHref('https://example.com/owner/repo/pulls/1?query')).toEqual({owner: 'owner', repo: 'repo', type: 'pulls', index: '1'}); expect(parseIssueHref('https://example.com/owner/repo/issues/1#hash')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'}); expect(parseIssueHref('https://example.com/sub/owner/repo/issues/1')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'}); expect(parseIssueHref('https://example.com/sub/sub2/owner/repo/pulls/1')).toEqual({owner: 'owner', repo: 'repo', type: 'pulls', index: '1'}); expect(parseIssueHref('https://example.com/sub/sub2/owner/repo/issues/1?query')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'}); expect(parseIssueHref('https://example.com/sub/sub2/owner/repo/issues/1#hash')).toEqual({owner: 'owner', repo: 'repo', type: 'issues', index: '1'}); expect(parseIssueHref('')).toEqual({owner: undefined, repo: undefined, type: undefined, index: undefined}); }); test('parseUrl', () => { expect(parseUrl('').pathname).toEqual('/'); expect(parseUrl('/path').pathname).toEqual('/path'); expect(parseUrl('/path?search').pathname).toEqual('/path'); expect(parseUrl('/path?search').search).toEqual('?search'); expect(parseUrl('/path?search#hash').hash).toEqual('#hash'); expect(parseUrl('https://localhost/path').pathname).toEqual('/path'); expect(parseUrl('https://localhost/path?search').pathname).toEqual('/path'); expect(parseUrl('https://localhost/path?search').search).toEqual('?search'); expect(parseUrl('https://localhost/path?search#hash').hash).toEqual('#hash'); }); test('translateMonth', () => { const originalLang = document.documentElement.lang; document.documentElement.lang = 'en-US'; expect(translateMonth(0)).toEqual('Jan'); expect(translateMonth(4)).toEqual('May'); document.documentElement.lang = 'es-ES'; expect(translateMonth(5)).toEqual('jun'); expect(translateMonth(6)).toEqual('jul'); document.documentElement.lang = originalLang; }); test('translateDay', () => { const originalLang = document.documentElement.lang; document.documentElement.lang = 'fr-FR'; expect(translateDay(1)).toEqual('lun.'); expect(translateDay(5)).toEqual('ven.'); document.documentElement.lang = 'pl-PL'; expect(translateDay(1)).toEqual('pon.'); expect(translateDay(5)).toEqual('pt.'); document.documentElement.lang = originalLang; }); test('blobToDataURI', async () => { const blob = new Blob([JSON.stringify({test: true})], {type: 'application/json'}); expect(await blobToDataURI(blob)).toEqual('data:application/json;base64,eyJ0ZXN0Ijp0cnVlfQ=='); }); test('toAbsoluteUrl', () => { expect(toAbsoluteUrl('//host/dir')).toEqual('http://host/dir'); expect(toAbsoluteUrl('https://host/dir')).toEqual('https://host/dir'); expect(toAbsoluteUrl('')).toEqual('http://localhost:3000'); expect(toAbsoluteUrl('/user/repo')).toEqual('http://localhost:3000/user/repo'); expect(() => toAbsoluteUrl('path')).toThrowError('unsupported'); }); const uint8array = (s) => new TextEncoder().encode(s); test('encodeURLEncodedBase64, decodeURLEncodedBase64', () => { expect(encodeURLEncodedBase64(uint8array('AA?'))).toEqual('QUE_'); // standard base64: "QUE/" expect(encodeURLEncodedBase64(uint8array('AA~'))).toEqual('QUF-'); // standard base64: "QUF+" expect(decodeURLEncodedBase64('QUE/')).toEqual(uint8array('AA?')); expect(decodeURLEncodedBase64('QUF+')).toEqual(uint8array('AA~')); expect(decodeURLEncodedBase64('QUE_')).toEqual(uint8array('AA?')); expect(decodeURLEncodedBase64('QUF-')).toEqual(uint8array('AA~')); expect(encodeURLEncodedBase64(uint8array('a'))).toEqual('YQ'); // standard base64: "YQ==" expect(decodeURLEncodedBase64('YQ')).toEqual(uint8array('a')); expect(decodeURLEncodedBase64('YQ==')).toEqual(uint8array('a')); });