diff --git a/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
index d984401..a4c02f4 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
@@ -10,14 +10,13 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InvalidAssignmentTest);
-    defineReflectiveTests(InvalidAssignmentNnbdTest);
+    defineReflectiveTests(InvalidAssignmentWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class InvalidAssignmentNnbdTest extends InvalidAssignmentTest
-    with WithNullSafetyMixin {
-  @override
+class InvalidAssignmentTest extends PubPackageResolutionTest
+    with InvalidAssignmentTestCases {
   test_ifNullAssignment() async {
     await assertErrorsInCode('''
 void f(int i) {
@@ -29,9 +28,7 @@
     ]);
   }
 
-  @override
   test_ifNullAssignment_sameType() async {
-    // This test is overridden solely to make [j] nullable.
     await assertNoErrorsInCode('''
 void f(int i) {
   int? j;
@@ -40,9 +37,7 @@
 ''');
   }
 
-  @override
   test_ifNullAssignment_superType() async {
-    // This test is overridden solely to make [n] nullable.
     await assertNoErrorsInCode('''
 void f(int i) {
   num? n;
@@ -75,9 +70,7 @@
     ]);
   }
 
-  @override
   test_typeParameter() async {
-    // This test is overridden solely to make [value] nullable.
     // https://github.com/dart-lang/sdk/issues/14221
     await assertErrorsInCode(r'''
 class B<T> {
@@ -92,9 +85,7 @@
   }
 }
 
-@reflectiveTest
-class InvalidAssignmentTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+mixin InvalidAssignmentTestCases on PubPackageResolutionTest {
   test_assignment_to_dynamic() async {
     await assertErrorsInCode(r'''
 f() {
@@ -175,35 +166,6 @@
     ]);
   }
 
-  test_ifNullAssignment() async {
-    await assertErrorsInCode('''
-void f(int i) {
-  double d;
-  d ??= i;
-}
-''', [
-      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 36, 1),
-    ]);
-  }
-
-  test_ifNullAssignment_sameType() async {
-    await assertNoErrorsInCode('''
-void f(int i) {
-  int j;
-  j ??= i;
-}
-''');
-  }
-
-  test_ifNullAssignment_superType() async {
-    await assertNoErrorsInCode('''
-void f(int i) {
-  num n;
-  n ??= i;
-}
-''');
-  }
-
   test_implicitlyImplementFunctionViaCall_1() async {
     // issue 18341
     //
@@ -543,20 +505,6 @@
     ]);
   }
 
-  test_typeParameter() async {
-    // https://github.com/dart-lang/sdk/issues/14221
-    await assertErrorsInCode(r'''
-class B<T> {
-  T value;
-  void test(num n) {
-    value = n;
-  }
-}
-''', [
-      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 57, 1),
-    ]);
-  }
-
   test_typeParameterRecursion_regress35306() async {
     await assertErrorsInCode(r'''
 class A {}
@@ -606,3 +554,50 @@
     ]);
   }
 }
+
+@reflectiveTest
+class InvalidAssignmentWithoutNullSafetyTest extends PubPackageResolutionTest
+    with InvalidAssignmentTestCases, WithoutNullSafetyMixin {
+  test_ifNullAssignment() async {
+    await assertErrorsInCode('''
+void f(int i) {
+  double d;
+  d ??= i;
+}
+''', [
+      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 36, 1),
+    ]);
+  }
+
+  test_ifNullAssignment_sameType() async {
+    await assertNoErrorsInCode('''
+void f(int i) {
+  int j;
+  j ??= i;
+}
+''');
+  }
+
+  test_ifNullAssignment_superType() async {
+    await assertNoErrorsInCode('''
+void f(int i) {
+  num n;
+  n ??= i;
+}
+''');
+  }
+
+  test_typeParameter() async {
+    // https://github.com/dart-lang/sdk/issues/14221
+    await assertErrorsInCode(r'''
+class B<T> {
+  T value;
+  void test(num n) {
+    value = n;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 57, 1),
+    ]);
+  }
+}
diff --git a/tools/VERSION b/tools/VERSION
index 26d356b..df8e394 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 13
 PATCH 0
-PRERELEASE 54
+PRERELEASE 55
 PRERELEASE_PATCH 0
\ No newline at end of file
