blob: c9bc321033b7710d2f9b4768e7ba33ad72d14ff4 [file] [log] [blame]
 // Copyright (c) 2021, 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. /// @assertion Test equality of function and methods tearoffs. /// https://github.com/dart-lang/language/issues/1712 /// /// @description Checks equality of generic mixin methods tearoffs /// @author sgrekhov@unipro.ru // SharedOptions=--enable-experiment=constructor-tearoffs import "../../Utils/expect.dart"; class A { T mixedInSuperMethod(T t) => t; } mixin M on A { void mixedInMethod() {} T mixedInSuperMethod(T t) => super.mixedInSuperMethod(t) + 1 as T; } class AM extends A with M { T Function(T t) get tearoffSuperMethod => super.mixedInSuperMethod; } main() { (X x) { A a = new A(); AM am = new AM(); var s1 = a.mixedInSuperMethod; var s2 = a.mixedInSuperMethod; var s3 = am.tearoffSuperMethod; var s4 = am.tearoffSuperMethod; Expect.equals(s1, s2); Expect.notEquals(s1, s3); Expect.notEquals(s2, s3); Expect.equals(s3, s4); Expect.equals(0, s1(x)); Expect.equals(1, s3(x)); A a1 = new AM(); var s5 = a1.mixedInSuperMethod; Expect.equals(s5, a1.mixedInSuperMethod); Expect.approxEquals(1, s5(x)); }(0); }