mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
Handle promise rejections in tests
This commit is contained in:
@@ -122,6 +122,7 @@ const Scanner = struct {
|
||||
pub fn scan(this: *Scanner, path_literal: string) void {
|
||||
var parts = &[_]string{ this.fs.top_level_dir, path_literal };
|
||||
const path = this.fs.absBuf(parts, &this.scan_dir_buf);
|
||||
|
||||
var root = this.readDirWithName(path, null) catch |err| {
|
||||
if (err == error.NotDir) {
|
||||
if (this.isTestFile(path)) {
|
||||
@@ -274,9 +275,10 @@ pub const TestCommand = struct {
|
||||
scanner.dirs_to_scan.deinit();
|
||||
|
||||
const test_files = scanner.results.toOwnedSlice();
|
||||
|
||||
// vm.bundler.fs.fs.readDirectory(_dir: string, _handle: ?std.fs.Dir)
|
||||
runAllTests(reporter, vm, test_files, ctx.allocator);
|
||||
if (test_files.len > 0) {
|
||||
// vm.bundler.fs.fs.readDirectory(_dir: string, _handle: ?std.fs.Dir)
|
||||
runAllTests(reporter, vm, test_files, ctx.allocator);
|
||||
}
|
||||
|
||||
Output.pretty("\n", .{});
|
||||
Output.flush();
|
||||
@@ -385,12 +387,13 @@ pub const TestCommand = struct {
|
||||
vm.tick();
|
||||
}
|
||||
|
||||
var result = promise.result(vm.global.vm());
|
||||
if (result.isError() or
|
||||
result.isAggregateError(vm.global) or
|
||||
result.isException(vm.global.vm()))
|
||||
{
|
||||
vm.defaultErrorHandler(result, null);
|
||||
switch (promise.status(vm.global.vm())) {
|
||||
.Rejected => {
|
||||
var result = promise.result(vm.global.vm());
|
||||
vm.defaultErrorHandler(result, null);
|
||||
return;
|
||||
},
|
||||
else => {},
|
||||
}
|
||||
|
||||
reporter.updateDots();
|
||||
|
||||
@@ -613,21 +613,25 @@ pub const TestScope = struct {
|
||||
) Result {
|
||||
var vm = VirtualMachine.vm;
|
||||
|
||||
var promise = JSC.JSPromise.resolvedPromise(
|
||||
var promise = JSC.JSInternalPromise.resolvedPromise(
|
||||
vm.global,
|
||||
js.JSObjectCallAsFunctionReturnValue(vm.global.ref(), this.callback, null, 0, null),
|
||||
);
|
||||
js.JSValueUnprotect(vm.global.ref(), this.callback);
|
||||
defer js.JSValueUnprotect(vm.global.ref(), this.callback);
|
||||
this.callback = null;
|
||||
|
||||
while (promise.status(vm.global.vm()) == JSC.JSPromise.Status.Pending) {
|
||||
vm.tick();
|
||||
}
|
||||
var result = promise.result(vm.global.vm());
|
||||
|
||||
if (result.isException(vm.global.vm()) or result.isError() or result.isAggregateError(vm.global)) {
|
||||
vm.defaultErrorHandler(result, null);
|
||||
return .{ .fail = this.counter.actual };
|
||||
switch (promise.status(vm.global.vm())) {
|
||||
.Rejected => {
|
||||
vm.defaultErrorHandler(promise.result(vm.global.vm()), null);
|
||||
return .{ .fail = this.counter.actual };
|
||||
},
|
||||
else => {
|
||||
// don't care about the result
|
||||
_ = promise.result(vm.global.vm());
|
||||
},
|
||||
}
|
||||
|
||||
if (this.counter.expected > 0 and this.counter.expected < this.counter.actual) {
|
||||
@@ -737,9 +741,18 @@ pub const DescribeScope = struct {
|
||||
|
||||
{
|
||||
var result = js.JSObjectCallAsFunctionReturnValue(ctx, callback, thisObject, 0, null);
|
||||
if (result.isException(ctx.ptr().vm())) {
|
||||
exception.* = result.asObjectRef();
|
||||
return null;
|
||||
var vm = JSC.VirtualMachine.vm;
|
||||
const promise = JSInternalPromise.resolvedPromise(ctx.ptr(), result);
|
||||
while (promise.status(ctx.ptr().vm()) == JSPromise.Status.Pending) {
|
||||
vm.tick();
|
||||
}
|
||||
|
||||
switch (promise.status(ctx.ptr().vm())) {
|
||||
JSPromise.Status.Fulfilled => {},
|
||||
else => {
|
||||
exception.* = promise.result(ctx.ptr().vm()).asObjectRef();
|
||||
return null;
|
||||
},
|
||||
}
|
||||
}
|
||||
this.runTests(ctx);
|
||||
|
||||
Reference in New Issue
Block a user