@@ -867,6 +867,67 @@ for (const fn of [uneval, stringify]) {
867867 assert . equal ( e . path , '.object.invalid' ) ;
868868 }
869869 } ) ;
870+
871+ uvu . test ( `${ fn . name } populates error.value with the problematic value` , ( ) => {
872+ const testFn = function invalid ( ) { } ;
873+ try {
874+ fn ( {
875+ foo : {
876+ array : [ testFn ]
877+ }
878+ } ) ;
879+ } catch ( e ) {
880+ assert . equal ( e . name , 'DevalueError' ) ;
881+ assert . equal ( e . message , 'Cannot stringify a function' ) ;
882+ assert . equal ( e . value , testFn ) ;
883+ }
884+ } ) ;
885+
886+ uvu . test ( `${ fn . name } populates error.root with the root value` , ( ) => {
887+ const root = {
888+ foo : {
889+ array : [ function invalid ( ) { } ]
890+ }
891+ } ;
892+ try {
893+ fn ( root ) ;
894+ } catch ( e ) {
895+ assert . equal ( e . name , 'DevalueError' ) ;
896+ assert . equal ( e . message , 'Cannot stringify a function' ) ;
897+ assert . equal ( e . root , root ) ;
898+ }
899+ } ) ;
900+
901+ uvu . test ( `${ fn . name } includes value and root on arbitrary non-POJOs error` , ( ) => {
902+ class Whatever { }
903+ const problematicValue = new Whatever ( ) ;
904+ const root = {
905+ foo : {
906+ [ 'string-key' ] : new Map ( [ [ 'key' , problematicValue ] ] )
907+ }
908+ } ;
909+ try {
910+ fn ( root ) ;
911+ } catch ( e ) {
912+ assert . equal ( e . name , 'DevalueError' ) ;
913+ assert . equal ( e . message , 'Cannot stringify arbitrary non-POJOs' ) ;
914+ assert . equal ( e . value , problematicValue ) ;
915+ assert . equal ( e . root , root ) ;
916+ }
917+ } ) ;
918+
919+ uvu . test ( `${ fn . name } includes value and root on symbolic keys error` , ( ) => {
920+ const symbolKey = Symbol ( 'key' ) ;
921+ const root = { [ symbolKey ] : 'value' } ;
922+ try {
923+ fn ( root ) ;
924+ } catch ( e ) {
925+ assert . equal ( e . name , 'DevalueError' ) ;
926+ assert . equal ( e . message , 'Cannot stringify POJOs with symbolic keys' ) ;
927+ assert . equal ( e . value , root ) ;
928+ assert . equal ( e . root , root ) ;
929+ }
930+ } ) ;
870931}
871932
872933uvu . test ( 'does not create duplicate parameter names' , ( ) => {
0 commit comments