-
Notifications
You must be signed in to change notification settings - Fork 120
/
Copy pathclass_modifiers_test.dart
130 lines (119 loc) · 4.51 KB
/
class_modifiers_test.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// 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:dartdoc/src/model/model.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'dartdoc_test_base.dart';
import 'src/utils.dart';
extension on InheritingContainer {
String languageFeatureChips() =>
displayedLanguageFeatures.map((l) => l.name).join(' ');
}
void main() {
defineReflectiveSuite(() {
if (classModifiersAllowed) {
defineReflectiveTests(ClassModifiersTest);
}
});
}
@reflectiveTest
class ClassModifiersTest extends DartdocTestBase {
@override
String get libraryName => 'class_modifiers';
/// From the table in the class modifiers feature specification.
void test_tableOfModifiers() async {
var library = await bootPackageWithLibrary('''
class A {}
base class B {}
interface class C {}
final class D {}
sealed class E {}
abstract class F {}
abstract base class G {}
abstract interface class H {}
abstract final class I {}
mixin class J {}
base mixin class K {}
abstract mixin class L {}
abstract base mixin class M {}
mixin N {}
base mixin O {}
''');
// This almost seems worth a map and loop, but leaving expanded for now for
// test clarity.
var Aclass = library.classes.named('A');
var Bclass = library.classes.named('B');
var Cclass = library.classes.named('C');
var Dclass = library.classes.named('D');
var Eclass = library.classes.named('E');
var Fclass = library.classes.named('F');
var Gclass = library.classes.named('G');
var Hclass = library.classes.named('H');
var Iclass = library.classes.named('I');
var Jclass = library.classes.named('J');
var Kclass = library.classes.named('K');
var Lclass = library.classes.named('L');
var Mclass = library.classes.named('M');
var Nmixin = library.mixins.named('N');
var Omixin = library.mixins.named('O');
expect(Aclass.languageFeatureChips(), equals(''));
expect(Bclass.languageFeatureChips(), equals('base'));
expect(Cclass.languageFeatureChips(), equals('interface'));
expect(Dclass.languageFeatureChips(), equals('final'));
expect(Eclass.languageFeatureChips(), equals('sealed'));
expect(Fclass.languageFeatureChips(), equals('abstract'));
expect(Gclass.languageFeatureChips(), equals('abstract base'));
expect(Hclass.languageFeatureChips(), equals('abstract interface'));
expect(Iclass.languageFeatureChips(), equals('abstract final'));
expect(Jclass.languageFeatureChips(), equals('mixin'));
expect(Kclass.languageFeatureChips(), equals('base mixin'));
expect(Lclass.languageFeatureChips(), equals('abstract mixin'));
expect(Mclass.languageFeatureChips(), equals('abstract base mixin'));
expect(Nmixin.languageFeatureChips(), equals(''));
expect(Omixin.languageFeatureChips(), equals('base'));
}
void test_abstractSealed() async {
var library = await bootPackageWithLibrary('''
abstract class A {}
sealed class B extends A {}
''');
var Bclass = library.classes.named('B');
expect(Bclass.languageFeatureChips(),
equals('sealed')); // *not* sealed abstract
}
void test_inferredModifiers() async {
var library = await bootPackageWithLibrary('''
base class A {}
sealed class B extends A {}
base class C extends B {}
interface class D {}
sealed class E extends D {}
interface class F extends E {}
final class G {}
sealed class H extends G {}
final class I extends H {}
class J {}
base mixin K on J {}
sealed class L extends J with K {}
base class M extends L {}
''');
var Bclass = library.classes.named('B');
var Cclass = library.classes.named('C');
var Eclass = library.classes.named('E');
var Fclass = library.classes.named('F');
var Hclass = library.classes.named('H');
var Iclass = library.classes.named('I');
var Lclass = library.classes.named('L');
var Mclass = library.classes.named('M');
expect(
Bclass.languageFeatureChips(), equals('sealed')); // *not* sealed base
expect(Cclass.languageFeatureChips(), equals('base'));
expect(Eclass.languageFeatureChips(), equals('sealed'));
expect(Fclass.languageFeatureChips(), equals('interface'));
expect(Hclass.languageFeatureChips(), equals('sealed'));
expect(Iclass.languageFeatureChips(), equals('final'));
expect(Lclass.languageFeatureChips(), equals('sealed'));
expect(Mclass.languageFeatureChips(), equals('base'));
}
}