Index: test/cctest/test-strings.cc |
diff --git a/test/cctest/test-strings.cc b/test/cctest/test-strings.cc |
index ef13c4dadf682f6e178dce71c9e70009d703a7e9..c0b2cbf3caf934f920da34df7f98a5cbf48c5023 100644 |
--- a/test/cctest/test-strings.cc |
+++ b/test/cctest/test-strings.cc |
@@ -1292,6 +1292,42 @@ TEST(RobustSubStringStub) { |
} |
+namespace { |
+ |
+int* global_use_counts = NULL; |
+ |
+void MockUseCounterCallback(v8::Isolate* isolate, |
+ v8::Isolate::UseCounterFeature feature) { |
+ ++global_use_counts[feature]; |
+} |
+} |
+ |
+ |
+TEST(CountBreakIterator) { |
+ CcTest::InitializeVM(); |
+ v8::HandleScope scope(CcTest::isolate()); |
+ LocalContext context; |
+ int use_counts[v8::Isolate::kUseCounterFeatureCount] = {}; |
+ global_use_counts = use_counts; |
+ CcTest::isolate()->SetUseCounterCallback(MockUseCounterCallback); |
+ CHECK_EQ(0, use_counts[v8::Isolate::kBreakIterator]); |
+ v8::Local<v8::Value> result = CompileRun( |
+ "(function() {" |
+ " if (!this.Intl) return 0;" |
+ " var iterator = Intl.v8BreakIterator(['en']);" |
+ " iterator.adoptText('Now is the time');" |
+ " iterator.next();" |
+ " return iterator.next();" |
+ "})();"); |
+ CHECK(result->IsNumber()); |
+ int uses = result->ToInt32()->Value() == 0 ? 0 : 1; |
+ CHECK_EQ(uses, use_counts[v8::Isolate::kBreakIterator]); |
+ // Make sure GC cleans up the break iterator, so we don't get a memory leak |
+ // reported by ASAN. |
+ CcTest::isolate()->LowMemoryNotification(); |
+} |
+ |
+ |
TEST(StringReplaceAtomTwoByteResult) { |
CcTest::InitializeVM(); |
v8::HandleScope scope(CcTest::isolate()); |