Index: runtime/vm/dart_api_impl_test.cc |
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc |
index 6d8626a952b19d6bb7bd69a3b0c8e6fafefe147a..c20111fcef28175ec732b37b67c85dd8d0f18ef6 100644 |
--- a/runtime/vm/dart_api_impl_test.cc |
+++ b/runtime/vm/dart_api_impl_test.cc |
@@ -7733,4 +7733,62 @@ TEST_CASE(ExternalStringDeoptimize) { |
EXPECT_EQ(260, value); |
} |
+ |
+TEST_CASE(ExternalStringTrimDoubleParse) { |
+ const char* kScriptChars = |
+ "String str = 'A';\n" |
+ "class A {\n" |
+ " static change_str(String s) native 'A_change_str';\n" |
+ "}\n" |
+ "main() {\n" |
+ " var externalOneByteString = ' 0.2\\xA0 ';\n;" |
+ " A.change_str(externalOneByteString);\n" |
+ " var externalTwoByteString = ' \\u{2029}0.6\\u{2029} ';\n" |
+ " A.change_str(externalTwoByteString);\n" |
+ " var x = double.parse(externalOneByteString);\n" |
+ " var y = double.parse(externalTwoByteString);\n" |
+ " return ((x + y) * 10).toInt();\n" |
+ "}\n"; |
+ Dart_Handle lib = |
+ TestCase::LoadTestScript(kScriptChars, |
+ &ExternalStringDeoptimize_native_lookup); |
+ Dart_Handle result = Dart_Invoke(lib, |
+ NewString("main"), |
+ 0, |
+ NULL); |
+ int64_t value = 0; |
+ result = Dart_IntegerToInt64(result, &value); |
+ EXPECT_VALID(result); |
+ EXPECT_EQ(8, value); |
+} |
+ |
+ |
+TEST_CASE(ExternalStringDoubleParse) { |
+ const char* kScriptChars = |
+ "String str = 'A';\n" |
+ "class A {\n" |
+ " static change_str(String s) native 'A_change_str';\n" |
+ "}\n" |
+ "main() {\n" |
+ " var externalOneByteString = '0.2';\n;" |
+ " A.change_str(externalOneByteString);\n" |
+ " var externalTwoByteString = '0.6';\n" |
+ " A.change_str(externalTwoByteString);\n" |
+ " var x = double.parse(externalOneByteString);\n" |
+ " var y = double.parse(externalTwoByteString);\n" |
+ " return ((x + y) * 10).toInt();\n" |
+ "}\n"; |
+ Dart_Handle lib = |
+ TestCase::LoadTestScript(kScriptChars, |
+ &ExternalStringDeoptimize_native_lookup); |
+ Dart_Handle result = Dart_Invoke(lib, |
+ NewString("main"), |
+ 0, |
+ NULL); |
+ int64_t value = 0; |
+ result = Dart_IntegerToInt64(result, &value); |
+ EXPECT_VALID(result); |
+ EXPECT_EQ(8, value); |
+} |
+ |
} // namespace dart |