// 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.

// @dart = 2.9

// Tests that `void` accepts any value and won't throw on non-`null` values.
// The test is set up in a way that `--trust-type-annotations` and type
// propagation must not assume that `void` is `null` either.

import 'package:expect/expect.dart';

class A {
  void foo() {
    return bar();
  }

  void bar() {}
}

class B extends A {
  int bar() => 42;
}

// Makes the typing cleaner: the return type here is `dynamic` and we are
// guaranteed that there won't be any warnings.
// Dart2js can still infer the type by itself.
@pragma('dart2js:noInline')
callFoo(A a) => a.foo();

main() {
  var a = new A();
  var b = new B();
  // The following line is not throwing, even though `a.foo()` (inside
  // `callFoo`) is supposedly `void`.
  callFoo(b).abs();
  Expect.isNull(callFoo(a));
  Expect.equals(42, callFoo(b));
}
