-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
Copy pathline-numbers.js
79 lines (65 loc) · 2.48 KB
/
line-numbers.js
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
import {test} from 'tap';
import {splitPatternAndLineNumbers, getApplicableLineNumbers} from '../lib/line-numbers.js';
test('no line numbers', t => {
t.strictSame(splitPatternAndLineNumbers('test.js'), {pattern: 'test.js', lineNumbers: null});
t.end();
});
test('delimeter but no line numbers suffix', t => {
t.strictSame(splitPatternAndLineNumbers('test.js:foo'), {pattern: 'test.js:foo', lineNumbers: null});
t.strictSame(splitPatternAndLineNumbers('test:3.js'), {pattern: 'test:3.js', lineNumbers: null});
t.end();
});
test('single line number', t => {
t.strictSame(splitPatternAndLineNumbers('test.js:2'), {pattern: 'test.js', lineNumbers: [2]});
t.strictSame(splitPatternAndLineNumbers('test.js:10'), {pattern: 'test.js', lineNumbers: [10]});
t.end();
});
test('multiple line numbers', t => {
t.strictSame(splitPatternAndLineNumbers('test.js:2,10'), {pattern: 'test.js', lineNumbers: [2, 10]});
t.end();
});
test('single range', t => {
t.strictSame(splitPatternAndLineNumbers('test.js:2-4'), {pattern: 'test.js', lineNumbers: [2, 3, 4]});
t.end();
});
test('multiple ranges', t => {
t.strictSame(splitPatternAndLineNumbers('test.js:2-4,8-10'), {pattern: 'test.js', lineNumbers: [2, 3, 4, 8, 9, 10]});
t.end();
});
test('overlapping ranges', t => {
t.strictSame(splitPatternAndLineNumbers('test.js:2-4,3-5'), {pattern: 'test.js', lineNumbers: [2, 3, 4, 5]});
t.end();
});
test('mix of number and range', t => {
t.strictSame(splitPatternAndLineNumbers('test.js:2,8-10'), {pattern: 'test.js', lineNumbers: [2, 8, 9, 10]});
t.end();
});
test('overlapping number and range', t => {
t.strictSame(splitPatternAndLineNumbers('test.js:3,2-4'), {pattern: 'test.js', lineNumbers: [2, 3, 4]});
t.end();
});
test('handle whitespace', t => {
t.strictSame(splitPatternAndLineNumbers('test.js: 2 , 3 - 4 '), {pattern: 'test.js', lineNumbers: [2, 3, 4]});
t.end();
});
test('ignore non-matching patterns', t => {
t.strictSame(
getApplicableLineNumbers('test.js', [{pattern: 'test.js', lineNumbers: [2]}, {pattern: 'foo.js', lineNumbers: [3]}]),
[2],
);
t.end();
});
test('deduplicate line numbers', t => {
t.strictSame(
getApplicableLineNumbers('test.js', [{pattern: 'test.js', lineNumbers: [2, 3, 4]}, {pattern: 'test.js', lineNumbers: [3, 4, 5]}]),
[2, 3, 4, 5],
);
t.end();
});
test('sort line numbers', t => {
t.strictSame(
getApplicableLineNumbers('test.js', [{pattern: 'test.js', lineNumbers: [1, 3, 5]}, {pattern: 'test.js', lineNumbers: [2, 4, 6]}]),
[1, 2, 3, 4, 5, 6],
);
t.end();
});