Index: tests/lib/mirrors/invocation_fuzz_test.dart |
diff --git a/tests/lib/mirrors/invocation_fuzz_test.dart b/tests/lib/mirrors/invocation_fuzz_test.dart |
deleted file mode 100644 |
index aa0660aa7999f56970b185b19b8a5b7c32fdd94e..0000000000000000000000000000000000000000 |
--- a/tests/lib/mirrors/invocation_fuzz_test.dart |
+++ /dev/null |
@@ -1,162 +0,0 @@ |
-// Copyright (c) 2014, 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. |
- |
-// This test reflectively enumerates all the methods in the system and tries to |
-// invoke them will all nulls. This may result in Dart exceptions or hangs, but |
-// should never result in crashes or JavaScript exceptions. |
- |
-library test.invoke_natives; |
- |
-import 'dart:mirrors'; |
-import 'dart:async'; |
-import 'package:expect/expect.dart'; |
- |
-// Methods to be skipped, by qualified name. |
-var blacklist = [ |
- // Don't recurse on this test. |
- 'test.invoke_natives', |
- |
- // Don't exit the test pre-maturely. |
- 'dart.io.exit', |
- |
- // Don't run blocking io calls. |
- new RegExp(r".*Sync$"), |
- |
- // These prevent the test from exiting. |
- 'dart.async._scheduleAsyncCallback', |
- 'dart.async._setTimerFactoryClosure', |
- |
- 'dart.isolate._startIsolate', |
- 'dart.io.sleep', |
- 'dart.io.HttpServer.HttpServer.listenOn', |
- |
- // These either cause the VM to segfault or throw uncatchable API errors. |
- // TODO(15274): Fix them and remove from blacklist. |
- 'dart.io._IOService.dispatch', |
- new RegExp(r'.*_RandomAccessFile.*'), |
- 'dart.io._StdIOUtils._socketType', |
- 'dart.io._StdIOUtils._getStdioOutputStream', |
- 'dart.io._Filter.newZLibInflateFilter', |
- 'dart.io._Filter.newZLibDeflateFilter', |
- 'dart.io._FileSystemWatcher._listenOnSocket', |
-]; |
- |
-bool isBlacklisted(Symbol qualifiedSymbol) { |
- var qualifiedString = MirrorSystem.getName(qualifiedSymbol); |
- for (var pattern in blacklist) { |
- if (qualifiedString.contains(pattern)) return true; |
- } |
- return false; |
-} |
- |
-class Task { |
- var name; |
- var action; |
-} |
-var queue = new List(); |
- |
-checkMethod(MethodMirror m, ObjectMirror target, [origin]) { |
- if (isBlacklisted(m.qualifiedName)) return; |
- |
- var task = new Task(); |
- task.name = '${MirrorSystem.getName(m.qualifiedName)} from $origin'; |
- |
- if (m.isRegularMethod) { |
- task.action = |
- () => target.invoke(m.simpleName, new List(m.parameters.length)); |
- } else if (m.isGetter) { |
- task.action = |
- () => target.getField(m.simpleName); |
- } else if (m.isSetter) { |
- task.action = |
- () => target.setField(m.simpleName, null); |
- } else if (m.isConstructor) { |
- return; |
- } else { |
- throw "Unexpected method kind"; |
- } |
- |
- queue.add(task); |
-} |
- |
-checkInstance(instanceMirror, origin) { |
- ClassMirror klass = instanceMirror.type; |
- while (klass != null) { |
- instanceMirror.type.declarations.values |
- .where((d) => d is MethodMirror && !d.isStatic) |
- .forEach((m) => checkMethod(m, instanceMirror, origin)); |
- klass = klass.superclass; |
- } |
-} |
- |
-checkClass(classMirror) { |
- classMirror.declarations.values |
- .where((d) => d is MethodMirror && d.isStatic) |
- .forEach((m) => checkMethod(m, classMirror)); |
- |
- classMirror.declarations.values |
- .where((d) => d is MethodMirror && d.isConstructor) |
- .forEach((m) { |
- if (isBlacklisted(m.qualifiedName)) return; |
- var task = new Task(); |
- task.name = MirrorSystem.getName(m.qualifiedName); |
- |
- task.action = () { |
- var instance = classMirror.newInstance(m.constructorName, |
- new List(m.parameters.length)); |
- checkInstance(instance, task.name); |
- }; |
- queue.add(task); |
- }); |
-} |
- |
-checkLibrary(libraryMirror) { |
- print(libraryMirror.simpleName); |
- if (isBlacklisted(libraryMirror.qualifiedName)) return; |
- |
- libraryMirror.declarations.values |
- .where((d) => d is ClassMirror) |
- .forEach(checkClass); |
- |
- libraryMirror.declarations.values |
- .where((d) => d is MethodMirror) |
- .forEach((m) => checkMethod(m, libraryMirror)); |
-} |
- |
-var testZone; |
- |
-doOneTask() { |
- if (queue.length == 0) { |
- print('Done'); |
- return; |
- } |
- |
- var task = queue.removeLast(); |
- print(task.name); |
- try { |
- task.action(); |
- } catch(e) {} |
- |
- // Register the next task in a timer callback so as to yield to async code |
- // scheduled in the current task. This isn't necessary for the test itself, |
- // but is helpful when trying to figure out which function is responsible for |
- // a crash. |
- testZone.createTimer(Duration.ZERO, doOneTask); |
-} |
- |
-main([args]) { |
- currentMirrorSystem().libraries.values.forEach(checkLibrary); |
- |
- var valueObjects = |
- [true, false, null, |
- 0, 0xEFFFFFF, 0xFFFFFFFF, 0xFFFFFFFFFFFFFFFF, |
- "foo", 'blåbærgrød', 'Îñţérñåţîöñåļîžåţîờñ']; |
- valueObjects.forEach((v) => checkInstance(reflect(v), 'value object')); |
- |
- uncaughtErrorHandler(self, parent, zone, error, stack) {}; |
- var zoneSpec = |
- new ZoneSpecification(handleUncaughtError: uncaughtErrorHandler); |
- testZone = Zone.current.fork(specification: zoneSpec); |
- testZone.createTimer(Duration.ZERO, doOneTask); |
-} |