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();});