mirror of
https://github.com/dart-lang/sdk
synced 2024-09-18 21:21:18 +00:00
4ff04f641b
Change-Id: Icdcc648f42393b28daf648f752e3b4d61f51aa10 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/212043 Commit-Queue: Johnni Winther <johnniwinther@google.com> Reviewed-by: Jens Johansen <jensj@google.com>
90 lines
3 KiB
Dart
90 lines
3 KiB
Dart
// Copyright (c) 2019, 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" show Expect;
|
|
|
|
import 'package:kernel/ast.dart';
|
|
import 'package:kernel/src/future_value_type.dart';
|
|
import 'package:kernel/testing/type_parser_environment.dart';
|
|
|
|
const Map<String, String> data = {
|
|
'Null': 'Object?',
|
|
'Never': 'Object?',
|
|
'Never?': 'Object?',
|
|
'void': 'void',
|
|
'dynamic': 'dynamic',
|
|
'bool': 'Object?',
|
|
'bool?': 'Object?',
|
|
'bool*': 'Object?',
|
|
'List<bool>': 'Object?',
|
|
'() -> void': 'Object?',
|
|
'<T>(T) -> void': 'Object?',
|
|
'X': 'Object?',
|
|
'X_extends_FutureInt': 'Object?',
|
|
'X_extends_FutureOrInt': 'Object?',
|
|
'Future<dynamic>': 'dynamic',
|
|
'Future<dynamic>?': 'dynamic',
|
|
'Future<dynamic>*': 'dynamic',
|
|
'Future<Object>': 'Object',
|
|
'Future<Object>?': 'Object',
|
|
'Future<Object>*': 'Object',
|
|
'Future<int?>': 'int?',
|
|
'Future<int?>?': 'int?',
|
|
'Future<int?>*': 'int?',
|
|
'Future<Future<int>?>': 'Future<int>?',
|
|
'Future<Future<int>?>?': 'Future<int>?',
|
|
'Future<Future<int>?>*': 'Future<int>?',
|
|
'Future<FutureOr<int>?>': 'FutureOr<int>?',
|
|
'Future<FutureOr<int>?>?': 'FutureOr<int>?',
|
|
'Future<FutureOr<int>?>*': 'FutureOr<int>?',
|
|
'Future<Null>': 'Null',
|
|
'Future<Null>?': 'Null',
|
|
'Future<Null>*': 'Null',
|
|
'Future<void>': 'void',
|
|
'Future<void>?': 'void',
|
|
'Future<void>*': 'void',
|
|
'FutureOr<dynamic>': 'dynamic',
|
|
'FutureOr<dynamic>?': 'dynamic',
|
|
'FutureOr<dynamic>*': 'dynamic',
|
|
'FutureOr<Object>': 'Object',
|
|
'FutureOr<Object>?': 'Object',
|
|
'FutureOr<Object>*': 'Object',
|
|
'FutureOr<int?>': 'int?',
|
|
'FutureOr<int?>?': 'int?',
|
|
'FutureOr<int?>*': 'int?',
|
|
'FutureOr<Future<int>?>': 'Future<int>?',
|
|
'FutureOr<Future<int>?>?': 'Future<int>?',
|
|
'FutureOr<Future<int>?>*': 'Future<int>?',
|
|
'FutureOr<FutureOr<int>?>': 'FutureOr<int>?',
|
|
'FutureOr<FutureOr<int>?>?': 'FutureOr<int>?',
|
|
'FutureOr<FutureOr<int>?>*': 'FutureOr<int>?',
|
|
'FutureOr<Null>': 'Null',
|
|
'FutureOr<Null>?': 'Null',
|
|
'FutureOr<Null>*': 'Null',
|
|
'FutureOr<void>': 'void',
|
|
'FutureOr<void>?': 'void',
|
|
'FutureOr<void>*': 'void',
|
|
};
|
|
|
|
void main() {
|
|
Env env = new Env('', isNonNullableByDefault: true)
|
|
..extendWithTypeParameters('X,'
|
|
'X_extends_FutureInt extends Future<int>,'
|
|
'X_extends_FutureOrInt extends FutureOr<int>');
|
|
data.forEach((String input, String output) {
|
|
DartType inputType = env.parseType(input);
|
|
DartType expectedOutputType = env.parseType(output);
|
|
DartType actualOutputType =
|
|
computeFutureValueType(env.coreTypes, inputType);
|
|
print(
|
|
'futureValueType($inputType) = $actualOutputType: $expectedOutputType');
|
|
Expect.equals(
|
|
expectedOutputType,
|
|
actualOutputType,
|
|
"Unexpected future value type of $inputType ('$input'):\n"
|
|
"Expected: ${expectedOutputType} ('$output')\n"
|
|
"Actual: ${actualOutputType}");
|
|
});
|
|
}
|