// Copyright (c) 2013, 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.

library analyze_api;

import "package:expect/expect.dart";
import '../../../sdk/lib/_internal/libraries.dart';
import 'analyze_helper.dart';

/**
 * Map of white-listed warnings and errors.
 *
 * Only add a white-listing together with a bug report to dartbug.com and add
 * the bug issue number as a comment on the white-listing.
 *
 * Use an identifiable suffix of the file uri as key. Use a fixed substring of
 * the error/warning message in the list of white-listings for each file.
 */
// TODO(johnniwinther): Support canonical URIs as keys and message kinds as
// values.
const Map<String, List<String>> WHITE_LIST = const {
  'sdk/lib/html/dart2js/html_dart2js.dart':
      const ['Hint: The class "Rect" overrides "operator==", '
             'but not "get hashCode".', // http://dartbug.com/11613
             'Hint: The class "Point" overrides "operator==", '
             'but not "get hashCode".', // http://dartbug.com/11613
             'Hint: The class "_ClientRect" overrides "operator==", '
             'but not "get hashCode".', // http://dartbug.com/11613
      ],
};

void main() {
  var uriList = new List<Uri>();
  LIBRARIES.forEach((String name, LibraryInfo info) {
    if (info.documented) {
      uriList.add(new Uri(scheme: 'dart', path: name));
    }
  });
  analyze(uriList, WHITE_LIST);
}
