blob: ee047fa13d1c52a375f1b7ad58898b3ae3d83852 [file] [log] [blame]
// Copyright (c) 2023, 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.
// SharedOptions=--enable-experiment=macros
import "package:expect/expect.dart";
import augment "class_augmentation.dart";
main() {
Expect.equals(foo, 'abc');
Expect.listEquals(A().ints, [1, 2, 3, 4]);
Expect.equals(A().str, 'hello world!');
{
var a = A()..str = 'test';
Expect.equals(a.str, '42test world!');
}
Expect.equals(A().needsInitialization, 1);
Expect.equals(A().fieldWithInitializer, 'abc');
Expect.equals(A()._privateField, false);
Expect.equals(A().funcWithBody(), 'bac');
Expect.equals(A().funcWithoutBody(), 'a');
{
var a = A();
Expect.equals(a.getterWithoutBody, 'a');
a.setterWithoutBody = 'b';
Expect.equals(a.getterWithoutBody, 'b');
a.setterWithBody = 'c';
Expect.equals(a.getterWithoutBody, 'bc');
}
var a = A();
Expect.equals(a == a, false);
Expect.equals(A().newFunction(), 'ab');
Expect.equals(A().newGetter, 'ab');
{
var a = A()..newSetter = 'a';
Expect.equals(a._underlyingString, 'a 1');
}
Expect.equals(A() is B, true);
Expect.equals(A() is M, true);
Expect.equals(A() is I, true);
Expect.equals(A().superX, 'abcd');
Expect.equals(A().mixinX, 'abcd');
Expect.equals(A().augmentationConstructorInitialized, true);
Expect.equals(A().augmentationInitializerInitialized, true);
Expect.equals(A().constructorInitialized, true);
Expect.equals(A().initializerInitialized, true);
}
class A {
List<int> get ints => [1];
int needsInitialization;
String fieldWithInitializer = 'a';
bool _privateField = true; // augmented to `false`
String funcWithBody() => 'a';
String funcWithoutBody();
String _underlyingString = 'a';
String get getterWithoutBody;
set setterWithoutBody(String value);
set setterWithBody(String value) => _underlyingString = value;
operator==(Object other) => identical(other, this);
late final bool augmentationConstructorInitialized;
late final bool constructorInitialized;
final bool initializerInitialized;
final bool augmentationInitializerInitialized;
A() : initializerInitialized = true {
constructorInitialized = true;
}
}
class B {
String get superX => 'a';
}
mixin M {
String get mixinX => 'a';
}
abstract interface class I {
String get str;
}