@@ -764,6 +764,9 @@ namespace JsRTApiTest
764764 {
765765 bool value;
766766 JsValueRef exception = JS_INVALID_REFERENCE ;
767+ JsValueRef exceptionMetadata = JS_INVALID_REFERENCE ;
768+ JsValueRef metadataValue = JS_INVALID_REFERENCE ;
769+ JsPropertyIdRef property = JS_INVALID_REFERENCE ;
767770 JsValueType type;
768771
769772 REQUIRE (JsHasException (&value) == JsNoError);
@@ -782,6 +785,84 @@ namespace JsRTApiTest
782785 REQUIRE (JsSetException (exception) == JsNoError);
783786 REQUIRE (JsHasException (&value) == JsNoError);
784787 CHECK (value == true );
788+
789+ REQUIRE (JsGetAndClearExceptionWithMetadata (&exceptionMetadata) == JsNoError);
790+ REQUIRE (JsHasException (&value) == JsNoError);
791+ CHECK (value == false );
792+
793+ REQUIRE (JsGetPropertyIdFromName (_u (" exception" ), &property) == JsNoError);
794+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
795+ CHECK (metadataValue == exception);
796+
797+ REQUIRE (JsGetPropertyIdFromName (_u (" line" ), &property) == JsNoError);
798+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
799+ REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
800+ CHECK (type == JsNumber);
801+
802+ REQUIRE (JsGetPropertyIdFromName (_u (" column" ), &property) == JsNoError);
803+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
804+ REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
805+ CHECK (type == JsNumber);
806+
807+ REQUIRE (JsGetPropertyIdFromName (_u (" length" ), &property) == JsNoError);
808+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
809+ REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
810+ CHECK (type == JsNumber);
811+
812+ REQUIRE (JsGetPropertyIdFromName (_u (" url" ), &property) == JsNoError);
813+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
814+ REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
815+ CHECK (type == JsString);
816+
817+ REQUIRE (JsGetPropertyIdFromName (_u (" source" ), &property) == JsNoError);
818+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
819+ REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
820+ CHECK (type == JsString);
821+
822+
823+ REQUIRE (JsHasException (&value) == JsNoError);
824+ CHECK (value == false );
825+ REQUIRE (JsGetAndClearExceptionWithMetadata (&exceptionMetadata) == JsErrorInvalidArgument);
826+ CHECK (exceptionMetadata == JS_INVALID_REFERENCE );
827+
828+
829+ REQUIRE (JsRunScript (_u (" @ bad syntax" ), JS_SOURCE_CONTEXT_NONE , _u (" " ), nullptr ) == JsErrorScriptCompile);
830+ REQUIRE (JsHasException (&value) == JsNoError);
831+ CHECK (value == true );
832+
833+ REQUIRE (JsGetAndClearExceptionWithMetadata (&exceptionMetadata) == JsNoError);
834+ REQUIRE (JsHasException (&value) == JsNoError);
835+ CHECK (value == false );
836+
837+ REQUIRE (JsGetPropertyIdFromName (_u (" exception" ), &property) == JsNoError);
838+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
839+ REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
840+ CHECK (type == JsError);
841+
842+ REQUIRE (JsGetPropertyIdFromName (_u (" line" ), &property) == JsNoError);
843+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
844+ REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
845+ CHECK (type == JsNumber);
846+
847+ REQUIRE (JsGetPropertyIdFromName (_u (" column" ), &property) == JsNoError);
848+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
849+ REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
850+ CHECK (type == JsNumber);
851+
852+ REQUIRE (JsGetPropertyIdFromName (_u (" length" ), &property) == JsNoError);
853+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
854+ REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
855+ CHECK (type == JsNumber);
856+
857+ REQUIRE (JsGetPropertyIdFromName (_u (" url" ), &property) == JsNoError);
858+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
859+ REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
860+ CHECK (type == JsString);
861+
862+ REQUIRE (JsGetPropertyIdFromName (_u (" source" ), &property) == JsNoError);
863+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
864+ REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
865+ CHECK (type == JsString);
785866 }
786867
787868 TEST_CASE (" ApiTest_ExceptionHandlingTest" , " [ApiTest]" )
0 commit comments