@@ -4,6 +4,9 @@ import { isDeno } from "./env.ts";
44import { pick } from "./object.ts" ;
55import { toFsPath } from "./path.ts" ;
66import { createErrorEvent } from "./event.ts" ;
7+ import { isSubclassOf } from "./class.ts" ;
8+ import * as common from "./error/common.ts" ;
9+ import { getErrorConstructor , registerErrorType } from "./error.ts" ;
710
811declare var AggregateError : new ( errors : Error [ ] , message ?: string , options ?: { cause : unknown ; } ) => Error & { errors : Error [ ] ; } ;
912
@@ -315,7 +318,7 @@ describe("Error", () => {
315318 strictEqual ( normalize ( event . filename ) , toFsPath ( import . meta. url ) ) ;
316319
317320 if ( isDeno ) {
318- strictEqual ( event . lineno , 300 ) ;
321+ strictEqual ( event . lineno , 303 ) ;
319322 strictEqual ( event . colno , 21 ) ;
320323 } else {
321324 ok ( event . lineno > 0 ) ;
@@ -335,7 +338,7 @@ describe("Error", () => {
335338 strictEqual ( normalize ( event2 . filename ) , toFsPath ( import . meta. url ) ) ;
336339
337340 if ( isDeno ) {
338- strictEqual ( event2 . lineno , 325 ) ;
341+ strictEqual ( event2 . lineno , 328 ) ;
339342 strictEqual ( event2 . colno , 22 ) ;
340343 } else {
341344 ok ( event2 . lineno > 0 ) ;
@@ -460,4 +463,53 @@ describe("Error", () => {
460463 ok ( ! err2 . isCausedBy ( Error3 ) ) ;
461464 } ) ;
462465 } ) ;
466+
467+ describe ( "registerErrorType" , ( ) => {
468+ it ( "register and retrieve" , ( ) => {
469+ class MyError extends Exception {
470+ constructor ( message : string , options : ErrorOptions = { } ) {
471+ super ( message , { ...options , name : "MyError" } ) ;
472+ }
473+ }
474+
475+ registerErrorType ( MyError ) ;
476+ strictEqual ( getErrorConstructor ( "MyError" ) , MyError ) ;
477+
478+ const obj = Error . toObject ( new MyError ( "something went wrong" , {
479+ cause : "unknown" ,
480+ } ) ) ;
481+ const err = Error . fromObject ( obj ) ;
482+ strictEqual ( err ?. constructor , MyError ) ;
483+ strictEqual ( err ?. name , obj [ "name" ] ) ;
484+ strictEqual ( err ?. message , obj [ "message" ] ) ;
485+ strictEqual ( err ?. stack , obj [ "stack" ] ) ;
486+ // @ts -ignore
487+ strictEqual ( err ?. cause , obj [ "cause" ] ) ;
488+ // @ts -ignore
489+ strictEqual ( err ?. code , obj [ "code" ] ) ;
490+ } ) ;
491+
492+ it ( "common error types" , ( ) => {
493+ ok ( Object . values ( common ) . some ( ctor => isSubclassOf ( ctor , Exception ) ) ) ;
494+
495+ for ( const ctor of Object . values ( common ) ) {
496+ if ( ! isSubclassOf ( ctor , Exception ) ) {
497+ continue ;
498+ }
499+
500+ const obj = Error . toObject ( new ctor ( "something went wrong" , {
501+ cause : "unknown" ,
502+ } ) ) ;
503+ const err = Error . fromObject ( obj ) ;
504+ strictEqual ( err ?. constructor , ctor ) ;
505+ strictEqual ( err ?. name , obj [ "name" ] ) ;
506+ strictEqual ( err ?. message , obj [ "message" ] ) ;
507+ strictEqual ( err ?. stack , obj [ "stack" ] ) ;
508+ // @ts -ignore
509+ strictEqual ( err ?. cause , obj [ "cause" ] ) ;
510+ // @ts -ignore
511+ strictEqual ( err ?. code , obj [ "code" ] ) ;
512+ }
513+ } ) ;
514+ } ) ;
463515} ) ;
0 commit comments