// Copyright (c) 2011, 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 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());
  }

  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();
  }
}

interface A<B, C, D, E, F> {
}

main() {
  GenericSyntaxTest.testMain();
}
