blob: ab84ffdc9157f437b2269bc98d0419d0530435bf [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() {}