diff --git a/src/webgpu/idl/constructable.spec.ts b/src/webgpu/idl/constructable.spec.ts new file mode 100644 index 000000000000..8fd9d08d3c81 --- /dev/null +++ b/src/webgpu/idl/constructable.spec.ts @@ -0,0 +1,54 @@ +export const description = ` +Test that constructable WebGPU objects are actually constructable. +`; + +import { makeTestGroup } from './../../common/framework/test_group.js'; +import { IDLTest } from './idl_test.js'; + +export const g = makeTestGroup(IDLTest); + +g.test('gpu_errors') + .desc('tests that GPUErrors are constructable') + .params(u => + u.combine('errorType', [ + 'GPUInternalError', + 'GPUOutOfMemoryError', + 'GPUValidationError', + ] as const) + ) + .fn(t => { + const { errorType } = t.params; + const Ctor = globalThis[errorType]; + const msg = 'this is a test'; + const error = new Ctor(msg); + t.expect(error.message === msg); + }); + +const pipelineErrorOptions: GPUPipelineErrorInit[] = [ + { reason: 'validation' }, + { reason: 'internal' }, +]; + +g.test('pipeline_errors') + .desc('tests that GPUPipelineError is constructable') + .params(u => + u // + .combine('msg', [undefined, 'some msg']) + .combine('options', pipelineErrorOptions) + ) + .fn(t => { + const { msg, options } = t.params; + const error = new GPUPipelineError(msg, options); + const expectedMsg = msg || ''; + t.expect(error.message === expectedMsg); + t.expect(error.reason === options.reason); + }); + +g.test('uncaptured_error_event') + .desc('tests that GPUUncapturedErrorEvent is constructable') + .fn(t => { + const msg = 'this is a test'; + const error = new GPUValidationError(msg); + const event = new GPUUncapturedErrorEvent('uncapturedError', { error }); + t.expect(event.error === error); + }); diff --git a/src/webgpu/listing_meta.json b/src/webgpu/listing_meta.json index 457e33181cf3..261de29a8ffb 100644 --- a/src/webgpu/listing_meta.json +++ b/src/webgpu/listing_meta.json @@ -874,6 +874,9 @@ "webgpu:idl,constants,flags:ShaderStage,values:*": { "subcaseMS": 0.034 }, "webgpu:idl,constants,flags:TextureUsage,count:*": { "subcaseMS": 0.101 }, "webgpu:idl,constants,flags:TextureUsage,values:*": { "subcaseMS": 0.040 }, + "webgpu:idl,constructable:gpu_errors:*": { "subcaseMS": 0.101 }, + "webgpu:idl,constructable:pipeline_errors:*": { "subcaseMS": 0.101 }, + "webgpu:idl,constructable:uncaptured_error_event:*": { "subcaseMS": 0.101 }, "webgpu:shader,execution,expression,binary,af_addition:scalar:*": { "subcaseMS": 815.300 }, "webgpu:shader,execution,expression,binary,af_addition:scalar_vector:*": { "subcaseMS": 1803.434 }, "webgpu:shader,execution,expression,binary,af_addition:vector:*": { "subcaseMS": 719.600 },