blob: a89ec3249f124286e6b6ef3dbbd02cd63eebf98c [file] [log] [blame]
// 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.
// Helper file that can be used to manually test the stability of incremental
// compilation. Currently this test is not run automatically.
import 'dart:async';
import 'dart:io';
import 'dart:developer' show
UserTag;
import 'package:dart2js_incremental/dart2js_incremental.dart' show
IncrementalCompiler;
import 'package:compiler/src/source_file_provider.dart' show
FormattingDiagnosticHandler;
import '../memory_source_file_helper.dart' show
Compiler;
import '../memory_compiler.dart' show
compilerFor;
const bool verbose = false;
main(List<String> arguments) {
Stopwatch sw = new Stopwatch()..start();
Map<String, String> sources = <String, String>{};
for (String argument in arguments) {
Uri uri = new Uri(scheme: 'memory', path: argument);
String source =
new File.fromUri(Uri.base.resolve(argument)).readAsStringSync();
sources['${uri.path}'] = source;
}
sw.stop();
print(sw.elapsedMilliseconds);
compileTests(sources);
}
void compileTests(Map<String, String> sources) {
int testCount = 0;
int skipCount = 0;
Set<String> crashes = new Set<String>();
Compiler memoryCompiler = compilerFor(memorySourceFiles: sources);
FormattingDiagnosticHandler handler = memoryCompiler.handler;
handler.verbose = verbose;
var options = ['--analyze-main'];
if (true || verbose) options.add('--verbose');
IncrementalCompiler compiler = new IncrementalCompiler(
libraryRoot: memoryCompiler.libraryRoot,
inputProvider: memoryCompiler.provider,
outputProvider: memoryCompiler.userOutputProvider,
diagnosticHandler: memoryCompiler.handler,
packageRoot: memoryCompiler.packageRoot,
options: options);
Future.forEach(sources.keys, (String path) {
UserTag.defaultTag.makeCurrent();
if (!path.endsWith('_test.dart')) return new Future.value(null);
testCount++;
for (String brokenTest in brokenTests) {
if (path.endsWith(brokenTest)) {
print('Skipped broken test $path');
skipCount++;
return new Future.value(null);
}
}
Stopwatch sw = new Stopwatch()..start();
return compiler.compile(Uri.parse('memory:$path')).then((bool success) {
UserTag.defaultTag.makeCurrent();
sw.stop();
print('Compiled $path in ${sw.elapsedMilliseconds}');
sw..reset()..start();
}).catchError((error, trace) {
sw.stop();
print('$error\n$trace');
print('Crash when compiling $path after ${sw.elapsedMilliseconds}');
sw..reset()..start();
crashes.add(path);
});
}).then((_) {
percent(i) => '${(i/testCount*100).toStringAsFixed(3)}%';
print('''
Total: $testCount tests
* ${crashes.length} tests (${percent(crashes.length)}) crashed the compiler
* $skipCount tests (${percent(skipCount)}) were skipped
''');
for (String crash in crashes) {
print('Crashed: $crash');
}
if (!crashes.isEmpty) {
throw 'Test had crashes';
}
});
}
Set<String> brokenTests = new Set<String>.from([
// TODO(ahe): Fix the outputProvider to not throw an error.
"/dart2js_extra/deferred/deferred_class_library.dart",
"/dart2js_extra/deferred/deferred_class_library2.dart",
"/dart2js_extra/deferred/deferred_class_test.dart",
"/dart2js_extra/deferred/deferred_constant2_test.dart",
"/dart2js_extra/deferred/deferred_constant3_test.dart",
"/dart2js_extra/deferred/deferred_constant4_test.dart",
"/dart2js_extra/deferred/deferred_constant_test.dart",
"/dart2js_extra/deferred/deferred_function_library.dart",
"/dart2js_extra/deferred/deferred_function_test.dart",
"/dart2js_extra/deferred/deferred_overlapping_lib1.dart",
"/dart2js_extra/deferred/deferred_overlapping_lib2.dart",
"/dart2js_extra/deferred/deferred_overlapping_lib3.dart",
"/dart2js_extra/deferred/deferred_overlapping_test.dart",
"/dart2js_extra/deferred/deferred_unused_classes_test.dart",
"/language/deferred_closurize_load_library_lib.dart",
"/language/deferred_closurize_load_library_test.dart",
"/language/deferred_constraints_constants_lib.dart",
"/language/deferred_constraints_constants_old_syntax_lib.dart",
"/language/deferred_constraints_constants_old_syntax_test.dart",
"/language/deferred_constraints_constants_test.dart",
"/language/deferred_constraints_lib.dart",
"/language/deferred_constraints_lib2.dart",
"/language/deferred_constraints_old_syntax_lib.dart",
"/language/deferred_constraints_type_annotation_old_syntax_test.dart",
"/language/deferred_constraints_type_annotation_test.dart",
"/language/deferred_duplicate_prefix1_test.dart",
"/language/deferred_duplicate_prefix2_test.dart",
"/language/deferred_duplicate_prefix3_test.dart",
"/language/deferred_load_inval_code_lib.dart",
"/language/deferred_load_inval_code_test.dart",
"/language/deferred_load_library_wrong_args_lib.dart",
"/language/deferred_load_library_wrong_args_test.dart",
"/language/deferred_no_prefix_test.dart",
"/language/deferred_no_such_method_lib.dart",
"/language/deferred_no_such_method_test.dart",
"/language/deferred_not_loaded_check_lib.dart",
"/language/deferred_not_loaded_check_test.dart",
"/language/deferred_prefix_constraints_lib.dart",
"/language/deferred_prefix_constraints_lib2.dart",
"/language/deferred_shadow_load_library_lib.dart",
"/language/deferred_shadow_load_library_test.dart",
"/language/bad_constructor_test.dart",
"/language/black_listed_test.dart",
"/language/built_in_identifier_illegal_test.dart",
"/language/built_in_identifier_prefix_test.dart",
"/language/built_in_identifier_test.dart",
"/language/class_cycle2_test.dart",
"/language/class_syntax_test.dart",
"/language/cyclic_typedef_test.dart",
"/language/external_test.dart",
"/language/factory3_negative_test.dart",
"/language/generic_field_mixin4_test.dart",
"/language/generic_field_mixin5_test.dart",
"/language/interface_cycle_test.dart",
"/language/interface_injection1_negative_test.dart",
"/language/interface_injection2_negative_test.dart",
"/language/internal_library_test.dart",
"/language/malformed_inheritance_test.dart",
"/language/metadata_test.dart",
"/language/method_override2_test.dart",
"/language/mixin_illegal_syntax_test.dart",
"/language/mixin_invalid_inheritance1_test.dart",
"/language/null_test.dart",
"/language/override_inheritance_generic_test.dart",
"/language/prefix18_negative_test.dart",
"/language/prefix3_negative_test.dart",
"/language/script2_negative_test.dart",
"/language/setter_declaration2_negative_test.dart",
"/language/source_self_negative_test.dart",
"/language/syntax_test.dart",
"/language/type_variable_bounds2_test.dart",
"/language/type_variable_conflict2_test.dart",
"/language/type_variable_field_initializer_test.dart",
"/language/type_variable_nested_test.dart",
"/language/vm/reflect_core_vm_test.dart",
"/language/vm/regress_14903_test.dart",
]);