blob: 0659a7d4c6569aa83772d9c0e9281a578d0d2e76 [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.
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../rule_test_support.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(OneMemberAbstractsTest);
});
}
@reflectiveTest
class OneMemberAbstractsTest extends LintRuleTest {
@override
String get lintRule => LintNames.one_member_abstracts;
test_macroClass() async {
await assertDiagnostics(r'''
abstract macro class M {
void m();
}
''', [
// TODO(pq): add abstract macro compilation error when implemented
]);
}
test_oneMember_abstract() async {
await assertDiagnostics(r'''
abstract class C {
void m();
}
''', [
lint(15, 1),
]);
}
test_oneMember_abstractGetter() async {
await assertNoDiagnostics(r'''
abstract class C {
String get s;
}
''');
}
test_oneMember_appliedMixin() async {
await assertNoDiagnostics(r'''
abstract class C with M {
void m2();
}
mixin M {
void m1();
}
''');
}
test_oneMember_augmentedAbstractClass_augmentation() async {
newFile('$testPackageLibPath/a.dart', r'''
part 'test.dart';
abstract class A { }
''');
await assertNoDiagnostics(r'''
part of 'a.dart';
augment abstract class A {
void m();
}
''');
}
test_oneMember_augmentedAbstractClass_declaration() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment abstract class A {
void m();
}
''');
await assertDiagnostics(r'''
part 'a.dart';
abstract class A { }
''', [
lint(31, 1),
]);
}
test_oneMember_extendedType() async {
await assertNoDiagnostics(r'''
abstract class D extends C {
int m2();
}
abstract class C {
int m2() => 42;
}
''');
}
test_oneMember_implementedInterface() async {
await assertNoDiagnostics(r'''
abstract class D implements C {
void m3();
}
abstract class C {
void m1();
void m2();
}
''');
}
test_oneMember_nonAbstract() async {
await assertNoDiagnostics(r'''
abstract class C {
int f() => 42;
}
''');
}
test_sealed_concreteMethod_noDiagnostic() async {
await assertNoDiagnostics(r'''
sealed class C {
void f() { }
}
''');
}
test_sealed_noDiagnostic() async {
await assertNoDiagnostics(r'''
sealed class C {
void f();
}
''');
}
test_twoMembers_augmentedAbstractClass_declaration() async {
newFile('$testPackageLibPath/a.dart', r'''
part of 'test.dart';
augment abstract class A {
void m();
}
''');
newFile('$testPackageLibPath/b.dart', r'''
part of 'test.dart';
augment abstract class A {
void n();
}
''');
await assertNoDiagnostics(r'''
part 'a.dart';
part 'b.dart';
abstract class A { }
''');
}
test_twoMembers_oneField() async {
await assertNoDiagnostics(r'''
abstract class C {
int x = 0;
int f();
}
''');
}
test_twoMembers_oneGetter() async {
await assertNoDiagnostics(r'''
abstract class C {
int get x => 0;
int f();
}
''');
}
test_zeroMember_extendedTypeHasOneMember() async {
await assertDiagnostics(r'''
abstract class D extends C {}
abstract class C {
void m();
}
''', [
lint(46, 1),
]);
}
}