@@ -1005,6 +1005,41 @@ namespace JsRTApiTest
1005
1005
JsRTApiTest::RunWithAttributes (JsRTApiTest::EngineFlagTest);
1006
1006
}
1007
1007
1008
+ void CheckExceptionMetadata (JsValueRef exceptionMetadata)
1009
+ {
1010
+ JsPropertyIdRef property = JS_INVALID_REFERENCE;
1011
+ JsValueRef metadataValue = JS_INVALID_REFERENCE;
1012
+ JsValueType type;
1013
+ REQUIRE (JsGetPropertyIdFromName (_u (" exception" ), &property) == JsNoError);
1014
+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1015
+ REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1016
+ CHECK (type == JsError);
1017
+
1018
+ REQUIRE (JsGetPropertyIdFromName (_u (" line" ), &property) == JsNoError);
1019
+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1020
+ REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1021
+ CHECK (type == JsNumber);
1022
+
1023
+ REQUIRE (JsGetPropertyIdFromName (_u (" column" ), &property) == JsNoError);
1024
+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1025
+ REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1026
+ CHECK (type == JsNumber);
1027
+
1028
+ REQUIRE (JsGetPropertyIdFromName (_u (" length" ), &property) == JsNoError);
1029
+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1030
+ REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1031
+ CHECK (type == JsNumber);
1032
+
1033
+ REQUIRE (JsGetPropertyIdFromName (_u (" url" ), &property) == JsNoError);
1034
+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1035
+ REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1036
+ CHECK (type == JsString);
1037
+
1038
+ REQUIRE (JsGetPropertyIdFromName (_u (" source" ), &property) == JsNoError);
1039
+ REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1040
+ REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1041
+ CHECK (type == JsString);
1042
+ }
1008
1043
void ExceptionHandlingTest (JsRuntimeAttributes attributes, JsRuntimeHandle runtime)
1009
1044
{
1010
1045
bool value;
@@ -1039,31 +1074,7 @@ namespace JsRTApiTest
1039
1074
REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1040
1075
CHECK (metadataValue == exception);
1041
1076
1042
- REQUIRE (JsGetPropertyIdFromName (_u (" line" ), &property) == JsNoError);
1043
- REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1044
- REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1045
- CHECK (type == JsNumber);
1046
-
1047
- REQUIRE (JsGetPropertyIdFromName (_u (" column" ), &property) == JsNoError);
1048
- REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1049
- REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1050
- CHECK (type == JsNumber);
1051
-
1052
- REQUIRE (JsGetPropertyIdFromName (_u (" length" ), &property) == JsNoError);
1053
- REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1054
- REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1055
- CHECK (type == JsNumber);
1056
-
1057
- REQUIRE (JsGetPropertyIdFromName (_u (" url" ), &property) == JsNoError);
1058
- REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1059
- REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1060
- CHECK (type == JsString);
1061
-
1062
- REQUIRE (JsGetPropertyIdFromName (_u (" source" ), &property) == JsNoError);
1063
- REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1064
- REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1065
- CHECK (type == JsString);
1066
-
1077
+ CheckExceptionMetadata (exceptionMetadata);
1067
1078
1068
1079
REQUIRE (JsHasException (&value) == JsNoError);
1069
1080
CHECK (value == false );
@@ -1079,35 +1090,18 @@ namespace JsRTApiTest
1079
1090
REQUIRE (JsHasException (&value) == JsNoError);
1080
1091
CHECK (value == false );
1081
1092
1082
- REQUIRE (JsGetPropertyIdFromName (_u (" exception" ), &property) == JsNoError);
1083
- REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1084
- REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1085
- CHECK (type == JsError);
1086
-
1087
- REQUIRE (JsGetPropertyIdFromName (_u (" line" ), &property) == JsNoError);
1088
- REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1089
- REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1090
- CHECK (type == JsNumber);
1093
+ CheckExceptionMetadata (exceptionMetadata);
1091
1094
1092
- REQUIRE (JsGetPropertyIdFromName (_u (" column" ), &property) == JsNoError);
1093
- REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1094
- REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1095
- CHECK (type == JsNumber);
1096
-
1097
- REQUIRE (JsGetPropertyIdFromName (_u (" length" ), &property) == JsNoError);
1098
- REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1099
- REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1100
- CHECK (type == JsNumber);
1095
+ // Test unicode characters
1096
+ REQUIRE (JsRunScript (_u (" function main() {\n var x = '\u20ac ' + test();\n }\n main();" ), JS_SOURCE_CONTEXT_NONE, _u (" " ), nullptr ) == JsErrorScriptException);
1097
+ REQUIRE (JsHasException (&value) == JsNoError);
1098
+ CHECK (value == true );
1101
1099
1102
- REQUIRE (JsGetPropertyIdFromName (_u (" url" ), &property) == JsNoError);
1103
- REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1104
- REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1105
- CHECK (type == JsString);
1100
+ REQUIRE (JsGetAndClearExceptionWithMetadata (&exceptionMetadata) == JsNoError);
1101
+ REQUIRE (JsHasException (&value) == JsNoError);
1102
+ CHECK (value == false );
1106
1103
1107
- REQUIRE (JsGetPropertyIdFromName (_u (" source" ), &property) == JsNoError);
1108
- REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1109
- REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1110
- CHECK (type == JsString);
1104
+ CheckExceptionMetadata (exceptionMetadata);
1111
1105
1112
1106
// Following requires eval to be enabled - no point in testing it if we've disabled eval
1113
1107
if (!(attributes & JsRuntimeAttributeDisableEval))
@@ -1120,35 +1114,7 @@ namespace JsRTApiTest
1120
1114
REQUIRE (JsHasException (&value) == JsNoError);
1121
1115
CHECK (value == false );
1122
1116
1123
- REQUIRE (JsGetPropertyIdFromName (_u (" exception" ), &property) == JsNoError);
1124
- REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1125
- REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1126
- CHECK (type == JsError);
1127
-
1128
- REQUIRE (JsGetPropertyIdFromName (_u (" line" ), &property) == JsNoError);
1129
- REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1130
- REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1131
- CHECK (type == JsNumber);
1132
-
1133
- REQUIRE (JsGetPropertyIdFromName (_u (" column" ), &property) == JsNoError);
1134
- REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1135
- REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1136
- CHECK (type == JsNumber);
1137
-
1138
- REQUIRE (JsGetPropertyIdFromName (_u (" length" ), &property) == JsNoError);
1139
- REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1140
- REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1141
- CHECK (type == JsNumber);
1142
-
1143
- REQUIRE (JsGetPropertyIdFromName (_u (" url" ), &property) == JsNoError);
1144
- REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1145
- REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1146
- CHECK (type == JsString);
1147
-
1148
- REQUIRE (JsGetPropertyIdFromName (_u (" source" ), &property) == JsNoError);
1149
- REQUIRE (JsGetProperty (exceptionMetadata, property, &metadataValue) == JsNoError);
1150
- REQUIRE (JsGetValueType (metadataValue, &type) == JsNoError);
1151
- CHECK (type == JsString);
1117
+ CheckExceptionMetadata (exceptionMetadata);
1152
1118
}
1153
1119
}
1154
1120
0 commit comments