blob: a49cd5275c22d4e44b9affb601a3a3dfdb4540d3 [file] [log] [blame]
// Copyright (c) 2022, 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
// VMOptions=--show-internal-names
import 'package:expect/expect.dart';
import 'instantiate_type_literal_nnbd_helper.dart';
main(List<String> args) {
print('Expected:\n$expectedTable');
print('Actual:\n${generateTable()}');
Expect.equals(expectedTable, generateTable());
}
const String expectedTable = '''
T* with int? = int?
T* with int = int*
T* with int* = int*
T with int? = int?
T with int = int
T with int* = int*
T? with int? = int?
T? with int = int?
T? with int* = int?
T* with FutureOr<int> = FutureOr<int>*
T* with FutureOr<int>? = FutureOr<int>?
T* with FutureOr<int?> = FutureOr<int?>*
T* with FutureOr<int?>? = FutureOr<int?>*
T with FutureOr<int> = FutureOr<int>
T with FutureOr<int>? = FutureOr<int>?
T with FutureOr<int?> = FutureOr<int?>
T with FutureOr<int?>? = FutureOr<int?>
T? with FutureOr<int> = FutureOr<int>?
T? with FutureOr<int>? = FutureOr<int>?
T? with FutureOr<int?> = FutureOr<int?>
T? with FutureOr<int?>? = FutureOr<int?>
T* with void (() => void)? = (() => void)?
T* with void (() => void) = (() => void)*
T* with void (() => void)* = (() => void)*
T with void (() => void)? = (() => void)?
T with void (() => void) = () => void
T with void (() => void)* = (() => void)*
T? with void (() => void)? = (() => void)?
T? with void (() => void) = (() => void)?
T? with void (() => void)* = (() => void)?
''';
String generateTable() {
final sb = StringBuffer();
sb.writeln('T* with int? = $legacyTWithNullableInt');
sb.writeln('T* with int = $legacyTWithNonNullableInt');
sb.writeln('T* with int* = $legacyTWithLegacyInt');
sb.writeln('T with int? = $nonNullableTNullableInt');
sb.writeln('T with int = $nonNullableTNonNullableInt');
sb.writeln('T with int* = $nonNullableTWithLegacyInt');
sb.writeln('T? with int? = $nullableTNullableInt');
sb.writeln('T? with int = $nullableTNonNullableInt');
sb.writeln('T? with int* = $nullableTWithLegacyInt');
sb.writeln('');
sb.writeln('T* with FutureOr<int> = $legacyTFutureOrInt');
sb.writeln('T* with FutureOr<int>? = $legacyTNullableFutureOrInt');
sb.writeln('T* with FutureOr<int?> = $legacyTFutureOrNullableInt');
sb.writeln('T* with FutureOr<int?>? = $legacyTNullableFutureOrNullableInt');
sb.writeln('T with FutureOr<int> = $nonNullableTFutureOrInt');
sb.writeln('T with FutureOr<int>? = $nonNullableTNullableFutureOrInt');
sb.writeln('T with FutureOr<int?> = $nonNullableTFutureOrNullableInt');
sb.writeln(
'T with FutureOr<int?>? = $nonNullableTNullableFutureOrNullableInt');
sb.writeln('T? with FutureOr<int> = $nullableTFutureOrInt');
sb.writeln('T? with FutureOr<int>? = $nullableTNullableFutureOrInt');
sb.writeln('T? with FutureOr<int?> = $nullableTFutureOrNullableInt');
sb.writeln('T? with FutureOr<int?>? = $nullableTNullableFutureOrNullableInt');
sb.writeln('');
sb.writeln('T* with void (() => void)? = $legacyTWithNullableVoidFunction');
sb.writeln(
'T* with void (() => void) = $legacyTWithNonNullableVoidFunction');
sb.writeln('T* with void (() => void)* = $legacyTWithLegacyVoidFunction');
sb.writeln('T with void (() => void)? = $nonNullableTNullableVoidFunction');
sb.writeln(
'T with void (() => void) = $nonNullableTNonNullableVoidFunction');
sb.writeln(
'T with void (() => void)* = $nonNullableTWithLegacyVoidFunction');
sb.writeln('T? with void (() => void)? = $nullableTNullableVoidFunction');
sb.writeln('T? with void (() => void) = $nullableTNonNullableVoidFunction');
sb.writeln('T? with void (() => void)* = $nullableTWithLegacyVoidFunction');
return '$sb';
}
final Type legacyTWithLegacyInt = legacyT<int>();
final Type legacyTWithLegacyVoidFunction = legacyT<void Function()>();
final Type nonNullableTWithLegacyInt = nonNullableT<int>();
final Type nonNullableTWithLegacyVoidFunction = nonNullableT<void Function()>();
final Type nullableTWithLegacyInt = nullableT<int>();
final Type nullableTWithLegacyVoidFunction = nullableT<void Function()>();
Type legacyT<T>() => T;