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

// @dart = 2.7

// dart2jsOptions=--strong

import 'package:expect/expect.dart';

class Foo<T extends num> {}

class Bar<T extends num> {}

class Baz<T extends num> {}

@pragma('dart2js:disableFinal')
main() {
  test(new Foo(), Foo, expectTypeArguments: false);
  test(new Bar() as Bar<num>, Bar, expectTypeArguments: false);
  Baz<num> b = new Baz();
  dynamic c = b;
  test(c as Baz<num>, Baz, expectTypeArguments: true);
}

void test(dynamic object, Type type, {bool expectTypeArguments}) {
  bool caught = false;
  try {
    print(type);
    object as List<String>;
  } catch (e) {
    String expected = '$type';
    if (!expectTypeArguments) {
      expected = expected.substring(0, expected.indexOf('<'));
    }
    expected = '$expected';
    Expect.isTrue(e.toString().contains(expected),
        'Expected "$expected" in the message: $e');
    caught = true;
    print(e);
  }
  Expect.isTrue(caught);
}
