// 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.reflected_type_typedefs;

import 'dart:mirrors';

import 'reflected_type_helper.dart';

typedef bool NonGenericPredicate(num n);
typedef bool GenericPredicate<T>(T t);
typedef S GenericTransform<S>(S s);

main() {
  final nonGenericPredicate = reflectType(NonGenericPredicate) as TypedefMirror;
  final predicateOfDynamic = reflectType(GenericPredicate) as TypedefMirror;
  final transformOfDynamic = reflectType(GenericTransform) as TypedefMirror;

  final predicateDecl = predicateOfDynamic.originalDeclaration as TypedefMirror;
  final transformDecl = transformOfDynamic.originalDeclaration as TypedefMirror;

  expectReflectedType(nonGenericPredicate, NonGenericPredicate);
  expectReflectedType(predicateOfDynamic, GenericPredicate);
  expectReflectedType(transformOfDynamic, GenericTransform);
  expectReflectedType(predicateDecl, null);
  expectReflectedType(transformDecl, null);
}
