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

library test.typedef_in_signature_test;

import 'dart:mirrors';

import "package:expect/expect.dart";

typedef int foo();
typedef String foo2();
typedef foo foo3(foo2 x);

foo2 bar(foo x) => throw "does-not-return"; //

foo3 gee(int x, foo3 tt) => throw "does-not-return"; //

main() {
  var lm = currentMirrorSystem().findLibrary(#test.typedef_in_signature_test);
  var mm = lm.declarations[#bar] as MethodMirror;
  Expect.equals(reflectType(foo2), mm.returnType);
  Expect.equals(reflectType(foo), mm.parameters[0].type);
  mm = lm.declarations[#gee] as MethodMirror;
  Expect.equals(reflectType(int), mm.parameters[0].type);
  Expect.equals(reflectType(foo3), mm.returnType);
  var ftm = (mm.returnType as TypedefMirror).referent;
  Expect.equals(reflectType(foo), ftm.returnType);
  Expect.equals(reflectType(foo2), ftm.parameters[0].type);
}
