// 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.

import 'package:async_helper/async_helper.dart';
import 'package:compiler/src/common/names.dart';
import 'package:compiler/src/commandline_options.dart';
import 'package:expect/expect.dart';
import 'memory_compiler.dart';

main() {
  asyncTest(() async {
    DiagnosticCollector collector = new DiagnosticCollector();
    await runCompiler(
        entryPoint: Uris.dart_html,
        diagnosticHandler: collector,
        options: [Flags.analyzeAll, Flags.verbose]);
    int allNativeUsedCount =
        collector.verboseInfos.where((CollectedMessage message) {
      return message.text.startsWith('All native types marked as used due to ');
    }).length;
    Expect.equals(
        1, allNativeUsedCount, "Unexpected message count: $allNativeUsedCount");
  });
}
