// 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. import "package:expect/expect.dart"; // Tests for parsing closures with complex parameter types. const defaultPair = Pair>(-1, Pair(-2, -3)); main() { test1(); test2(); test3(); } class Pair { final A fst; final B snd; const Pair(A this.fst, B this.snd); } test1() { // Closures with nested parameterized types. var cdar1 = (Pair> pr) => pr.snd.fst; var cdar2 = (Pair> pr) => pr.snd.fst; var e = new Pair>(100, new Pair(200, 300)); Expect.equals(200, cdar1(e)); Expect.equals(200, cdar2(e)); } test2() { // Closures with nested parameterized types in optional position var cdar1 = ([Pair> pr = defaultPair]) => pr.snd.fst; var cdar2 = ([Pair> pr = defaultPair]) => pr.snd.fst; var e = new Pair>(100, new Pair(200, 300)); Expect.equals(200, cdar1(e)); Expect.equals(200, cdar2(e)); } test3() { // Closures with nested parameterized types. var f1 = (Pair> pr) => pr.snd.fst + 1; var f2 = (Pair> pr) => pr.snd.fst + 2; // Closures with function type with nested parameterized types. var ap1 = (f(Pair> pr1), Pair> pr) => f(pr) * 10; var ap2 = (f(Pair> pr1), Pair> pr) => f(pr) * 100; var e = new Pair>(100, new Pair(200, 300)); Expect.equals(2010, ap1(f1, e)); Expect.equals(2020, ap1(f2, e)); Expect.equals(20100, ap2(f1, e)); Expect.equals(20200, ap2(f2, e)); }