blob: 4944fd84fbfeb8d27188a20aa05b5c3cbb6e0a41 [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:analysis_server/lsp_protocol/protocol.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../shared/shared_editable_arguments_tests.dart';
import '../utils/test_code_extensions.dart';
import 'abstract_lsp_over_legacy.dart';
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(EditableArgumentsTest);
});
}
@reflectiveTest
class EditableArgumentsTest extends SharedLspOverLegacyTest
with
// Tests are defined in SharedEditableArgumentsTests because they
// are shared and run for both LSP and Legacy servers.
SharedEditableArgumentsTests {
@override
Future<void> setUp() async {
await super.setUp();
writeTestPackageConfig(flutter: true);
}
/// Over the legacy protocol, document versions are optional so we must also
/// support this.
test_textDocument_unversioned() async {
var result = await getEditableArgumentsFor('''
class MyWidget extends StatelessWidget {
const MyWidget(String a1);
@override
Widget build(BuildContext context) => MyW^idget('value1');
}
''', open: openFileUnversioned);
// Verify initial content has no version.
expect(
result!.textDocument,
isA<OptionalVersionedTextDocumentIdentifier>()
.having((td) => td.uri, 'uri', testFileUri)
.having((td) => td.version, 'version', isNull),
);
// Update the content.
await replaceFileUnversioned(testFileUri, '${code.code}\n// extra comment');
// Verify new results have no version.
result = await getEditableArguments(testFileUri, code.position.position);
expect(
result!.textDocument,
isA<OptionalVersionedTextDocumentIdentifier>()
.having((td) => td.uri, 'uri', testFileUri)
.having((td) => td.version, 'version', isNull),
);
}
/// Over the legacy protocol, document versions are optional so we must also
/// support this.
test_textDocument_unversioned_closedFile() async {
var result = await getEditableArgumentsFor('''
class MyWidget extends StatelessWidget {
const MyWidget(String a1);
@override
Widget build(BuildContext context) => MyW^idget('value1');
}
''', open: openFileUnversioned);
// Verify initial content has no version.
expect(
result!.textDocument,
isA<OptionalVersionedTextDocumentIdentifier>()
.having((td) => td.uri, 'uri', testFileUri)
.having((td) => td.version, 'version', isNull),
);
// Close the file.
await closeFile(testFileUri);
// Verify new results have no version.
result = await getEditableArguments(testFileUri, code.position.position);
expect(
result!.textDocument,
isA<OptionalVersionedTextDocumentIdentifier>()
.having((td) => td.uri, 'uri', testFileUri)
.having((td) => td.version, 'version', isNull),
);
}
@override
@FailingTest(reason: 'Document versions not currently supported for legacy')
test_textDocument_versioned() {
// TODO(dantup): Implement support for version numbers in the legacy
// protocol.
return super.test_textDocument_versioned();
}
@override
@FailingTest(reason: 'Document versions not currently supported for legacy')
test_textDocument_versioned_closedFile() {
// TODO(dantup): Implement support for version numbers in the legacy
// protocol.
return super.test_textDocument_versioned_closedFile();
}
}