Migrate edit domain tests to PubPackageAnalysisServerTest.

Change-Id: Ia8d2bb4b5739f3b666c842fa318fc0101858905d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/240644
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/test/edit/assists_test.dart b/pkg/analysis_server/test/edit/assists_test.dart
index d42144e..e7ee0e0 100644
--- a/pkg/analysis_server/test/edit/assists_test.dart
+++ b/pkg/analysis_server/test/edit/assists_test.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/edit/edit_domain.dart';
 import 'package:analysis_server/src/plugin/plugin_manager.dart';
 import 'package:analyzer/instrumentation/service.dart';
 import 'package:analyzer_plugin/protocol/protocol.dart' as plugin;
@@ -12,8 +11,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
-import '../mocks.dart';
+import '../analysis_server_base.dart';
 import '../src/plugin/plugin_manager_test.dart';
 
 void main() {
@@ -23,7 +21,7 @@
 }
 
 @reflectiveTest
-class AssistsTest extends AbstractAnalysisTest {
+class AssistsTest extends PubPackageAnalysisServerTest {
   late List<SourceChange> changes;
 
   Future<void> prepareAssists(String search, [int length = 0]) async {
@@ -32,8 +30,9 @@
   }
 
   Future<void> prepareAssistsAt(int offset, int length) async {
-    var request = EditGetAssistsParams(testFile, offset, length).toRequest('0');
-    var response = await waitResponse(request);
+    var request =
+        EditGetAssistsParams(testFile.path, offset, length).toRequest('0');
+    var response = await handleSuccessfulRequest(request);
     var result = EditGetAssistsResult.fromResponse(response);
     changes = result.assists;
   }
@@ -41,8 +40,7 @@
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
-    handler = EditDomainHandler(server);
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_fromPlugins() async {
@@ -68,10 +66,11 @@
 
   Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = EditGetAssistsParams('test.dart', 0, 0).toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
@@ -79,10 +78,11 @@
     var request =
         EditGetAssistsParams(convertPath('/foo/../bar/test.dart'), 0, 0)
             .toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
@@ -142,7 +142,7 @@
     for (var change in changes) {
       if (change.message == message) {
         var resultCode =
-            SourceEdit.applySequence(testCode, change.edits[0].edits);
+            SourceEdit.applySequence(testFileContent, change.edits[0].edits);
         expect(resultCode, expectedCode);
         return;
       }
diff --git a/pkg/analysis_server/test/edit/bulk_fixes_test.dart b/pkg/analysis_server/test/edit/bulk_fixes_test.dart
index 4928226..41c6916 100644
--- a/pkg/analysis_server/test/edit/bulk_fixes_test.dart
+++ b/pkg/analysis_server/test/edit/bulk_fixes_test.dart
@@ -2,17 +2,17 @@
 // 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 'dart:io';
+import 'dart:io' show Platform;
 
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/edit/edit_domain.dart';
 import 'package:analysis_server/src/services/linter/lint_names.dart';
+import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:linter/src/rules.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -21,7 +21,7 @@
 }
 
 @reflectiveTest
-class BulkFixesTest extends AbstractAnalysisTest {
+class BulkFixesTest extends PubPackageAnalysisServerTest {
   void assertContains(List<BulkFix> details,
       {required String path, required String code, required int count}) {
     for (var detail in details) {
@@ -37,11 +37,12 @@
     fail('No match found for: $path:$code->$count in $details');
   }
 
-  Future<void> assertEditEquals(String expectedSource) async {
+  Future<void> assertEditEquals(File file, String expectedSource) async {
     await waitForTasksFinished();
     var edits = await _getBulkEdits();
     expect(edits, hasLength(1));
-    var editedSource = SourceEdit.applySequence(testCode, edits[0].edits);
+    var editedSource =
+        SourceEdit.applySequence(file.readAsStringSync(), edits[0].edits);
     expect(editedSource, expectedSource);
   }
 
@@ -55,12 +56,11 @@
   Future<void> setUp() async {
     super.setUp();
     registerLintRules();
-    handler = EditDomainHandler(server);
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_annotateOverrides_excludedFile() async {
-    newAnalysisOptionsYamlFile2(projectPath, '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 analyzer:
   exclude:
     - test/**
@@ -69,7 +69,7 @@
     - annotate_overrides
 ''');
 
-    newFile2('$projectPath/test/test.dart', '''
+    newFile2('$testPackageRootPath/test/test.dart', '''
 class A {
   void f() {}
 }
@@ -83,14 +83,14 @@
 
   Future<void> test_annotateOverrides_excludedSubProject() async {
     // Root project.
-    newAnalysisOptionsYamlFile2(projectPath, '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 analyzer:
   exclude:
     - test/data/**
 ''');
 
     // Sub-project.
-    var subprojectRoot = '$projectPath/test/data/subproject';
+    var subprojectRoot = '$testPackageRootPath/test/data/subproject';
     newAnalysisOptionsYamlFile2(subprojectRoot, '''
 linter:
   rules:
@@ -114,7 +114,7 @@
   }
 
   Future<void> test_annotateOverrides_subProject() async {
-    var subprojectRoot = '$projectPath/test/data/subproject';
+    var subprojectRoot = '$testPackageRootPath/test/data/subproject';
     newAnalysisOptionsYamlFile2(subprojectRoot, '''
 linter:
   rules:
@@ -125,8 +125,7 @@
 name: subproject
 ''');
 
-    testFile = '$subprojectRoot/test.dart';
-    addTestFile('''
+    var file = newFile2('$subprojectRoot/test.dart', '''
 class A {
   void f() {}
 }
@@ -135,7 +134,9 @@
 }
 ''');
 
-    await assertEditEquals('''
+    await waitForTasksFinished();
+
+    await assertEditEquals(file, '''
 class A {
   void f() {}
 }
@@ -147,15 +148,14 @@
   }
 
   Future<void> test_details() async {
-    newAnalysisOptionsYamlFile2(projectPath, '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 linter:
   rules:
     - annotate_overrides
     - unnecessary_new
 ''');
 
-    var fileA = convertPath('$projectPath/a.dart');
-    newFile2(fileA, '''
+    var a = newFile2('$testPackageLibPath/a.dart', '''
 class A {
   A f() => new A();
 }
@@ -173,15 +173,15 @@
     var details = await _getBulkFixDetails();
     expect(details, hasLength(2));
     assertContains(details,
-        path: fileA, code: LintNames.unnecessary_new, count: 2);
+        path: a.path, code: LintNames.unnecessary_new, count: 2);
     assertContains(details,
-        path: fileA, code: LintNames.annotate_overrides, count: 1);
+        path: a.path, code: LintNames.annotate_overrides, count: 1);
     assertContains(details,
-        path: testFile, code: LintNames.unnecessary_new, count: 1);
+        path: testFile.path, code: LintNames.unnecessary_new, count: 1);
   }
 
   Future<void> test_unnecessaryNew() async {
-    newAnalysisOptionsYamlFile2(projectPath, '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 linter:
   rules:
     - unnecessary_new
@@ -191,13 +191,12 @@
 A f() => new A();
 ''');
 
-    await assertEditEquals('''
+    await assertEditEquals(testFile, '''
 class A {}
 A f() => A();
 ''');
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/44080')
   Future<void> test_unnecessaryNew_collectionLiteral_overlap() async {
     // The test case currently drops the 'new' but does not convert the code to
     // use a set literal. The code is no longer mangled, but we need to run the
@@ -205,7 +204,7 @@
     if (Platform.isWindows) {
       fail('Should not be passing on Windows, but it does');
     }
-    newAnalysisOptionsYamlFile2(projectPath, '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 linter:
   rules:
     - prefer_collection_literals
@@ -219,7 +218,7 @@
 }
 ''');
 
-    await assertEditEquals('''
+    await assertEditEquals(testFile, '''
 class A {
   Map<String, Object> _map = {};
   Set<String> _set = <String>{};
@@ -228,7 +227,7 @@
   }
 
   Future<void> test_unnecessaryNew_ignoredInOptions() async {
-    newAnalysisOptionsYamlFile2(projectPath, '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 analyzer:
   errors:
     unnecessary_new: ignore
@@ -244,7 +243,7 @@
   }
 
   Future<void> test_unnecessaryNew_ignoredInSource() async {
-    newAnalysisOptionsYamlFile2(projectPath, '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 linter:
   rules:
     - unnecessary_new
@@ -268,8 +267,8 @@
   }
 
   Future<EditBulkFixesResult> _getBulkFixes() async {
-    var request = EditBulkFixesParams([projectPath]).toRequest('0');
-    var response = await waitResponse(request);
+    var request = EditBulkFixesParams([workspaceRootPath]).toRequest('0');
+    var response = await handleSuccessfulRequest(request);
     return EditBulkFixesResult.fromResponse(response);
   }
 }
diff --git a/pkg/analysis_server/test/edit/fixes_test.dart b/pkg/analysis_server/test/edit/fixes_test.dart
index a2658e5..95af965 100644
--- a/pkg/analysis_server/test/edit/fixes_test.dart
+++ b/pkg/analysis_server/test/edit/fixes_test.dart
@@ -3,8 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/edit/edit_domain.dart';
 import 'package:analysis_server/src/plugin/plugin_manager.dart';
+import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/instrumentation/service.dart';
 import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:analyzer_plugin/protocol/protocol.dart' as plugin;
@@ -13,8 +13,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
-import '../mocks.dart';
+import '../analysis_server_base.dart';
 import '../src/plugin/plugin_manager_test.dart';
 
 void main() {
@@ -24,11 +23,11 @@
 }
 
 @reflectiveTest
-class FixesTest extends AbstractAnalysisTest {
+class FixesTest extends PubPackageAnalysisServerTest {
   @override
-  void setUp() {
+  Future<void> setUp() async {
     super.setUp();
-    handler = EditDomainHandler(server);
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_fileOutsideRoot() async {
@@ -37,20 +36,19 @@
 
     // Set up the original project, as the code fix code won't run at all
     // if there are no contexts.
-    await createProject();
     await waitForTasksFinished();
 
     var request =
         EditGetFixesParams(convertPath(outsideFile), 0).toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.GET_FIXES_INVALID_FILE),
+      requestId: '0',
+      errorCode: RequestErrorCode.GET_FIXES_INVALID_FILE,
     );
   }
 
   Future<void> test_fixUndefinedClass() async {
-    await createProject();
     addTestFile('''
 main() {
   Completer<String> x = null;
@@ -58,8 +56,7 @@
 }
 ''');
     await waitForTasksFinished();
-    doAllDeclarationsTrackerWork();
-    var errorFixes = await _getFixesAt('Completer<String>');
+    var errorFixes = await _getFixesAt(testFile, 'Completer<String>');
     expect(errorFixes, hasLength(1));
     var fixes = errorFixes[0].fixes;
     expect(fixes, hasLength(3));
@@ -82,15 +79,13 @@
       info: Future.value(result.toResponse('-', 1))
     };
 
-    await createProject();
     addTestFile('main() {}');
     await waitForTasksFinished();
-    var errorFixes = await _getFixesAt('in(');
+    var errorFixes = await _getFixesAt(testFile, 'in(');
     expect(errorFixes, hasLength(1));
   }
 
   Future<void> test_hasFixes() async {
-    await createProject();
     addTestFile('''
 foo() {
   print(1)
@@ -102,13 +97,13 @@
     await waitForTasksFinished();
     // print(1)
     {
-      var errorFixes = await _getFixesAt('print(1)');
+      var errorFixes = await _getFixesAt(testFile, 'print(1)');
       expect(errorFixes, hasLength(1));
       _isSyntacticErrorWithSingleFix(errorFixes[0]);
     }
     // print(10)
     {
-      var errorFixes = await _getFixesAt('print(10)');
+      var errorFixes = await _getFixesAt(testFile, 'print(10)');
       expect(errorFixes, hasLength(2));
       _isSyntacticErrorWithSingleFix(errorFixes[0]);
       _isSyntacticErrorWithSingleFix(errorFixes[1]);
@@ -117,72 +112,73 @@
 
   Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = EditGetFixesParams('test.dart', 0).toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
   Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request = EditGetFixesParams(convertPath('/foo/../bar/test.dart'), 0)
         .toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
   Future<void> test_overlayOnlyFile() async {
-    await createProject();
-    testCode = '''
+    await _addOverlay(testFile.path, '''
 main() {
 print(1)
 }
-''';
-    await _addOverlay(testFile, testCode);
+''');
+
+    var file = server.resourceProvider.getFile(testFile.path);
+
     // ask for fixes
     await waitForTasksFinished();
-    var errorFixes = await _getFixesAt('print(1)');
+    var errorFixes = await _getFixesAt(file, 'print(1)');
     expect(errorFixes, hasLength(1));
     _isSyntacticErrorWithSingleFix(errorFixes[0]);
   }
 
   Future<void> test_suggestImportFromDifferentAnalysisRoot() async {
     newPackageConfigJsonFile(
-      '/aaa',
+      '$workspaceRootPath/aaa',
       (PackageConfigFileBuilder()
-            ..add(name: 'aaa', rootPath: '/aaa')
-            ..add(name: 'bbb', rootPath: '/bbb'))
+            ..add(name: 'aaa', rootPath: '$workspaceRootPath/aaa')
+            ..add(name: 'bbb', rootPath: '$workspaceRootPath/bbb'))
           .toContent(toUriStr: toUriStr),
     );
-    newPubspecYamlFile('/aaa', r'''
+    newPubspecYamlFile('$workspaceRootPath/aaa', r'''
 dependencies:
   bbb: any
 ''');
 
     newPackageConfigJsonFile(
-      '/bbb',
-      (PackageConfigFileBuilder()..add(name: 'bbb', rootPath: '/bbb'))
+      '$workspaceRootPath/bbb',
+      (PackageConfigFileBuilder()
+            ..add(name: 'bbb', rootPath: '$workspaceRootPath/bbb'))
           .toContent(toUriStr: toUriStr),
     );
-    newFile2('/bbb/lib/target.dart', 'class Foo() {}');
-    newFile2('/bbb/lib/target.generated.dart', 'class Foo() {}');
-    newFile2('/bbb/lib/target.template.dart', 'class Foo() {}');
-
-    await setRoots(
-        included: [convertPath('/aaa'), convertPath('/bbb')], excluded: []);
+    newFile2('$workspaceRootPath/bbb/lib/target.dart', 'class Foo() {}');
+    newFile2(
+        '$workspaceRootPath/bbb/lib/target.generated.dart', 'class Foo() {}');
+    newFile2(
+        '$workspaceRootPath/bbb/lib/target.template.dart', 'class Foo() {}');
 
     // Configure the test file.
-    testFile = convertPath('/aaa/main.dart');
-    testCode = 'main() { new Foo(); }';
-    await _addOverlay(testFile, testCode);
+    final file =
+        newFile2('$workspaceRootPath/aaa/main.dart', 'main() { new Foo(); }');
 
     await waitForTasksFinished();
-    doAllDeclarationsTrackerWork();
 
-    var fixes = (await _getFixesAt('Foo()'))
+    var fixes = (await _getFixesAt(file, 'Foo()'))
         .single
         .fixes
         .map((f) => f.message)
@@ -197,22 +193,23 @@
   }
 
   Future<void> _addOverlay(String name, String contents) async {
-    var request =
-        AnalysisUpdateContentParams({name: AddContentOverlay(contents)})
-            .toRequest('0');
-    await waitResponse(request);
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        name: AddContentOverlay(contents),
+      }).toRequest('0'),
+    );
   }
 
-  Future<List<AnalysisErrorFixes>> _getFixes(int offset) async {
-    var request = EditGetFixesParams(testFile, offset).toRequest('0');
-    var response = await waitResponse(request);
+  Future<List<AnalysisErrorFixes>> _getFixes(File file, int offset) async {
+    var request = EditGetFixesParams(file.path, offset).toRequest('0');
+    var response = await handleSuccessfulRequest(request);
     var result = EditGetFixesResult.fromResponse(response);
     return result.fixes;
   }
 
-  Future<List<AnalysisErrorFixes>> _getFixesAt(String search) async {
-    var offset = findOffset(search);
-    return await _getFixes(offset);
+  Future<List<AnalysisErrorFixes>> _getFixesAt(File file, String search) async {
+    var offset = offsetInFile(file, search);
+    return await _getFixes(file, offset);
   }
 
   void _isSyntacticErrorWithSingleFix(AnalysisErrorFixes fixes) {
diff --git a/pkg/analysis_server/test/edit/format_if_enabled_test.dart b/pkg/analysis_server/test/edit/format_if_enabled_test.dart
index df10b41..0d6a3b0 100644
--- a/pkg/analysis_server/test/edit/format_if_enabled_test.dart
+++ b/pkg/analysis_server/test/edit/format_if_enabled_test.dart
@@ -3,12 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/edit/edit_domain.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -17,23 +16,22 @@
 }
 
 @reflectiveTest
-class FormatIfEnabledTest extends AbstractAnalysisTest {
+class FormatIfEnabledTest extends PubPackageAnalysisServerTest {
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
-    handler = EditDomainHandler(server);
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_enabled() async {
-    newAnalysisOptionsYamlFile2(testFolder, '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 code-style:
   format: true
 ''');
     addTestFile('''
 void f() { int x = 3; }
 ''');
-    newFile2('$testFolder/a.dart', '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A { A(); }
 ''');
     var edits = await _format();
@@ -61,8 +59,9 @@
 
   Future<List<SourceFileEdit>> _format() async {
     await waitForTasksFinished();
-    var request = EditFormatIfEnabledParams([testFolder]).toRequest('0');
-    var response = await waitResponse(request);
+    var request =
+        EditFormatIfEnabledParams([testPackageRoot.path]).toRequest('0');
+    var response = await handleSuccessfulRequest(request);
     return EditFormatIfEnabledResult.fromResponse(response).edits;
   }
 }
diff --git a/pkg/analysis_server/test/edit/format_test.dart b/pkg/analysis_server/test/edit/format_test.dart
index 742ae2a..d3dc46c 100644
--- a/pkg/analysis_server/test/edit/format_test.dart
+++ b/pkg/analysis_server/test/edit/format_test.dart
@@ -3,11 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/edit/edit_domain.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
+import '../analysis_server_base.dart';
 import '../mocks.dart';
 
 void main() {
@@ -17,12 +16,11 @@
 }
 
 @reflectiveTest
-class FormatTest extends AbstractAnalysisTest {
+class FormatTest extends PubPackageAnalysisServerTest {
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
-    handler = EditDomainHandler(server);
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_format_longLine() async {
@@ -100,17 +98,18 @@
 main() { int x =
 ''');
     await waitForTasksFinished();
-    var request = EditFormatParams(testFile, 0, 3).toRequest('0');
-    var response = await waitResponse(request);
+    var request = EditFormatParams(testFile.path, 0, 3).toRequest('0');
+    var response = await handleRequest(request);
     expect(response, isResponseFailure('0'));
   }
 
   Future<EditFormatResult> _formatAt(int selectionOffset, int selectionLength,
       {int? lineLength}) async {
-    var request = EditFormatParams(testFile, selectionOffset, selectionLength,
+    var request = EditFormatParams(
+            testFile.path, selectionOffset, selectionLength,
             lineLength: lineLength)
         .toRequest('0');
-    var response = await waitResponse(request);
+    var response = await handleSuccessfulRequest(request);
     return EditFormatResult.fromResponse(response);
   }
 }
diff --git a/pkg/analysis_server/test/edit/organize_directives_test.dart b/pkg/analysis_server/test/edit/organize_directives_test.dart
index fccfa57..d1909f0 100644
--- a/pkg/analysis_server/test/edit/organize_directives_test.dart
+++ b/pkg/analysis_server/test/edit/organize_directives_test.dart
@@ -3,13 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/edit/edit_domain.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
-import '../mocks.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -18,14 +16,13 @@
 }
 
 @reflectiveTest
-class OrganizeDirectivesTest extends AbstractAnalysisTest {
+class OrganizeDirectivesTest extends PubPackageAnalysisServerTest {
   late SourceFileEdit fileEdit;
 
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
-    handler = EditDomainHandler(server);
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   @failingTest
@@ -34,9 +31,12 @@
     var request =
         EditOrganizeDirectivesParams(convertPath('/no/such/file.dart'))
             .toRequest('0');
-    var response = await waitResponse(request);
-    expect(
-        response, isResponseFailure('0', RequestErrorCode.FILE_NOT_ANALYZED));
+    var response = await handleRequest(request);
+    assertResponseFailure(
+      response,
+      requestId: '0',
+      errorCode: RequestErrorCode.FILE_NOT_ANALYZED,
+    );
   }
 
   Future test_BAD_hasParseError() async {
@@ -45,27 +45,34 @@
 
 main() {}
 ''');
-    var request = EditOrganizeDirectivesParams(testFile).toRequest('0');
-    var response = await waitResponse(request);
-    expect(response,
-        isResponseFailure('0', RequestErrorCode.ORGANIZE_DIRECTIVES_ERROR));
+    var request = EditOrganizeDirectivesParams(testFile.path).toRequest('0');
+    var response = await handleRequest(request);
+    assertResponseFailure(
+      response,
+      requestId: '0',
+      errorCode: RequestErrorCode.ORGANIZE_DIRECTIVES_ERROR,
+    );
   }
 
   Future test_BAD_notDartFile() async {
     var request = EditOrganizeDirectivesParams(
       convertPath('/not-a-Dart-file.txt'),
     ).toRequest('0');
-    var response = await waitResponse(request);
-    expect(
-        response, isResponseFailure('0', RequestErrorCode.FILE_NOT_ANALYZED));
+    var response = await handleRequest(request);
+    assertResponseFailure(
+      response,
+      requestId: '0',
+      errorCode: RequestErrorCode.FILE_NOT_ANALYZED,
+    );
   }
 
   Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = EditOrganizeDirectivesParams('test.dart').toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
@@ -73,10 +80,11 @@
     var request =
         EditOrganizeDirectivesParams(convertPath('/foo/../bar/test.dart'))
             .toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
@@ -147,13 +155,13 @@
 
   Future _assertOrganized(String expectedCode) async {
     await _requestOrganize();
-    var resultCode = SourceEdit.applySequence(testCode, fileEdit.edits);
+    var resultCode = SourceEdit.applySequence(testFileContent, fileEdit.edits);
     expect(resultCode, expectedCode);
   }
 
   Future _requestOrganize() async {
-    var request = EditOrganizeDirectivesParams(testFile).toRequest('0');
-    var response = await waitResponse(request);
+    var request = EditOrganizeDirectivesParams(testFile.path).toRequest('0');
+    var response = await handleSuccessfulRequest(request);
     var result = EditOrganizeDirectivesResult.fromResponse(response);
     fileEdit = result.edit;
   }
diff --git a/pkg/analysis_server/test/edit/postfix_completion_test.dart b/pkg/analysis_server/test/edit/postfix_completion_test.dart
index 0de0e1c..5a49b9a 100644
--- a/pkg/analysis_server/test/edit/postfix_completion_test.dart
+++ b/pkg/analysis_server/test/edit/postfix_completion_test.dart
@@ -4,13 +4,11 @@
 
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/edit/edit_domain.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
-import '../mocks.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -19,14 +17,13 @@
 }
 
 @reflectiveTest
-class PostfixCompletionTest extends AbstractAnalysisTest {
+class PostfixCompletionTest extends PubPackageAnalysisServerTest {
   late SourceChange change;
 
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
-    handler = EditDomainHandler(server);
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_for() async {
@@ -49,10 +46,11 @@
   Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request =
         EditGetPostfixCompletionParams('test.dart', '.for', 0).toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
@@ -60,10 +58,11 @@
     var request = EditGetPostfixCompletionParams(
             convertPath('/foo/../bar/test.dart'), '.for', 0)
         .toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
@@ -71,7 +70,7 @@
     if (change.message == message) {
       if (change.edits.isNotEmpty) {
         var resultCode =
-            SourceEdit.applySequence(testCode, change.edits[0].edits);
+            SourceEdit.applySequence(testFileContent, change.edits[0].edits);
         expect(resultCode, expectedCode.replaceAll('/*caret*/', ''));
       }
       return;
@@ -81,24 +80,24 @@
 
   Future<void> _prepareCompletion(String key) async {
     var offset = findOffset(key);
-    var src = testCode.replaceFirst(key, '', offset);
+    var src = testFileContent.replaceFirst(key, '', offset);
     modifyTestFile(src);
     await _prepareCompletionAt(offset, key);
   }
 
   Future<void> _prepareCompletionAt(int offset, String key) async {
-    var params = EditGetPostfixCompletionParams(testFile, key, offset);
+    var params = EditGetPostfixCompletionParams(testFile.path, key, offset);
     var request =
         Request('0', 'edit.isPostfixCompletionApplicable', params.toJson());
-    var response = await waitResponse(request, throwOnError: false);
+    var response = await handleSuccessfulRequest(request);
     var isApplicable =
         EditIsPostfixCompletionApplicableResult.fromResponse(response);
     if (!isApplicable.value) {
       fail('Postfix completion not applicable at given location');
     }
-    request =
-        EditGetPostfixCompletionParams(testFile, key, offset).toRequest('1');
-    response = await waitResponse(request, throwOnError: false);
+    request = EditGetPostfixCompletionParams(testFile.path, key, offset)
+        .toRequest('1');
+    response = await handleSuccessfulRequest(request);
     var result = EditGetPostfixCompletionResult.fromResponse(response);
     change = result.change;
   }
diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart
index e391b6c..8f47785 100644
--- a/pkg/analysis_server/test/edit/refactoring_test.dart
+++ b/pkg/analysis_server/test/edit/refactoring_test.dart
@@ -4,7 +4,6 @@
 
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/domain_server.dart';
 import 'package:analysis_server/src/edit/edit_domain.dart';
 import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
@@ -12,6 +11,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../analysis_abstract.dart';
+import '../analysis_server_base.dart';
 import '../mocks.dart';
 import '../src/utilities/mock_packages.dart';
 
@@ -115,7 +115,7 @@
   Future<Response> _sendConvertRequest(String search) {
     var request = EditGetRefactoringParams(
             RefactoringKind.CONVERT_GETTER_TO_METHOD,
-            testFile,
+            testFile.path,
             findOffset(search),
             0,
             false)
@@ -227,7 +227,7 @@
   Future<Response> _sendConvertRequest(String search) {
     var request = EditGetRefactoringParams(
             RefactoringKind.CONVERT_METHOD_TO_GETTER,
-            testFile,
+            testFile.path,
             findOffset(search),
             0,
             false)
@@ -261,16 +261,16 @@
   }
 
   @override
-  void tearDown() {
+  Future<void> tearDown() async {
     test_simulateRefactoringException_init = false;
     test_simulateRefactoringException_final = false;
     test_simulateRefactoringException_change = false;
-    super.tearDown();
+    await super.tearDown();
   }
 
   Future<void> test_analysis_onlyOneFile() async {
     shouldWaitForFullAnalysis = false;
-    newFile2(join(testFolder, 'other.dart'), r'''
+    newFile2('$testPackageLibPath/other.dart', r'''
 foo(int myName) {}
 ''');
     addTestFile('''
@@ -295,13 +295,14 @@
 }
 ''');
     return getRefactoringResult(() {
-      return sendExtractRequest(testCode.indexOf('222 +'), 0, 'res', true);
+      return sendExtractRequest(
+          testFileContent.indexOf('222 +'), 0, 'res', true);
     }).then((result) {
       var feedback = result.feedback as ExtractLocalVariableFeedback;
       expect(feedback.coveringExpressionOffsets, [
-        testCode.indexOf('222 +'),
-        testCode.indexOf('111 +'),
-        testCode.indexOf('111 +')
+        testFileContent.indexOf('222 +'),
+        testFileContent.indexOf('111 +'),
+        testFileContent.indexOf('111 +')
       ]);
       expect(feedback.coveringExpressionLengths,
           ['222'.length, '111 + 222'.length, '111 + 222 + 333'.length]);
@@ -348,10 +349,11 @@
     var request = EditGetRefactoringParams(
             RefactoringKind.EXTRACT_LOCAL_VARIABLE, 'test.dart', 0, 0, true)
         .toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
@@ -363,10 +365,11 @@
             0,
             true)
         .toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
@@ -442,7 +445,7 @@
 
     await checkUpdate(() {
       server.updateContent('u1', {
-        testFile: AddContentOverlay('''
+        testFile.path: AddContentOverlay('''
 void f() {
   print(1 + 2); // 1
 }
@@ -452,7 +455,7 @@
 
     await checkUpdate(() {
       server.updateContent('u2', {
-        testFile: ChangeContentOverlay([
+        testFile.path: ChangeContentOverlay([
           SourceEdit(0, 0, '''
 void f() {
   print(1 + 2); // 2
@@ -463,12 +466,12 @@
     });
 
     await checkUpdate(() {
-      server.updateContent('u3', {testFile: RemoveContentOverlay()});
+      server.updateContent('u3', {testFile.path: RemoveContentOverlay()});
     });
   }
 
   Future<void> test_resetOnAnalysisSetChanged_watch_otherFile() async {
-    var otherFile = join(testFolder, 'other.dart');
+    var otherFile = join('$testPackageLibPath/other.dart');
     newFile2(otherFile, '// other 1');
     addTestFile('''
 void f() {
@@ -1090,8 +1093,7 @@
 class InlineLocalTest extends _AbstractGetRefactoring_Test {
   Future<void> test_analysis_onlyOneFile() async {
     shouldWaitForFullAnalysis = false;
-    var otherFile = join(testFolder, 'other.dart');
-    newFile2(otherFile, r'''
+    newFile2('$testPackageLibPath/other.dart', r'''
 foo(int p) {}
 ''');
     addTestFile('''
@@ -1159,7 +1161,7 @@
   }
 
   Future<void> test_resetOnAnalysisSetChanged() async {
-    newFile2(join(testFolder, 'other.dart'), '// other 1');
+    newFile2('$testPackageLibPath/other.dart', '// other 1');
     addTestFile('''
 void f() {
   int res = 1 + 2;
@@ -1185,7 +1187,7 @@
   Future<Response> _sendInlineRequest(String search) {
     var request = EditGetRefactoringParams(
             RefactoringKind.INLINE_LOCAL_VARIABLE,
-            testFile,
+            testFile.path,
             findOffset(search),
             0,
             false)
@@ -1309,7 +1311,7 @@
 
   Future<Response> _sendInlineRequest(String search) {
     var request = EditGetRefactoringParams(RefactoringKind.INLINE_METHOD,
-            testFile, findOffset(search), 0, false,
+            testFile.path, findOffset(search), 0, false,
             options: options)
         .toRequest('0');
     return serverChannel.sendRequest(request);
@@ -1321,42 +1323,43 @@
   late MoveFileOptions options;
 
   Future<void> test_file_OK() {
-    newFile2('/project/bin/lib.dart', '');
+    newFile2('$testPackageLibPath/a.dart', '');
     addTestFile('''
 import 'dart:math';
-import 'lib.dart';
+import 'a.dart';
 ''');
-    _setOptions('/project/test.dart');
+    _setOptions('$testPackageRootPath/test.dart');
     return assertSuccessfulRefactoring(() {
-      return _sendMoveRequest(testFile);
+      return _sendMoveRequest(testFile.path);
     }, '''
 import 'dart:math';
-import 'bin/lib.dart';
+import 'lib/a.dart';
 ''');
   }
 
   Future<void> test_folder_cancel() {
-    newFile2('/project/bin/original_folder/file.dart', '');
+    newFile2('$testPackageLibPath/original_folder/file.dart', '');
     addTestFile('''
 import 'dart:math';
 import 'original_folder/file.dart';
 ''');
-    _setOptions('/project/bin/new_folder');
+    _setOptions('$testPackageLibPath/new_folder');
     return assertEmptySuccessfulRefactoring(() async {
       return _sendAndCancelMoveRequest(
-          convertPath('/project/bin/original_folder'));
+          getFolder('$testPackageLibPath/original_folder').path);
     });
   }
 
   Future<void> test_folder_OK() {
-    newFile2('/project/bin/original_folder/file.dart', '');
+    newFile2('$testPackageLibPath/original_folder/file.dart', '');
     addTestFile('''
 import 'dart:math';
 import 'original_folder/file.dart';
 ''');
-    _setOptions('/project/bin/new_folder');
+    _setOptions('$testPackageLibPath/new_folder');
     return assertSuccessfulRefactoring(() async {
-      return _sendMoveRequest(convertPath('/project/bin/original_folder'));
+      return _sendMoveRequest(
+          getFolder('$testPackageLibPath/original_folder').path);
     }, '''
 import 'dart:math';
 import 'new_folder/file.dart';
@@ -1396,19 +1399,19 @@
   Future<Response> sendRenameRequest(String search, String? newName,
       {String id = '0', bool validateOnly = false}) {
     var options = newName != null ? RenameOptions(newName) : null;
-    var request = EditGetRefactoringParams(RefactoringKind.RENAME, testFile,
-            findOffset(search), 0, validateOnly,
+    var request = EditGetRefactoringParams(RefactoringKind.RENAME,
+            testFile.path, findOffset(search), 0, validateOnly,
             options: options)
         .toRequest(id);
     return serverChannel.sendRequest(request);
   }
 
   @override
-  void tearDown() {
+  Future<void> tearDown() async {
     test_simulateRefactoringReset_afterInitialConditions = false;
     test_simulateRefactoringReset_afterFinalConditions = false;
     test_simulateRefactoringReset_afterCreateChange = false;
-    super.tearDown();
+    await super.tearDown();
   }
 
   Future<void> test_cancelPendingRequest() async {
@@ -2132,7 +2135,7 @@
   }
 
   Future<void> test_library_partOfDirective() {
-    newFile2(join(testFolder, 'my_lib.dart'), '''
+    newFile2('$testPackageLibPath/my_lib.dart', '''
 library aaa.bbb.ccc;
 part 'test.dart';
 ''');
@@ -2249,7 +2252,7 @@
   print(otherName);
 }
 ''');
-    server.getAnalysisDriver(testFile)!.getResult(testFile);
+    server.getAnalysisDriver(testFile.path)!.getResult(testFile.path);
     // send the second request, with the same kind, file and offset
     await waitForTasksFinished();
     result = await getRefactoringResult(() {
@@ -2286,7 +2289,7 @@
 }
 
 @reflectiveTest
-class _AbstractGetRefactoring_Test extends AbstractAnalysisTest {
+class _AbstractGetRefactoring_Test extends PubPackageAnalysisServerTest {
   bool shouldWaitForFullAnalysis = true;
 
   Future assertEmptySuccessfulRefactoring(
@@ -2304,7 +2307,7 @@
   /// for [testFile].
   void assertNoTestRefactoringResult(EditGetRefactoringResult result) {
     var change = result.change!;
-    if (change.edits.any((edit) => edit.file == testFile)) {
+    if (change.edits.any((edit) => edit.file == testFile.path)) {
       fail('Found a SourceFileEdit for $testFile in $change');
     }
   }
@@ -2368,8 +2371,9 @@
       EditGetRefactoringResult result, String expectedCode) {
     var change = result.change!;
     for (var fileEdit in change.edits) {
-      if (fileEdit.file == testFile) {
-        var actualCode = SourceEdit.applySequence(testCode, fileEdit.edits);
+      if (fileEdit.file == testFile.path) {
+        var actualCode =
+            SourceEdit.applySequence(testFileContent, fileEdit.edits);
         expect(actualCode, expectedCode);
         return;
       }
@@ -2390,7 +2394,7 @@
       RefactoringKind kind, int offset, int length, RefactoringOptions? options,
       [bool validateOnly = false]) {
     var request = EditGetRefactoringParams(
-            kind, testFile, offset, length, validateOnly,
+            kind, testFile.path, offset, length, validateOnly,
             options: options)
         .toRequest('0');
     return serverChannel.sendRequest(request);
@@ -2399,10 +2403,6 @@
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
-    server.handlers = [
-      EditDomainHandler(server),
-      ServerDomainHandler(server),
-    ];
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 }
diff --git a/pkg/analysis_server/test/edit/sort_members_test.dart b/pkg/analysis_server/test/edit/sort_members_test.dart
index 05a3cc1..4ec9a50 100644
--- a/pkg/analysis_server/test/edit/sort_members_test.dart
+++ b/pkg/analysis_server/test/edit/sort_members_test.dart
@@ -3,13 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/edit/edit_domain.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
-import '../mocks.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -18,14 +16,13 @@
 }
 
 @reflectiveTest
-class SortMembersTest extends AbstractAnalysisTest {
+class SortMembersTest extends PubPackageAnalysisServerTest {
   late SourceFileEdit fileEdit;
 
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
-    handler = EditDomainHandler(server);
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   @failingTest
@@ -33,9 +30,12 @@
     // The analysis driver fails to return an error
     var request =
         EditSortMembersParams(convertPath('/no/such/file.dart')).toRequest('0');
-    var response = await waitResponse(request);
-    expect(response,
-        isResponseFailure('0', RequestErrorCode.SORT_MEMBERS_INVALID_FILE));
+    var response = await handleRequest(request);
+    assertResponseFailure(
+      response,
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
+    );
   }
 
   Future<void> test_BAD_hasParseError() async {
@@ -44,37 +44,45 @@
   print()
 }
 ''');
-    var request = EditSortMembersParams(testFile).toRequest('0');
-    var response = await waitResponse(request);
-    expect(response,
-        isResponseFailure('0', RequestErrorCode.SORT_MEMBERS_PARSE_ERRORS));
+    var request = EditSortMembersParams(testFile.path).toRequest('0');
+    var response = await handleRequest(request);
+    assertResponseFailure(
+      response,
+      requestId: '0',
+      errorCode: RequestErrorCode.SORT_MEMBERS_PARSE_ERRORS,
+    );
   }
 
   Future<void> test_BAD_notDartFile() async {
     var request = EditSortMembersParams(
       convertPath('/not-a-Dart-file.txt'),
     ).toRequest('0');
-    var response = await waitResponse(request);
-    expect(response,
-        isResponseFailure('0', RequestErrorCode.SORT_MEMBERS_INVALID_FILE));
+    var response = await handleRequest(request);
+    assertResponseFailure(
+      response,
+      requestId: '0',
+      errorCode: RequestErrorCode.SORT_MEMBERS_INVALID_FILE,
+    );
   }
 
   Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = EditSortMembersParams('test.dart').toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
   Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request = EditSortMembersParams(convertPath('/foo/../bar/test.dart'))
         .toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
@@ -195,7 +203,7 @@
   }
 
   Future<void> test_OK_genericFunctionType() async {
-    newAnalysisOptionsYamlFile2(projectPath, '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 analyzer:
   strong-mode: true
 ''');
@@ -260,13 +268,13 @@
 
   Future _assertSorted(String expectedCode) async {
     await _requestSort();
-    var resultCode = SourceEdit.applySequence(testCode, fileEdit.edits);
+    var resultCode = SourceEdit.applySequence(testFileContent, fileEdit.edits);
     expect(resultCode, expectedCode);
   }
 
   Future _requestSort() async {
-    var request = EditSortMembersParams(testFile).toRequest('0');
-    var response = await waitResponse(request);
+    var request = EditSortMembersParams(testFile.path).toRequest('0');
+    var response = await handleSuccessfulRequest(request);
     var result = EditSortMembersResult.fromResponse(response);
     fileEdit = result.edit;
   }
diff --git a/pkg/analysis_server/test/edit/statement_completion_test.dart b/pkg/analysis_server/test/edit/statement_completion_test.dart
index fbbff85..6676f45 100644
--- a/pkg/analysis_server/test/edit/statement_completion_test.dart
+++ b/pkg/analysis_server/test/edit/statement_completion_test.dart
@@ -3,13 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/edit/edit_domain.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
-import '../mocks.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -18,23 +16,23 @@
 }
 
 @reflectiveTest
-class StatementCompletionTest extends AbstractAnalysisTest {
+class StatementCompletionTest extends PubPackageAnalysisServerTest {
   late SourceChange change;
 
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
-    handler = EditDomainHandler(server);
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request =
         EditGetStatementCompletionParams('test.dart', 0).toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
@@ -42,10 +40,11 @@
     var request = EditGetStatementCompletionParams(
             convertPath('/foo/../bar/test.dart'), 0)
         .toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
@@ -106,7 +105,7 @@
     if (change.message == message) {
       if (change.edits.isNotEmpty) {
         var resultCode =
-            SourceEdit.applySequence(testCode, change.edits[0].edits);
+            SourceEdit.applySequence(testFileContent, change.edits[0].edits);
         expect(resultCode, expectedCode.replaceAll('/*caret*/', ''));
         if (cmp != null) {
           var offset = cmp(resultCode);
@@ -114,7 +113,7 @@
         }
       } else {
         if (cmp != null) {
-          var offset = cmp(testCode);
+          var offset = cmp(testFileContent);
           expect(change.selection!.offset, offset);
         }
       }
@@ -136,8 +135,8 @@
 
   Future<void> _prepareCompletionAt(int offset) async {
     var request =
-        EditGetStatementCompletionParams(testFile, offset).toRequest('0');
-    var response = await waitResponse(request);
+        EditGetStatementCompletionParams(testFile.path, offset).toRequest('0');
+    var response = await handleSuccessfulRequest(request);
     var result = EditGetStatementCompletionResult.fromResponse(response);
     change = result.change;
   }