// Copyright (c) 2018, 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.

// TODO(51557): Decide if the mixins being applied in this test should be
// "mixin", "mixin class" or the test should be left at 2.19.
// @dart=2.19

//
// Exact regression test for issue #33040.

import 'dart:async';

class Optional<T> {}

typedef T? ConvertFunction<T>();

T? blockingLatest<T>() {
  return null;
}

abstract class ObservableModel<T> {}

abstract class AsyncValueMixin<T> {
  Future<T>? get asyncValue {
    ConvertFunction<T> f = blockingLatest;
    if (f is! ConvertFunction<T>) throw "error";
    return null;
  }
}

abstract class OptionalSettableObservableModel<T>
    extends ObservableModel<Optional<T>> with AsyncValueMixin<Optional<T>> {}

class FooObservableModel extends OptionalSettableObservableModel<int> {}

Future<void> main() async {
  var model = new FooObservableModel();
  await model.asyncValue;
}
