node/deps/v8/test/mjsunit/json-errors.js
Michaël Zasso 17a74ddd3d
deps: update V8 to 11.8.172.13
PR-URL: https://github.com/nodejs/node/pull/49639
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
2023-10-10 08:25:41 +02:00

70 lines
2.3 KiB
JavaScript

// Copyright 2017 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
function TryParse(s, message) {
try {
JSON.parse(s);
assertUnreachable();
} catch(e) {
assertEquals(message, e.message);
}
}
var s = `{"a\\\\b `;
TryParse(s, "Unterminated string in JSON at position 7 (line 1 column 8)");
var s = `{"a\\\\\u03A9 `;
TryParse(s, "Unterminated string in JSON at position 7 (line 1 column 8)");
var s = `{"ab `;
TryParse(s, "Unterminated string in JSON at position 5 (line 1 column 6)");
var s = `{"a\u03A9 `;
TryParse(s, "Unterminated string in JSON at position 5 (line 1 column 6)");
var s = `{"a\nb":"b"}`;
TryParse(s, "Bad control character in string literal in JSON " +
"at position 3 (line 1 column 4)");
var s = `{"a\nb":"b\u03A9"}`;
TryParse(s, "Bad control character in string literal in JSON " +
"at position 3 (line 1 column 4)");
// === Test line counting ===
// \r and \n are line terminators.
var s = `{\n7:1}`;
TryParse(s, "Expected property name or '}' in JSON " +
"at position 2 (line 2 column 1)");
var s = `{\r7:1}`;
TryParse(s, "Expected property name or '}' in JSON " +
"at position 2 (line 2 column 1)");
// The sequence \r\n counts as a single line terminator.
var s = `{\r\n7:1}`;
TryParse(s, "Expected property name or '}' in JSON " +
"at position 3 (line 2 column 1)");
// The sequences \r\r, \n\n and \n\r count as 2 line terminators.
var s = `{\r\r7:1}`;
TryParse(s, "Expected property name or '}' in JSON " +
"at position 3 (line 3 column 1)");
var s = `{\n\n7:1}`;
TryParse(s, "Expected property name or '}' in JSON " +
"at position 3 (line 3 column 1)");
var s = `{\n\r7:1}`;
TryParse(s, "Expected property name or '}' in JSON " +
"at position 3 (line 3 column 1)");
// \u2028 and \u2029 (line terminators according to ECMA-262 11.3) aren't
// allowed in JSON (and therefore don't need to be counted).
var s = `\u2028{}`;
TryParse(s, "Unexpected token '\u2028', \"\u2028{}\" is not valid JSON");
var s = `\u2029{}`;
TryParse(s, "Unexpected token '\u2029', \"\u2029{}\" is not valid JSON");
var s = `\n { \n\n"12345": 5,,}`;
TryParse(s, "Expected double-quoted property name in JSON " +
"at position 18 (line 4 column 12)");