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
|
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
const test = require('tap').test;
import stripJsonComments from './index.js';
test('replace comments with whitespace', t => {
t.plan(7);
t.deepEqual(stripJsonComments('//comment\n{"a":"b"}'), ' \n{"a":"b"}');
t.deepEqual(stripJsonComments('/*//comment*/{"a":"b"}'), ' {"a":"b"}');
t.deepEqual(stripJsonComments('{"a":"b"//comment\n}'), '{"a":"b" \n}');
t.deepEqual(stripJsonComments('{"a":"b"/*comment*/}'), '{"a":"b" }');
t.deepEqual(stripJsonComments('{"a"/*\n\n\ncomment\r\n*/:"b"}'), '{"a" \n\n\n \r\n :"b"}');
t.deepEqual(stripJsonComments('/*!\n * comment\n */\n{"a":"b"}'), ' \n \n \n{"a":"b"}');
t.deepEqual(stripJsonComments('{/*comment*/"a":"b"}'), '{ "a":"b"}');
});
test('remove comments', t => {
const options = {whitespace: false};
t.plan(7);
t.deepEqual(stripJsonComments('//comment\n{"a":"b"}', options), '\n{"a":"b"}');
t.deepEqual(stripJsonComments('/*//comment*/{"a":"b"}', options), '{"a":"b"}');
t.deepEqual(stripJsonComments('{"a":"b"//comment\n}', options), '{"a":"b"\n}');
t.deepEqual(stripJsonComments('{"a":"b"/*comment*/}', options), '{"a":"b"}');
t.deepEqual(stripJsonComments('{"a"/*\n\n\ncomment\r\n*/:"b"}', options), '{"a":"b"}');
t.deepEqual(stripJsonComments('/*!\n * comment\n */\n{"a":"b"}', options), '\n{"a":"b"}');
t.deepEqual(stripJsonComments('{/*comment*/"a":"b"}', options), '{"a":"b"}');
});
test('doesn\'t strip comments inside strings', t => {
t.plan(4);
t.deepEqual(stripJsonComments('{"a":"b//c"}'), '{"a":"b//c"}');
t.deepEqual(stripJsonComments('{"a":"b/*c*/"}'), '{"a":"b/*c*/"}');
t.deepEqual(stripJsonComments('{"/*a":"b"}'), '{"/*a":"b"}');
t.deepEqual(stripJsonComments('{"\\"/*a":"b"}'), '{"\\"/*a":"b"}');
});
test('consider escaped slashes when checking for escaped string quote', t => {
t.plan(2);
t.deepEqual(stripJsonComments('{"\\\\":"https://foobar.com"}'), '{"\\\\":"https://foobar.com"}');
t.deepEqual(stripJsonComments('{"foo\\"":"https://foobar.com"}'), '{"foo\\"":"https://foobar.com"}');
});
test('line endings - no comments', t => {
t.plan(2);
t.deepEqual(stripJsonComments('{"a":"b"\n}'), '{"a":"b"\n}');
t.deepEqual(stripJsonComments('{"a":"b"\r\n}'), '{"a":"b"\r\n}');
});
test('line endings - single line comment', t => {
t.plan(2);
t.deepEqual(stripJsonComments('{"a":"b"//c\n}'), '{"a":"b" \n}');
t.deepEqual(stripJsonComments('{"a":"b"//c\r\n}'), '{"a":"b" \r\n}');
});
test('line endings - single line block comment', t => {
t.plan(2);
t.deepEqual(stripJsonComments('{"a":"b"/*c*/\n}'), '{"a":"b" \n}');
t.deepEqual(stripJsonComments('{"a":"b"/*c*/\r\n}'), '{"a":"b" \r\n}');
});
test('line endings - multi line block comment', t => {
t.plan(2);
t.deepEqual(stripJsonComments('{"a":"b",/*c\nc2*/"x":"y"\n}'), '{"a":"b", \n "x":"y"\n}');
t.deepEqual(stripJsonComments('{"a":"b",/*c\r\nc2*/"x":"y"\r\n}'), '{"a":"b", \r\n "x":"y"\r\n}');
});
test('line endings - works at EOF', t => {
const options = {whitespace: false};
t.plan(2);
t.deepEqual(stripJsonComments('{\r\n\t"a":"b"\r\n} //EOF'), '{\r\n\t"a":"b"\r\n} ');
t.deepEqual(stripJsonComments('{\r\n\t"a":"b"\r\n} //EOF', options), '{\r\n\t"a":"b"\r\n} ');
});
test('handles weird escaping', t => {
t.plan(1);
t.deepEqual(stripJsonComments(String.raw`{"x":"x \"sed -e \\\"s/^.\\\\{46\\\\}T//\\\" -e \\\"s/#033/\\\\x1b/g\\\"\""}`), String.raw`{"x":"x \"sed -e \\\"s/^.\\\\{46\\\\}T//\\\" -e \\\"s/#033/\\\\x1b/g\\\"\""}`);
});
|