@@ -32,57 +32,86 @@ describe('utils.between()', () => {
3232} ) ;
3333
3434
35- describe ( 'utils.cutAfterJSON ()' , ( ) => {
35+ describe ( 'utils.cutAfterJS ()' , ( ) => {
3636 it ( 'Works with simple JSON' , ( ) => {
37- assert . strictEqual ( utils . cutAfterJSON ( '{"a": 1, "b": 1}' ) , '{"a": 1, "b": 1}' ) ;
37+ assert . strictEqual ( utils . cutAfterJS ( '{"a": 1, "b": 1}' ) , '{"a": 1, "b": 1}' ) ;
3838 } ) ;
3939 it ( 'Cut extra characters after JSON' , ( ) => {
40- assert . strictEqual ( utils . cutAfterJSON ( '{"a": 1, "b": 1}abcd' ) , '{"a": 1, "b": 1}' ) ;
40+ assert . strictEqual ( utils . cutAfterJS ( '{"a": 1, "b": 1}abcd' ) , '{"a": 1, "b": 1}' ) ;
41+ } ) ;
42+ it ( 'Tolerant to double-quoted string constants' , ( ) => {
43+ assert . strictEqual ( utils . cutAfterJS ( '{"a": "}1", "b": 1}abcd' ) , '{"a": "}1", "b": 1}' ) ;
44+ } ) ;
45+ it ( 'Tolerant to single-quoted string constants' , ( ) => {
46+ assert . strictEqual ( utils . cutAfterJS ( `{"a": '}1', "b": 1}abcd` ) , `{"a": '}1', "b": 1}` ) ;
47+ } ) ;
48+ it ( 'Tolerant to complex single-quoted string constants' , ( ) => {
49+ const str = "[-1816574795, '\",;/[;', function asdf() { a = 2/3; return a;}]" ;
50+ assert . strictEqual ( utils . cutAfterJS ( `${ str } abcd` ) , str ) ;
51+ } ) ;
52+ it ( 'Tolerant to back-tick-quoted string constants' , ( ) => {
53+ assert . strictEqual ( utils . cutAfterJS ( '{"a": `}1`, "b": 1}abcd' ) , '{"a": `}1`, "b": 1}' ) ;
4154 } ) ;
4255 it ( 'Tolerant to string constants' , ( ) => {
43- assert . strictEqual ( utils . cutAfterJSON ( '{"a": "}1", "b": 1}abcd' ) , '{"a": "}1", "b": 1}' ) ;
56+ assert . strictEqual ( utils . cutAfterJS ( '{"a": "}1", "b": 1}abcd' ) , '{"a": "}1", "b": 1}' ) ;
4457 } ) ;
4558 it ( 'Tolerant to string with escaped quoting' , ( ) => {
46- assert . strictEqual ( utils . cutAfterJSON ( '{"a": "\\"}1", "b": 1}abcd' ) , '{"a": "\\"}1", "b": 1}' ) ;
59+ assert . strictEqual ( utils . cutAfterJS ( '{"a": "\\"}1", "b": 1}abcd' ) , '{"a": "\\"}1", "b": 1}' ) ;
4760 } ) ;
48- it ( 'works with nested ' , ( ) => {
61+ it ( 'Tolerant to string with regexes ' , ( ) => {
4962 assert . strictEqual (
50- utils . cutAfterJSON ( '{"a": "\\"1", "b": 1, "c": {"test": 1}}abcd' ) ,
63+ utils . cutAfterJS ( '{"a": "\\"}1", "b": 1, "c": /[0-9]}}\\/}/}abcd' ) ,
64+ '{"a": "\\"}1", "b": 1, "c": /[0-9]}}\\/}/}' ,
65+ ) ;
66+ } ) ;
67+ it ( 'does not fail for division followed by a regex' , ( ) => {
68+ assert . strictEqual (
69+ utils . cutAfterJS ( '{"a": "\\"}1", "b": 1, "c": [4/6, /[0-9]}}\\/}/]}abcd' , true ) ,
70+ '{"a": "\\"}1", "b": 1, "c": [4/6, /[0-9]}}\\/}/]}' ,
71+ ) ;
72+ } ) ;
73+ it ( 'works with nested objects' , ( ) => {
74+ assert . strictEqual (
75+ utils . cutAfterJS ( '{"a": "\\"1", "b": 1, "c": {"test": 1}}abcd' ) ,
5176 '{"a": "\\"1", "b": 1, "c": {"test": 1}}' ,
5277 ) ;
5378 } ) ;
79+ it ( 'works with try/catch' , ( ) => {
80+ let testStr = '{"a": "\\"1", "b": 1, "c": () => { try { /* do sth */ } catch (e) { a = [2+3] }; return 5}}' ;
81+ assert . strictEqual ( utils . cutAfterJS ( `${ testStr } abcd` ) , testStr ) ;
82+ } ) ;
5483 it ( 'Works with utf' , ( ) => {
5584 assert . strictEqual (
56- utils . cutAfterJSON ( '{"a": "\\"фыва", "b": 1, "c": {"test": 1}}abcd' ) ,
85+ utils . cutAfterJS ( '{"a": "\\"фыва", "b": 1, "c": {"test": 1}}abcd' ) ,
5786 '{"a": "\\"фыва", "b": 1, "c": {"test": 1}}' ,
5887 ) ;
5988 } ) ;
6089 it ( 'Works with \\\\ in string' , ( ) => {
6190 assert . strictEqual (
62- utils . cutAfterJSON ( '{"a": "\\\\фыва", "b": 1, "c": {"test": 1}}abcd' ) ,
91+ utils . cutAfterJS ( '{"a": "\\\\фыва", "b": 1, "c": {"test": 1}}abcd' ) ,
6392 '{"a": "\\\\фыва", "b": 1, "c": {"test": 1}}' ,
6493 ) ;
6594 } ) ;
6695 it ( 'Works with \\\\ towards the end of a string' , ( ) => {
6796 assert . strictEqual (
68- utils . cutAfterJSON ( '{"text": "\\\\"};' ) ,
97+ utils . cutAfterJS ( '{"text": "\\\\"};' ) ,
6998 '{"text": "\\\\"}' ,
7099 ) ;
71100 } ) ;
72101 it ( 'Works with [ as start' , ( ) => {
73102 assert . strictEqual (
74- utils . cutAfterJSON ( '[{"a": 1}, {"b": 2}]abcd' ) ,
103+ utils . cutAfterJS ( '[{"a": 1}, {"b": 2}]abcd' ) ,
75104 '[{"a": 1}, {"b": 2}]' ,
76105 ) ;
77106 } ) ;
78107 it ( 'Returns an error when not beginning with [ or {' , ( ) => {
79108 assert . throws ( ( ) => {
80- utils . cutAfterJSON ( 'abcd]}' ) ;
109+ utils . cutAfterJS ( 'abcd]}' ) ;
81110 } , / C a n ' t c u t u n s u p p o r t e d J S O N \( n e e d t o b e g i n w i t h \[ o r { \) b u t g o t : ./ ) ;
82111 } ) ;
83112 it ( 'Returns an error when missing closing bracket' , ( ) => {
84113 assert . throws ( ( ) => {
85- utils . cutAfterJSON ( '{"a": 1,{ "b": 1}' ) ;
114+ utils . cutAfterJS ( '{"a": 1,{ "b": 1}' ) ;
86115 } , / C a n ' t c u t u n s u p p o r t e d J S O N \( n o m a t c h i n g c l o s i n g b r a c k e t f o u n d \) / ) ;
87116 } ) ;
88117} ) ;
0 commit comments