| // Copyright (c) 2013, 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 | 
 |  | 
 | import "package:expect/expect.dart"; | 
 |  | 
 | void main() { | 
 |   var hva = new HasValueA(); | 
 |   hva.value = '42'; | 
 |   Expect.equals('42', hva.value); | 
 |  | 
 |   var hvb = new HasValueB(); | 
 |   hvb.value = '87'; | 
 |   Expect.equals('87', hvb.value); | 
 |  | 
 |   var hvc = new HasValueC(); | 
 |   hvc.value = '99'; | 
 |   Expect.equals('99', hvc.value); | 
 | } | 
 |  | 
 | abstract class Delegate { | 
 |   String invoke(String value); | 
 | } | 
 |  | 
 | abstract class DelegateMixin { | 
 |   String invoke(String value) => value; | 
 | } | 
 |  | 
 | abstract class HasValueMixin implements Delegate { | 
 |   String _value = ''; | 
 |   set value(String value) { | 
 |     _value = invoke(value); | 
 |   } | 
 |  | 
 |   String get value => _value; | 
 | } | 
 |  | 
 | class HasValueA extends Object with HasValueMixin, DelegateMixin {} | 
 |  | 
 | class HasValueB extends Object with DelegateMixin, HasValueMixin {} | 
 |  | 
 | class HasValueC extends Object with HasValueMixin { | 
 |   String invoke(String value) => value; | 
 | } |