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

// Test that dart2js produces the expected static type warnings for type
// promotion language tests. This ensures that the analyzer and dart2js agrees
// on these tests.

import 'warnings_checker.dart';

/// Map from test files to a map of their expected status. If the status map is
/// `null` no warnings must be missing or unexpected, otherwise the status map
/// can contain a list of line numbers for keys 'missing' and 'unexpected' for
/// the warnings of each category.
const Map<String, dynamic> TESTS = const {
  'language/type_promotion_assign_test.dart': null,
  'language/type_promotion_closure_test.dart': null,
  'language/type_promotion_functions_test.dart': const {
    'missing': const [62, 63, 64]
  }, // Issue 14933.
  'language/type_promotion_local_test.dart': null,
  'language/type_promotion_logical_and_test.dart': null,
  'language/type_promotion_more_specific_test.dart': null,
  'language/type_promotion_multiple_test.dart': null,
  'language/type_promotion_parameter_test.dart': null,
};

void main() {
  checkWarnings(TESTS);
}
