Run local tests with run-test262

This commit is contained in:
Ben Noordhuis 2024-10-10 21:51:54 +02:00
parent 79eee54b22
commit b9be6d4ff2
5 changed files with 51 additions and 45 deletions

View file

@ -141,7 +141,7 @@ jobs:
make stats make stats
- name: test - name: test
if: ${{ matrix.config.configType != 'examples' }} if: ${{ matrix.config.configType != 'examples' && matrix.config.configType != 'tcc' }}
run: | run: |
make test make test
@ -214,16 +214,7 @@ jobs:
cp build\${{matrix.buildType}}\point.dll examples\ cp build\${{matrix.buildType}}\point.dll examples\
build\${{matrix.buildType}}\qjs.exe examples\test_fib.js build\${{matrix.buildType}}\qjs.exe examples\test_fib.js
build\${{matrix.buildType}}\qjs.exe examples\test_point.js build\${{matrix.buildType}}\qjs.exe examples\test_point.js
build\${{matrix.buildType}}\qjs.exe tests\test_bigint.js build\${{matrix.buildType}}\run-test262.exe -c tests.conf
build\${{matrix.buildType}}\qjs.exe tests\test_bjson.js
build\${{matrix.buildType}}\qjs.exe tests\test_closure.js
build\${{matrix.buildType}}\qjs.exe tests\test_language.js
build\${{matrix.buildType}}\qjs.exe tests\test_builtin.js
build\${{matrix.buildType}}\qjs.exe tests\test_loop.js
build\${{matrix.buildType}}\qjs.exe tests\test_std.js
build\${{matrix.buildType}}\qjs.exe tests\test_worker.js
build\${{matrix.buildType}}\qjs.exe tests\test_queue_microtask.js
build\${{matrix.buildType}}\qjs.exe tests\test_module_detect.js
build\${{matrix.buildType}}\function_source.exe build\${{matrix.buildType}}\function_source.exe
windows-clang: windows-clang:
@ -247,16 +238,7 @@ jobs:
cp build\${{matrix.buildType}}\point.dll examples\ cp build\${{matrix.buildType}}\point.dll examples\
build\${{matrix.buildType}}\qjs.exe examples\test_fib.js build\${{matrix.buildType}}\qjs.exe examples\test_fib.js
build\${{matrix.buildType}}\qjs.exe examples\test_point.js build\${{matrix.buildType}}\qjs.exe examples\test_point.js
build\${{matrix.buildType}}\qjs.exe tests\test_bigint.js build\${{matrix.buildType}}\run-test262.exe -c tests.conf
build\${{matrix.buildType}}\qjs.exe tests\test_bjson.js
build\${{matrix.buildType}}\qjs.exe tests\test_closure.js
build\${{matrix.buildType}}\qjs.exe tests\test_language.js
build\${{matrix.buildType}}\qjs.exe tests\test_builtin.js
build\${{matrix.buildType}}\qjs.exe tests\test_loop.js
build\${{matrix.buildType}}\qjs.exe tests\test_std.js
build\${{matrix.buildType}}\qjs.exe tests\test_worker.js
build\${{matrix.buildType}}\qjs.exe tests\test_queue_microtask.js
build\${{matrix.buildType}}\qjs.exe tests\test_module_detect.js
build\${{matrix.buildType}}\function_source.exe build\${{matrix.buildType}}\function_source.exe
windows-ninja: windows-ninja:
@ -284,16 +266,7 @@ jobs:
cp build\point.dll examples\ cp build\point.dll examples\
build\qjs.exe examples\test_fib.js build\qjs.exe examples\test_fib.js
build\qjs.exe examples\test_point.js build\qjs.exe examples\test_point.js
build\qjs.exe tests\test_bigint.js build\run-test262.exe -c tests.conf
build\qjs.exe tests\test_bjson.js
build\qjs.exe tests\test_closure.js
build\qjs.exe tests\test_language.js
build\qjs.exe tests\test_builtin.js
build\qjs.exe tests\test_loop.js
build\qjs.exe tests\test_std.js
build\qjs.exe tests\test_worker.js
build\qjs.exe tests\test_queue_microtask.js
build\qjs.exe tests\test_module_detect.js
build\function_source.exe build\function_source.exe
windows-mingw: windows-mingw:

View file

@ -80,15 +80,7 @@ stats: $(QJS)
$(QJS) -qd $(QJS) -qd
test: $(QJS) test: $(QJS)
$(QJS) tests/test_bigint.js $(RUN262) -c tests.conf
$(QJS) tests/test_closure.js
$(QJS) tests/test_language.js
$(QJS) tests/test_builtin.js
$(QJS) tests/test_loop.js
$(QJS) tests/test_std.js
$(QJS) tests/test_worker.js
$(QJS) tests/test_queue_microtask.js
$(QJS) tests/test_module_detect.js
testconv: $(BUILD_DIR)/test_conv testconv: $(BUILD_DIR)/test_conv
$(BUILD_DIR)/test_conv $(BUILD_DIR)/test_conv

View file

@ -74,6 +74,7 @@ enum test_mode_t {
TEST_STRICT, /* run tests as strict, skip nostrict tests */ TEST_STRICT, /* run tests as strict, skip nostrict tests */
TEST_ALL, /* run tests in both strict and nostrict, unless restricted by spec */ TEST_ALL, /* run tests in both strict and nostrict, unless restricted by spec */
} test_mode = TEST_DEFAULT_NOSTRICT; } test_mode = TEST_DEFAULT_NOSTRICT;
int local;
int skip_async; int skip_async;
int skip_module; int skip_module;
int dump_memory; int dump_memory;
@ -1129,6 +1130,10 @@ void load_config(const char *filename, const char *ignore)
printf("%s:%d: ignoring %s=%s\n", filename, lineno, p, q); printf("%s:%d: ignoring %s=%s\n", filename, lineno, p, q);
continue; continue;
} }
if (str_equal(p, "local")) {
local = str_equal(q, "yes");
continue;
}
if (str_equal(p, "testdir")) { if (str_equal(p, "testdir")) {
char *testdir = compose_path(base_name, q); char *testdir = compose_path(base_name, q);
enumerate_tests(testdir); enumerate_tests(testdir);
@ -1512,6 +1517,11 @@ static int eval_buf(JSContext *ctx, const char *buf, size_t buf_len,
JS_FreeCString(ctx, msg); JS_FreeCString(ctx, msg);
free(s); free(s);
} }
if (local) {
js_std_loop(ctx);
}
JS_FreeCString(ctx, error_name); JS_FreeCString(ctx, error_name);
JS_FreeValue(ctx, exception_val); JS_FreeValue(ctx, exception_val);
JS_FreeValue(ctx, res_val); JS_FreeValue(ctx, res_val);
@ -1679,6 +1689,19 @@ void update_stats(JSRuntime *rt, const char *filename) {
js_mutex_unlock(&stats_mutex); js_mutex_unlock(&stats_mutex);
} }
JSContext *JS_NewCustomContext(JSRuntime *rt)
{
JSContext *ctx;
ctx = JS_NewContext(rt);
if (ctx && local) {
js_init_module_std(ctx, "std");
js_init_module_os(ctx, "os");
js_init_module_bjson(ctx, "bjson");
}
return ctx;
}
int run_test_buf(const char *filename, char *harness, namelist_t *ip, int run_test_buf(const char *filename, char *harness, namelist_t *ip,
char *buf, size_t buf_len, const char* error_type, char *buf, size_t buf_len, const char* error_type,
int eval_flags, BOOL is_negative, BOOL is_async, int eval_flags, BOOL is_negative, BOOL is_async,
@ -1692,7 +1715,8 @@ int run_test_buf(const char *filename, char *harness, namelist_t *ip,
if (rt == NULL) { if (rt == NULL) {
fatal(1, "JS_NewRuntime failure"); fatal(1, "JS_NewRuntime failure");
} }
ctx = JS_NewContext(rt); js_std_init_handlers(rt);
ctx = JS_NewCustomContext(rt);
if (ctx == NULL) { if (ctx == NULL) {
JS_FreeRuntime(rt); JS_FreeRuntime(rt);
fatal(1, "JS_NewContext failure"); fatal(1, "JS_NewContext failure");
@ -1721,6 +1745,7 @@ int run_test_buf(const char *filename, char *harness, namelist_t *ip,
} }
js_agent_free(ctx); js_agent_free(ctx);
JS_FreeContext(ctx); JS_FreeContext(ctx);
js_std_free_handlers(rt);
JS_FreeRuntime(rt); JS_FreeRuntime(rt);
atomic_inc(&test_count); atomic_inc(&test_count);
@ -1757,8 +1782,10 @@ int run_test(const char *filename, int *msec)
} }
harness = harnessbuf; harness = harnessbuf;
} }
if (!local) {
namelist_add(ip, NULL, "sta.js"); namelist_add(ip, NULL, "sta.js");
namelist_add(ip, NULL, "assert.js"); namelist_add(ip, NULL, "assert.js");
}
/* extract the YAML frontmatter */ /* extract the YAML frontmatter */
desc = extract_desc(buf, '-'); desc = extract_desc(buf, '-');
if (desc) { if (desc) {
@ -1874,6 +1901,9 @@ int run_test(const char *filename, int *msec)
atomic_inc(&test_skipped); atomic_inc(&test_skipped);
ret = -2; ret = -2;
} else { } else {
if (local) {
is_module = JS_DetectModule(buf, buf_len);
}
if (is_module) { if (is_module) {
eval_flags = JS_EVAL_TYPE_MODULE; eval_flags = JS_EVAL_TYPE_MODULE;
} else { } else {
@ -2070,6 +2100,8 @@ int main(int argc, char **argv)
BOOL is_test262_harness = FALSE; BOOL is_test262_harness = FALSE;
BOOL is_module = FALSE; BOOL is_module = FALSE;
js_std_set_worker_new_context_func(JS_NewCustomContext);
tls = &(ThreadLocalStorage){}; tls = &(ThreadLocalStorage){};
init_thread_local_storage(tls); init_thread_local_storage(tls);
js_mutex_init(&stats_mutex); js_mutex_init(&stats_mutex);

8
tests.conf Normal file
View file

@ -0,0 +1,8 @@
[config]
local=yes
verbose=yes
testdir=tests
[exclude]
tests/microbench.js
tests/test_worker_module.js

View file

@ -90,6 +90,7 @@ function test_popen()
{ {
var str, f, fname = "tmp_file.txt"; var str, f, fname = "tmp_file.txt";
var content = "hello world"; var content = "hello world";
var cmd = isWin ? "type" : "cat";
f = std.open(fname, "w"); f = std.open(fname, "w");
f.puts(content); f.puts(content);
@ -98,8 +99,8 @@ function test_popen()
/* test loadFile */ /* test loadFile */
assert(std.loadFile(fname), content); assert(std.loadFile(fname), content);
/* execute the 'cat' shell command */ /* execute shell command */
f = std.popen("cat " + fname, "r"); f = std.popen(cmd + " " + fname, "r");
str = f.readAsString(); str = f.readAsString();
f.close(); f.close();