blob: df8b96a741571267dbbe17d12db9e71af7811931 [file] [log] [blame]
// Copyright (c) 2025, 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/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'server_abstract.dart';
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(SummaryTest);
});
}
@reflectiveTest
class SummaryTest extends AbstractLspAnalysisServerTest {
Future<void> test_class() async {
await verifySummary(
'''
/// A class.
final class C extends Object {
/// A field;
int f;
C(this.f);
factory C.s(String s) {
return C(s.length);
}
int operator +(int i) => f + i;
/// A getter.
int get g => f;
/// A setter.
set s(int i) {}
void m(int i) {
print(f + i);
}
}
''',
'''
final class C extends Object {
int f;
C(this.f);
factory C.s(String s);
int get g;
set s(int i);
int operator +(int i);
void m(int i);
}
''',
);
}
Future<void> test_enum() async {
await verifySummary(
'''
/// An enum.
enum E {
a(1), b(2);
final int f;
const E(this.f);
void m(int i) {
print(f + i);
}
}
''',
'''
enum E {
a, b;
final int f;
const E(this.f);
void m(int i);
}
''',
);
}
Future<void> test_extension_named() async {
await verifySummary(
'''
/// An extension.
extension E on String {
int get l => length;
String m(String s) => this + s;
}
''',
'''
extension E on String {
int get l;
String m(String s);
}
''',
);
}
Future<void> test_extension_unnamed() async {
await verifySummary(
'''
extension on String {
int get l => length;
String m(String s) => this + s;
}
''',
// Unnamed extensions are not part of the public API.
'',
);
}
Future<void> test_extensionType() async {
await verifySummary(
'''
/// An extension.
extension type E(int self) {
int get negated => -self;
}
''',
'''
extension type E(int self) {
int get negated;
}
''',
);
}
Future<void> test_imports() async {
failTestOnErrorDiagnostic = false;
await verifySummary(
'''
import 'dart:async' show Stream;
import 'package:test/test.dart' as test;
import 'other.dart' deferred as o hide SomeClass;
''',
'''
import 'dart:async' show Stream;
import 'package:test/test.dart' as test;
import 'package:test/other.dart' as o hide SomeClass;
''',
);
}
Future<void> test_mixin() async {
await verifySummary(
'''
mixin M on List {
int get l => length;
}
''',
'''
mixin M on List {
int get l;
}
''',
);
}
Future<void> test_topLevelConstant() async {
await verifySummary(
'''
/// A top-level constant.
@zero
const int zero = 0;
''',
'''
const int zero;
''',
);
}
Future<void> test_topLevelFunction() async {
await verifySummary(
'''
/// A top-level function.
void f(int p) {
print(p);
}
''',
'''
void f(int p);
''',
);
}
Future<void> test_topLevelGetter() async {
await verifySummary(
'''
/// A top-level getter.
int get g => 0;
''',
'''
int get g;
''',
);
}
Future<void> test_topLevelSetter() async {
await verifySummary(
'''
/// A top-level setter.
set s(int p) {
// ...
}
''',
'''
set s(int p);
''',
);
}
Future<void> test_topLevelVariable() async {
await verifySummary(
'''
/// A top-level variable.
int zero = 0;
''',
'''
int zero;
''',
);
}
Future<void> test_typedef() async {
await verifySummary(
'''
/// A typedef
typedef F = int Function(String);
''',
'''
typedef F = int Function(String);
''',
);
}
Future<void> verifySummary(String code, String expectedSummary) async {
await initialize();
await openFile(mainFileUri, code);
var res = (await getSummary(mainFileUri)).summary;
expect(res, equals(expectedSummary));
}
}