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

import "package:expect/expect.dart";

// Dart test program for testing default factories.

abstract class Vehicle {
  factory Vehicle() = GoogleOne.Vehicle;
  //                  ^^^^^^^^^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_RETURN_TYPE
  // [cfe] The constructor function type 'GoogleOne Function()' isn't a subtype of 'Vehicle Function()'.
}

class Bike implements Vehicle, GoogleOne {
  Bike.redOne() {}
}

abstract class SpaceShip {
  factory SpaceShip() = GoogleOne;
}

class GoogleOne implements SpaceShip {
  GoogleOne.internal_() {}
  factory GoogleOne() {
    return new GoogleOne.internal_();
  }
  factory GoogleOne.Vehicle() {
    return new Bike.redOne();
  }
}

main() {
  Expect.equals(true, (new Bike.redOne()) is Bike);
  Expect.equals(true, (new SpaceShip()) is GoogleOne);
  var ensureItsCalled = new Vehicle();
}
