blob: 3bc9610633529db4158d2ee5b414688cf6529098 [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 => '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'''
import augment 'test.dart';
abstract class A { }
''');
await assertNoDiagnostics(r'''
augment library 'a.dart';
augment abstract class A {
void m();
}
''');
}
test_oneMember_augmentedAbstractClass_declaration() async {
newFile('$testPackageLibPath/a.dart', r'''
augment library 'test.dart';
augment abstract class A {
void m();
}
''');
await assertDiagnostics(r'''
import augment 'a.dart';
abstract class A { }
''', [
lint(41, 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'''
augment library 'test.dart';
augment abstract class A {
void m();
}
''');
newFile('$testPackageLibPath/b.dart', r'''
augment library 'test.dart';
augment abstract class A {
void n();
}
''');
await assertNoDiagnostics(r'''
import augment 'a.dart';
import augment '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),
]);
}
}