File: test.js

package info (click to toggle)
node-strip-json-comments 4.0.0-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid, trixie
  • size: 896 kB
  • sloc: javascript: 201; makefile: 5
file content (77 lines) | stat: -rw-r--r-- 3,594 bytes parent folder | download
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\\\"\""}`);
});