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

import "package:expect/expect.dart";

// Dart test verifying that the parser does not confuse parameterized types with
// boolean expressions, since both contain '<'.

class GenericSyntaxTest<B, C, D, E, F> {
  GenericSyntaxTest() {}

  void foo(x1, x2, x3, x4, x5) {
    Expect.equals(true, x1);
    Expect.equals(3, x2);
    Expect.equals(4, x3);
    Expect.equals(5, x4);
    Expect.equals(false, x5);
  }

  void bar(x) {
    Expect.equals(null, x(null));
  }

  test() {
    var a = 1;
    var b = 2;
    var c = 3;
    var d = 4;
    var e = 5;
    var f = 6;
    var g = 7;
    var h = null;
    bar((A<B, C, D, E, F> g) {
      return h;
    }); // 'A<B' starts a generic type.
    foo(a < b, c, d, e, f > g); // 'a<b' is a boolean function argument.
  }

  static testMain() {
    new GenericSyntaxTest().test();
  }
}

abstract class A<B, C, D, E, F> {}

main() {
  GenericSyntaxTest.testMain();
}
