blob: f8b311c67cadcdb6ed2c4964a05d649b60c4b9bf [file] [log] [blame]
// Copyright (c) 2017, 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.
/*@testedFeatures=inference*/
library test;
import 'dart:async';
Future<int> make(int x) => (new /*@ typeArgs=int* */ Future(
/*@ returnType=int* */ () => x));
test() {
Iterable<Future<int>> list = <int>[1, 2, 3]
. /*@ typeArgs=Future<int*>* */ /*@target=Iterable.map*/ map(make);
Future<List<int>> results = Future. /*@ typeArgs=int* */ wait(list);
Future<String> results2 =
results. /*@ typeArgs=String* */ /*@target=Future.then*/ then(
/*@ returnType=FutureOr<String*>* */ (List<int> list) => list
. /*@ typeArgs=FutureOr<String*>* */ /*@target=Iterable.fold*/ fold(
'',
/*@ returnType=FutureOr<String*>* */ (/*@ type=FutureOr<String*>* */ x,
/*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
y. /*@target=int.toString*/ toString()));
Future<String> results3 =
results. /*@ typeArgs=String* */ /*@target=Future.then*/ then(
/*@ returnType=FutureOr<String*>* */ (List<int> list) => list
. /*@ typeArgs=FutureOr<String*>* */ /*@target=Iterable.fold*/ fold(
'',
/*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
x,
/*@ type=int* */ y) =>
x /*@target=String.+*/ +
y. /*@target=int.toString*/ toString()));
Future<String> results4 =
results. /*@ typeArgs=String* */ /*@target=Future.then*/ then(
/*@ returnType=String* */ (List<int> list) =>
list. /*@target=Iterable.fold*/ fold<String>(
'',
/*@ returnType=String* */ (/*@ type=String* */ x,
/*@ type=int* */ y) =>
x /*@target=String.+*/ +
y. /*@target=int.toString*/ toString()));
}
main() {}