Index: runtime/observatory/tests/service/regexp_function_test.dart |
diff --git a/runtime/observatory/tests/service/regexp_function_test.dart b/runtime/observatory/tests/service/regexp_function_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ace1e585927b166aa002064ab75ca4ba423fade1 |
--- /dev/null |
+++ b/runtime/observatory/tests/service/regexp_function_test.dart |
@@ -0,0 +1,62 @@ |
+// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+// VMOptions= |
+// VMOptions=--interpret_irregexp |
+ |
+import "package:expect/expect.dart"; |
+import 'package:observatory/service_io.dart'; |
+import 'package:unittest/unittest.dart'; |
+import 'test_helper.dart'; |
+ |
+var regex0; |
+var regex; |
+ |
+void script() { |
+ // Check the internal NUL doesn't trip up the name scrubbing in the vm. |
+ regex0 = new RegExp("with internal \u{0} NUL"); |
+ regex = new RegExp(r"(\w+)"); |
+ String str = "Parse my string"; |
+ Iterable<Match> matches = regex.allMatches(str); // Run to generate bytecode. |
+ Expect.equals(3, matches.length); |
+} |
+ |
+var tests = [ |
+ |
+(Isolate isolate) async { |
+ Library lib = isolate.rootLibrary; |
+ await lib.load(); |
+ |
+ Field field0 = lib.variables.singleWhere((v) => v.name == 'regex0'); |
+ await field0.load(); // No crash due to embedded NUL. |
+ |
+ Field field = lib.variables.singleWhere((v) => v.name == 'regex'); |
+ await field.load(); |
+ Instance regex = field.staticValue; |
+ expect(regex.isInstance, isTrue); |
+ expect(regex.isRegExp, isTrue); |
+ await regex.load(); |
+ |
+ if (regex.oneByteFunction == null) { |
+ // Running with interpreted regexp. |
+ var b1 = await regex.oneByteBytecode.load(); |
+ expect(b1.isTypedData, isTrue); |
+ var b2 = await regex.twoByteBytecode.load(); |
+ expect(b2.isTypedData, isFalse); // No two-byte string subject was used. |
+ } else { |
+ // Running with compiled regexp. |
+ var f1 = await regex.oneByteFunction.load(); |
+ expect(f1 is ServiceFunction, isTrue); |
+ var f2 = await regex.twoByteFunction.load(); |
+ expect(f2 is ServiceFunction, isTrue); |
+ var f3 = await regex.externalOneByteFunction.load(); |
+ expect(f3 is ServiceFunction, isTrue); |
+ var f4 = await regex.externalTwoByteFunction.load(); |
+ expect(f4 is ServiceFunction, isTrue); |
+ } |
+} |
+ |
+]; |
+ |
+main(args) => runIsolateTests(args, tests, testeeBefore: script); |
+ |