|  | // Copyright (c) 2020, 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. | 
|  |  | 
|  | // Test least upper bound for a Function type and a type that doesn't match | 
|  | // any of the cases for function types being subtypes of each other. | 
|  |  | 
|  | import 'dart:async'; | 
|  | import '../static_type_helper.dart'; | 
|  |  | 
|  | bool condition = true; | 
|  |  | 
|  | void main() { | 
|  | void f1(void Function() x, Object y) { | 
|  | var z = condition ? x : y; | 
|  | z.expectStaticType<Exactly<Object>>(); | 
|  | } | 
|  |  | 
|  | void f2(int x, void Function<X>() y) { | 
|  | var z = condition ? x : y; | 
|  | z.expectStaticType<Exactly<Object>>(); | 
|  | } | 
|  |  | 
|  | void f3(double Function(int, int) x, FutureOr<Function> y) { | 
|  | var z = condition ? x : y; | 
|  | z.expectStaticType<Exactly<Object>>(); | 
|  | } | 
|  |  | 
|  | void f4(FutureOr<Function?> x, Function(int i, {int j}) y) { | 
|  | var z = condition ? x : y; | 
|  | // Expecting `Object?`. Check that the type is a top type. | 
|  | z.expectStaticType<Exactly<Object?>>(); | 
|  | // Check that it is `Object?`. | 
|  | if (z == null) throw 0; | 
|  | z.expectStaticType<Exactly<Object>>(); | 
|  | } | 
|  |  | 
|  | void f5(Function Function<Y>([Y y]) x, dynamic y) { | 
|  | var z = condition ? x : y; | 
|  | // Check that the type of `z` is `dynamic`. | 
|  | Never n = z; // It is `dynamic` or `Never`. | 
|  | z = 0; // It is a supertype of `int`. | 
|  | z = false; // It is a supertype of `bool`. | 
|  | } | 
|  |  | 
|  | void f6(Never x, Never Function() y) { | 
|  | var z = condition ? x : y; | 
|  | z.expectStaticType<Exactly<Never Function()>>(); | 
|  | } | 
|  |  | 
|  | void f7(Function(Function) x, Null y) { | 
|  | var z = condition ? x : y; | 
|  | z.expectStaticType<Exactly<Function(Function)?>>(); | 
|  | } | 
|  | } |