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

// This test verifies that `f<T, U>(0)` is properly parsed as a generic
// invocation, for all type syntaxes that may appear as T and U.

// Note: it doesn't really matter what we import here; it's just a handy library
// that has declares a types so that we can refer a type via a prefix.
import 'dart:async' as prefix;

import '../syntax_helper.dart';

class C extends SyntaxTracker {
  C([Object? x = absent, Object? y = absent])
      : super('new C${SyntaxTracker.args(x, y)}');
}

/// Helper function to work around the fact that not all types can be expressed
/// as type literals.
Type typeOf<T>() => T;

main() {
  SyntaxTracker.known[C] = 'C';
  SyntaxTracker.known[typeOf<C?>()] = 'C?';
  SyntaxTracker.known[prefix.Zone] = 'prefix.Zone';
  SyntaxTracker.known[typeOf<prefix.Zone?>()] = 'prefix.Zone?';
  SyntaxTracker.known[dynamic] = 'dynamic';
  SyntaxTracker.known[typeOf<List<C>>()] = 'List<C>';
  SyntaxTracker.known[typeOf<List<C>?>()] = 'List<C>?';
  SyntaxTracker.known[typeOf<void Function()>()] = 'void Function()';
  SyntaxTracker.known[typeOf<void Function()?>()] = 'void Function()?';
  checkSyntax(f(f<C, C>(0)), 'f(f<C, C>(0))');
  checkSyntax(f(f<C?, C>(0)), 'f(f<C?, C>(0))');
  checkSyntax(f(f<dynamic, C>(0)), 'f(f<dynamic, C>(0))');
  checkSyntax(f(f<prefix.Zone, C>(0)), 'f(f<prefix.Zone, C>(0))');
  checkSyntax(f(f<prefix.Zone?, C>(0)), 'f(f<prefix.Zone?, C>(0))');
  checkSyntax(f(f<List<C>, C>(0)), 'f(f<List<C>, C>(0))');
  checkSyntax(f(f<List<C>?, C>(0)), 'f(f<List<C>?, C>(0))');
  checkSyntax(f(f<void Function(), C>(0)), 'f(f<void Function(), C>(0))');
  checkSyntax(f(f<void Function()?, C>(0)), 'f(f<void Function()?, C>(0))');
  checkSyntax(f(f<C, C?>(0)), 'f(f<C, C?>(0))');
  checkSyntax(f(f<C, dynamic>(0)), 'f(f<C, dynamic>(0))');
  checkSyntax(f(f<C, prefix.Zone>(0)), 'f(f<C, prefix.Zone>(0))');
  checkSyntax(f(f<C, prefix.Zone?>(0)), 'f(f<C, prefix.Zone?>(0))');
  checkSyntax(f(f<C, List<C>>(0)), 'f(f<C, List<C>>(0))');
  checkSyntax(f(f<C, List<C>?>(0)), 'f(f<C, List<C>?>(0))');
  checkSyntax(f(f<C, void Function()>(0)), 'f(f<C, void Function()>(0))');
  checkSyntax(f(f<C, void Function()?>(0)), 'f(f<C, void Function()?>(0))');
}
