diff options
author | Fabrice Bellard <fabrice@bellard.org> | 2025-04-14 14:46:47 +0200 |
---|---|---|
committer | Fabrice Bellard <fabrice@bellard.org> | 2025-04-14 14:46:47 +0200 |
commit | 251a8b2211f378456cc6bb0ccade9ce0a31e2d9c (patch) | |
tree | 728dc4b74b7dc466ef47ee699ce66e636438a3e2 /tests/test_builtin.js | |
parent | 4cc4c6c1c55f2f995aa6f42920bbffaa0610da57 (diff) | |
download | quickjs-251a8b2211f378456cc6bb0ccade9ce0a31e2d9c.tar.gz quickjs-251a8b2211f378456cc6bb0ccade9ce0a31e2d9c.zip |
added column number in error messages - simplified parser
Diffstat (limited to 'tests/test_builtin.js')
-rw-r--r-- | tests/test_builtin.js | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/tests/test_builtin.js b/tests/test_builtin.js index 38b2640..2fd3c41 100644 --- a/tests/test_builtin.js +++ b/tests/test_builtin.js @@ -508,6 +508,42 @@ function test_typed_array() assert(a.toString(), "1,2,10,11"); } +function check_error_pos(e, expected_error, line_num, col_num) +{ + var expected_pos; + expected_pos = ":" + line_num + ":" + col_num; + if (expected_error === SyntaxError) + expected_pos += "\n"; + else + expected_pos += ")"; + if (e.stack.indexOf(expected_pos) < 0) { + throw_error("unexpected line or column number. error=" + e.message + + ".got |" + e.stack + + "|, expected |" + expected_pos + "|"); + } +} + +function assert_json_error(str, line_num, col_num) +{ + var err = false; + var expected_pos; + + try { + JSON.parse(str); + } catch(e) { + err = true; + if (!(e instanceof SyntaxError)) { + throw_error("unexpected exception type"); + return; + } + /* XXX: the way quickjs returns JSON errors is not similar to Node or spiderMonkey */ + check_error_pos(e, SyntaxError, line_num, col_num); + } + if (!err) { + throw_error("expected exception"); + } +} + function test_json() { var a, s; @@ -531,6 +567,9 @@ function test_json() 3 ] ]`); + + assert_json_error('\n" \\x"', 2, 4); + assert_json_error('\n{ "a": x }"', 2, 8); } function test_date() @@ -965,6 +1004,55 @@ function test_rope() rope_concat(100000, -1); } + +function eval_error(eval_str, expected_error, line_num, col_num) +{ + var err = false; + var expected_pos; + + try { + eval(eval_str); + } catch(e) { + err = true; + if (!(e instanceof expected_error)) { + throw_error("unexpected exception type"); + return; + } + check_error_pos(e, expected_error, line_num, col_num); + } + if (!err) { + throw_error("expected exception"); + } +} + +function test_line_column_numbers() +{ + var f, e; + + /* parsing */ + eval_error("\n 123 a ", SyntaxError, 2, 6); + eval_error("\n /* ", SyntaxError, 2, 3); + eval_error("function f a", SyntaxError, 1, 13); + /* currently regexp syntax errors point to the start of the regexp */ + eval_error("\n /aaa]/u", SyntaxError, 2, 3); + + /* function definitions */ + + e = eval("\n function f() { }; f;"); + assert(e.lineNumber, 2); + assert(e.columnNumber, 4); + + /* errors */ + e = eval('\n Error("hello");'); + check_error_pos(e, Error, 2, 8); + eval_error('\n throw Error("hello");', Error, 2, 14); + eval_error('\n 2 * Symbol();', TypeError, 2, 5); + eval_error('\n "café" * Symbol();', TypeError, 2, 10); + eval_error('\n null[0];', TypeError, 2, 6); + eval_error('\n null . abcd;', TypeError, 2, 7); + eval_error('\n null ( 1234 );', TypeError, 2, 7); +} + test(); test_function(); test_enum(); @@ -985,3 +1073,4 @@ test_weak_ref(); test_finalization_registry(); test_generator(); test_rope(); +test_line_column_numbers(); |