diff --git a/core/modules/update/tests/fixtures/release-history/semver_test.8.1.0-legacy-unsupported.xml b/core/modules/update/tests/fixtures/release-history/semver_test.8.1.0-legacy-unsupported.xml
new file mode 100644
index 0000000000000000000000000000000000000000..34982e963d41cd9d54e309d7f8764204c4d89f9c
--- /dev/null
+++ b/core/modules/update/tests/fixtures/release-history/semver_test.8.1.0-legacy-unsupported.xml
@@ -0,0 +1,238 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+This fixture is used by \Drupal\Tests\update\Functional\UpdateSemverContribTestBase.
+It should be the same as semver_test.1.o.xml with the exception of the value of
+the supported branches element. In this fixture legacy version sre not
+supported.
+-->
+<project xmlns:dc="http://purl.org/dc/elements/1.1/">
+<title>Semver Test</title>
+<short_name>semver_test</short_name>
+<dc:creator>Drupal</dc:creator>
+<supported_branches>8.0.,8.1.</supported_branches>
+<project_status>published</project_status>
+<link>http://example.com/project/semver_test</link>
+<terms>
+  <term><name>Projects</name><value>Semver Test project</value></term>
+</terms>
+  <releases>
+    <release>
+      <!-- This release is not in a supported branch; therefore it should not be recommended. -->
+      <name>Semver Test 8.2.0</name>
+      <version>8.2.0</version>
+      <status>published</status>
+      <release_link>http://example.com/semver_test-8-2-0-release</release_link>
+      <download_link>http://example.com/semver_test-8-2-0.tar.gz</download_link>
+      <date>1584195300</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+      </terms>
+    </release>
+    <release>
+      <name>Semver Test 8.1.0</name>
+      <version>8.1.0</version>
+      <status>published</status>
+      <release_link>http://example.com/semver_test-8-1-0-release</release_link>
+      <download_link>http://example.com/semver_test-8-1-0.tar.gz</download_link>
+      <date>1581603300</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+      </terms>
+    </release>
+    <release>
+      <name>Semver Test 8.1.0-beta1</name>
+      <version>8.1.0-beta1</version>
+      <status>published</status>
+      <release_link>http://example.com/semver_test-8-1-0-beta1-release</release_link>
+      <download_link>http://example.com/semver_test-8-1-0-beta1.tar.gz</download_link>
+      <date>1579011300</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+      </terms>
+    </release>
+    <release>
+      <name>Semver Test 8.1.0-alpha1</name>
+      <version>8.1.0-alpha1</version>
+      <status>published</status>
+      <release_link>http://example.com/semver_test-8-1-0-alpha1-release</release_link>
+      <download_link>http://example.com/semver_test-8-1-0-alpha1.tar.gz</download_link>
+      <date>1576419300</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+      </terms>
+    </release>
+    <release>
+      <name>Semver Test 8.0.3</name>
+      <version>8.0.3</version>
+      <status>published</status>
+      <release_link>http://example.com/semver_test-8-0-3-release</release_link>
+      <download_link>http://example.com/semver_test-8-0-3.tar.gz</download_link>
+      <date>1573827300</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+        <term><name>Release type</name><value>Unsupported</value></term>
+      </terms>
+    </release>
+    <release>
+      <name>Semver Test 8.0.2</name>
+      <version>8.0.2</version>
+      <status>unpublished</status>
+      <release_link>http://example.com/semver_test-8-0-2-release</release_link>
+      <download_link>http://example.com/semver_test-8-0-2.tar.gz</download_link>
+      <date>1571235300</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+      </terms>
+    </release>
+    <release>
+      <name>Semver Test 8.0.1</name>
+      <version>8.0.1</version>
+      <status>published</status>
+      <release_link>http://example.com/semver_test-8-0-1-release</release_link>
+      <download_link>http://example.com/semver_test-8-0-1.tar.gz</download_link>
+      <date>1568643300</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+      </terms>
+    </release>
+    <release>
+      <name>Semver Test 8.0.1-beta1</name>
+      <version>8.0.1-beta1</version>
+      <status>published</status>
+      <release_link>http://example.com/semver_test-8-0-1-beta1-release</release_link>
+      <download_link>http://example.com/semver_test-8-0-1-beta1.tar.gz</download_link>
+      <date>1566051300</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+      </terms>
+    </release>
+    <release>
+      <name>Semver Test 8.0.1-alpha1</name>
+      <version>8.0.1-alpha1</version>
+      <status>published</status>
+      <release_link>http://example.com/semver_test-8-0-1-alpha1-release</release_link>
+      <download_link>http://example.com/semver_test-8-0-1-alpha1.tar.gz</download_link>
+      <date>1563459300</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+      </terms>
+    </release>
+    <release>
+      <name>Semver Test 8.0.0</name>
+      <version>8.0.0</version>
+      <status>published</status>
+      <release_link>http://example.com/semver_test-8-0-0-release</release_link>
+      <download_link>http://example.com/semver_test-8-0-0.tar.gz</download_link>
+      <date>1560867300</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+      </terms>
+    </release>
+    <release>
+      <name>Semver Test 8.0.0-beta1</name>
+      <version>8.0.0-beta1</version>
+      <status>published</status>
+      <release_link>http://example.com/semver_test-8-0-0-beta1-release</release_link>
+      <download_link>http://example.com/semver_test-8-0-0-beta1.tar.gz</download_link>
+      <date>1558275300</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+      </terms>
+    </release>
+    <release>
+      <name>Semver Test 8.0.0-alpha1</name>
+      <version>8.0.0-alpha1</version>
+      <status>published</status>
+      <release_link>http://example.com/semver_test-8-0-0-alpha1-release</release_link>
+      <download_link>http://example.com/semver_test-8-0-0-alpha1.tar.gz</download_link>
+      <date>1555683300</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+      </terms>
+    </release>
+    <release>
+      <name>Semver Test 8.x-7.1</name>
+      <version>8.x-7.1</version>
+      <status>published</status>
+      <release_link>http://example.com/semver_test-8-x-7-1-release</release_link>
+      <download_link>http://example.com/semver_test-8-x-7-1.tar.gz</download_link>
+      <date>1250424521</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+      </terms>
+    </release>
+    <release>
+      <name>Semver Test 8.x-7.1-beta1</name>
+      <version>8.x-7.1-beta1</version>
+      <status>published</status>
+      <release_link>http://example.com/semver_test-8-x-7-1-beta1-release</release_link>
+      <download_link>http://example.com/semver_test-8-x-7-1-beta1.tar.gz</download_link>
+      <date>1250424521</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+      </terms>
+    </release>
+    <release>
+      <name>Semver Test 8.x-7.1-alpha1</name>
+      <version>8.x-7.1-alpha1</version>
+      <status>published</status>
+      <release_link>http://example.com/semver_test-8-x-7-1-alpha1-release</release_link>
+      <download_link>http://example.com/semver_test-8-x-7-1-alpha1.tar.gz</download_link>
+      <date>1250424521</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+      </terms>
+    </release>
+    <release>
+      <name>Semver Test 8.x-7.0</name>
+      <version>8.x-7.0</version>
+      <status>published</status>
+      <release_link>http://example.com/semver_test-8-x-7-0-release</release_link>
+      <download_link>http://example.com/semver_test-8-x-7-0.tar.gz</download_link>
+      <date>1250424521</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+      </terms>
+    </release>
+    <release>
+      <name>Semver Test 8.x-7.0-beta1</name>
+      <version>8.x-7.0-beta1</version>
+      <status>published</status>
+      <release_link>http://example.com/semver_test-8-x-7-0-beta1-release</release_link>
+      <download_link>http://example.com/semver_test-8-x-7-0-beta1.tar.gz</download_link>
+      <date>1250424521</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+      </terms>
+    </release>
+    <release>
+      <name>Semver Test 8.x-7.0-alpha1</name>
+      <version>8.x-7.0-alpha1</version>
+      <status>published</status>
+      <release_link>http://example.com/semver_test-8-x-7-0-alpha1-release</release_link>
+      <download_link>http://example.com/semver_test-8-x-7-0-alpha1.tar.gz</download_link>
+      <date>1250424521</date>
+      <terms>
+        <term><name>Release type</name><value>New features</value></term>
+        <term><name>Release type</name><value>Bug fixes</value></term>
+      </terms>
+    </release>
+  </releases>
+</project>
diff --git a/core/modules/update/tests/fixtures/release-history/semver_test.8.1.0.xml b/core/modules/update/tests/fixtures/release-history/semver_test.8.1.0.xml
index 7f29b0428a1dea3881bd67ba2555e33a5512a6c9..f9e3c159a3560483af746789a87c6f084a54fcaa 100644
--- a/core/modules/update/tests/fixtures/release-history/semver_test.8.1.0.xml
+++ b/core/modules/update/tests/fixtures/release-history/semver_test.8.1.0.xml
@@ -3,7 +3,7 @@
 <title>Semver Test</title>
 <short_name>semver_test</short_name>
 <dc:creator>Drupal</dc:creator>
-<supported_branches>8.0.,8.1.</supported_branches>
+<supported_branches>8.x-7.,8.0.,8.1.</supported_branches>
 <project_status>published</project_status>
 <link>http://example.com/project/semver_test</link>
   <terms>
@@ -168,5 +168,83 @@
      <term><name>Release type</name><value>Bug fixes</value></term>
    </terms>
  </release>
+<release>
+    <name>Semver Test 8.x-7.1</name>
+    <version>8.x-7.1</version>
+    <tag>SEMVER_TEST-8-x-7-1</tag>
+    <status>published</status>
+    <release_link>http://example.com/semver_test-8-x-7-1-release</release_link>
+    <download_link>http://example.com/semver_test-8-x-7-1.tar.gz</download_link>
+    <date>1250424521</date>
+    <terms>
+      <term><name>Release type</name><value>New features</value></term>
+      <term><name>Release type</name><value>Bug fixes</value></term>
+    </terms>
+  </release>
+  <release>
+    <name>Semver Test 8.x-7.1-beta1</name>
+    <version>8.x-7.1-beta1</version>
+    <tag>SEMVER_TEST-8-x-7-1-beta1</tag>
+    <status>published</status>
+    <release_link>http://example.com/semver_test-8-x-7-1-beta1-release</release_link>
+    <download_link>http://example.com/semver_test-8-x-7-1-beta1.tar.gz</download_link>
+    <date>1250424521</date>
+    <terms>
+      <term><name>Release type</name><value>New features</value></term>
+      <term><name>Release type</name><value>Bug fixes</value></term>
+    </terms>
+  </release>
+  <release>
+    <name>Semver Test 8.x-7.1-alpha1</name>
+    <version>8.x-7.1-alpha1</version>
+    <tag>SEMVER_TEST-8-x-7-1-alpha1</tag>
+    <status>published</status>
+    <release_link>http://example.com/semver_test-8-x-7-1-alpha1-release</release_link>
+    <download_link>http://example.com/semver_test-8-x-7-1-alpha1.tar.gz</download_link>
+    <date>1250424521</date>
+    <terms>
+      <term><name>Release type</name><value>New features</value></term>
+      <term><name>Release type</name><value>Bug fixes</value></term>
+    </terms>
+  </release>
+  <release>
+    <name>Semver Test 8.x-7.0</name>
+    <version>8.x-7.0</version>
+    <tag>SEMVER_TEST-8-x-7-0</tag>
+    <status>published</status>
+    <release_link>http://example.com/semver_test-8-x-7-0-release</release_link>
+    <download_link>http://example.com/semver_test-8-x-7-0.tar.gz</download_link>
+    <date>1250424521</date>
+    <terms>
+      <term><name>Release type</name><value>New features</value></term>
+      <term><name>Release type</name><value>Bug fixes</value></term>
+    </terms>
+  </release>
+  <release>
+    <name>Semver Test 8.x-7.0-beta1</name>
+    <version>8.x-7.0-beta1</version>
+    <tag>SEMVER_TEST-8-x-7-0-beta1</tag>
+    <status>published</status>
+    <release_link>http://example.com/semver_test-8-x-7-0-beta1-release</release_link>
+    <download_link>http://example.com/semver_test-8-x-7-0-beta1.tar.gz</download_link>
+    <date>1250424521</date>
+    <terms>
+      <term><name>Release type</name><value>New features</value></term>
+      <term><name>Release type</name><value>Bug fixes</value></term>
+    </terms>
+  </release>
+  <release>
+    <name>Semver Test 8.x-7.0-alpha1</name>
+    <version>8.x-7.0-alpha1</version>
+    <tag>SEMVER_TEST-8-x-7-0-alpha1</tag>
+    <status>published</status>
+    <release_link>http://example.com/semver_test-8-x-7-0-alpha1-release</release_link>
+    <download_link>http://example.com/semver_test-8-x-7-0-alpha1.tar.gz</download_link>
+    <date>1250424521</date>
+    <terms>
+      <term><name>Release type</name><value>New features</value></term>
+      <term><name>Release type</name><value>Bug fixes</value></term>
+    </terms>
+  </release>
 </releases>
 </project>
diff --git a/core/modules/update/tests/fixtures/release-history/semver_test.9.1.0.xml b/core/modules/update/tests/fixtures/release-history/semver_test.9.1.0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c234cb292e0053fb304e832809914d9aec718e6a
--- /dev/null
+++ b/core/modules/update/tests/fixtures/release-history/semver_test.9.1.0.xml
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+This fixture is used by \Drupal\Tests\update\Functional\UpdateSemverContribTestBase.
+ It should be the same as semver_test.1.o.xml with the exception the major
+ version numbers. In this file the major versions are 8 an 9 instead of 7 and 8.
+-->
+<project xmlns:dc="http://purl.org/dc/elements/1.1/">
+<title>Semver Test</title>
+<short_name>semver_test</short_name>
+<dc:creator>Drupal</dc:creator>
+<supported_branches>8.x-8.,9.0.,9.1.</supported_branches>
+<project_status>published</project_status>
+<link>http://example.com/project/semver_test</link>
+  <terms>
+   <term><name>Projects</name><value>Semver Test project</value></term>
+  </terms>
+<releases>
+  <release>
+    <!-- This release is not in a supported branch; therefore it should not be recommended. -->
+    <name>Semver Test 9.2.0</name>
+    <version>9.2.0</version>
+    <status>published</status>
+    <release_link>http://example.com/semver_test-9-2-0-release</release_link>
+    <download_link>http://example.com/semver_test-9-2-0.tar.gz</download_link>
+    <date>1584195300</date>
+    <terms>
+      <term><name>Release type</name><value>New features</value></term>
+      <term><name>Release type</name><value>Bug fixes</value></term>
+    </terms>
+  </release>
+ <release>
+   <name>Semver Test 9.1.0</name>
+   <version>9.1.0</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-9-1-0-release</release_link>
+   <download_link>http://example.com/semver_test-9-1-0.tar.gz</download_link>
+   <date>1581603300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 9.1.0-beta1</name>
+   <version>9.1.0-beta1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-9-1-0-beta1-release</release_link>
+   <download_link>http://example.com/semver_test-9-1-0-beta1.tar.gz</download_link>
+   <date>1579011300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 9.1.0-alpha1</name>
+   <version>9.1.0-alpha1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-9-1-0-alpha1-release</release_link>
+   <download_link>http://example.com/semver_test-9-1-0-alpha1.tar.gz</download_link>
+   <date>1576419300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 9.0.3</name>
+   <version>9.0.3</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-9-0-3-release</release_link>
+   <download_link>http://example.com/semver_test-9-0-3.tar.gz</download_link>
+   <date>1573827300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+     <term><name>Release type</name><value>Unsupported</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 9.0.2</name>
+   <version>9.0.2</version>
+   <status>unpublished</status>
+   <release_link>http://example.com/semver_test-9-0-2-release</release_link>
+   <download_link>http://example.com/semver_test-9-0-2.tar.gz</download_link>
+   <date>1571235300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 9.0.1</name>
+   <version>9.0.1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-9-0-1-release</release_link>
+   <download_link>http://example.com/semver_test-9-0-1.tar.gz</download_link>
+   <date>1568643300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 9.0.1-beta1</name>
+   <version>9.0.1-beta1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-9-0-1-beta1-release</release_link>
+   <download_link>http://example.com/semver_test-9-0-1-beta1.tar.gz</download_link>
+   <date>1566051300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 9.0.1-alpha1</name>
+   <version>9.0.1-alpha1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-9-0-1-alpha1-release</release_link>
+   <download_link>http://example.com/semver_test-9-0-1-alpha1.tar.gz</download_link>
+   <date>1563459300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 9.0.0</name>
+   <version>9.0.0</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-9-0-0-release</release_link>
+   <download_link>http://example.com/semver_test-9-0-0.tar.gz</download_link>
+   <date>1560867300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 9.0.0-beta1</name>
+   <version>9.0.0-beta1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-9-0-0-beta1-release</release_link>
+   <download_link>http://example.com/semver_test-9-0-0-beta1.tar.gz</download_link>
+   <date>1558275300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+ <release>
+   <name>Semver Test 9.0.0-alpha1</name>
+   <version>9.0.0-alpha1</version>
+   <status>published</status>
+   <release_link>http://example.com/semver_test-9-0-0-alpha1-release</release_link>
+   <download_link>http://example.com/semver_test-9-0-0-alpha1.tar.gz</download_link>
+   <date>1555683300</date>
+   <terms>
+     <term><name>Release type</name><value>New features</value></term>
+     <term><name>Release type</name><value>Bug fixes</value></term>
+   </terms>
+ </release>
+<release>
+    <name>Semver Test 8.x-8.1</name>
+    <version>8.x-8.1</version>
+    <status>published</status>
+    <release_link>http://example.com/semver_test-8-x-8-1-release</release_link>
+    <download_link>http://example.com/semver_test-8-x-8-1.tar.gz</download_link>
+    <date>1250424521</date>
+    <terms>
+      <term><name>Release type</name><value>New features</value></term>
+      <term><name>Release type</name><value>Bug fixes</value></term>
+    </terms>
+  </release>
+  <release>
+    <name>Semver Test 8.x-8.1-beta1</name>
+    <version>8.x-8.1-beta1</version>
+    <status>published</status>
+    <release_link>http://example.com/semver_test-8-x-8-1-beta1-release</release_link>
+    <download_link>http://example.com/semver_test-8-x-8-1-beta1.tar.gz</download_link>
+    <date>1250424521</date>
+    <terms>
+      <term><name>Release type</name><value>New features</value></term>
+      <term><name>Release type</name><value>Bug fixes</value></term>
+    </terms>
+  </release>
+  <release>
+    <name>Semver Test 8.x-8.1-alpha1</name>
+    <version>8.x-8.1-alpha1</version>
+    <status>published</status>
+    <release_link>http://example.com/semver_test-8-x-8-1-alpha1-release</release_link>
+    <download_link>http://example.com/semver_test-8-x-8-1-alpha1.tar.gz</download_link>
+    <date>1250424521</date>
+    <terms>
+      <term><name>Release type</name><value>New features</value></term>
+      <term><name>Release type</name><value>Bug fixes</value></term>
+    </terms>
+  </release>
+  <release>
+    <name>Semver Test 8.x-8.0</name>
+    <version>8.x-8.0</version>
+    <status>published</status>
+    <release_link>http://example.com/semver_test-8-x-8-0-release</release_link>
+    <download_link>http://example.com/semver_test-8-x-8-0.tar.gz</download_link>
+    <date>1250424521</date>
+    <terms>
+      <term><name>Release type</name><value>New features</value></term>
+      <term><name>Release type</name><value>Bug fixes</value></term>
+    </terms>
+  </release>
+  <release>
+    <name>Semver Test 8.x-8.0-beta1</name>
+    <version>8.x-8.0-beta1</version>
+    <status>published</status>
+    <release_link>http://example.com/semver_test-8-x-8-0-beta1-release</release_link>
+    <download_link>http://example.com/semver_test-8-x-8-0-beta1.tar.gz</download_link>
+    <date>1250424521</date>
+    <terms>
+      <term><name>Release type</name><value>New features</value></term>
+      <term><name>Release type</name><value>Bug fixes</value></term>
+    </terms>
+  </release>
+  <release>
+    <name>Semver Test 8.x-8.0-alpha1</name>
+    <version>8.x-8.0-alpha1</version>
+    <status>published</status>
+    <release_link>http://example.com/semver_test-8-x-8-0-alpha1-release</release_link>
+    <download_link>http://example.com/semver_test-8-x-8-0-alpha1.tar.gz</download_link>
+    <date>1250424521</date>
+    <terms>
+      <term><name>Release type</name><value>New features</value></term>
+      <term><name>Release type</name><value>Bug fixes</value></term>
+    </terms>
+  </release>
+</releases>
+</project>
diff --git a/core/modules/update/tests/src/Functional/UpdateSemverContribTestBase.php b/core/modules/update/tests/src/Functional/UpdateSemverContribTestBase.php
index 2b8b257543ddca733ed22843d3dcb64432147c60..032daf3ae9d82d3264984bb5f1419b2856e851a3 100644
--- a/core/modules/update/tests/src/Functional/UpdateSemverContribTestBase.php
+++ b/core/modules/update/tests/src/Functional/UpdateSemverContribTestBase.php
@@ -52,4 +52,69 @@ protected function setProjectInstalledVersion($version) {
     $this->mockDefaultExtensionsInfo(['version' => '8.0.0']);
   }
 
+  /**
+   * Tests updates from legacy versions to the semver versions.
+   */
+  public function testUpdatesLegacyToSemver(): void {
+    // Test cases where the legacy branch is in the XML 'supported_branches' and
+    // when it is not.
+    foreach ([TRUE, FALSE] as $legacy_supported) {
+      // Test 2 legacy majors.
+      foreach ([7, 8] as $legacy_major) {
+        $semver_major = $legacy_major + 1;
+        $installed_versions = [
+          "8.x-$legacy_major.0-alpha1",
+          "8.x-$legacy_major.0-beta1",
+          "8.x-$legacy_major.0",
+          "8.x-$legacy_major.1-alpha1",
+          "8.x-$legacy_major.1-beta1",
+          "8.x-$legacy_major.1",
+        ];
+        foreach ($installed_versions as $installed_version) {
+          $this->setProjectInstalledVersion($installed_version);
+          if ($legacy_supported) {
+            $fixture = $legacy_major === 7 ? '8.1.0' : '9.1.0';
+          }
+          else {
+            if ($legacy_major === 8) {
+              continue;
+            }
+            $fixture = '8.1.0-legacy-unsupported';
+          }
+
+          $this->refreshUpdateStatus([$this->updateProject => $fixture]);
+          $this->assertUpdateTableTextNotContains('Security update required!');
+          $this->assertSession()->elementTextContains('css', $this->updateTableLocator . " .project-update__title", $installed_version);
+          if ($legacy_supported) {
+            // All installed versions should indicate that there is an update
+            // available for the next major version of the module.
+            // '$legacy_major.1.0' is shown for the next major version because
+            // it is the latest full release for that major.
+            // @todo Determine if both 8.0.0 and 8.0.1 should be expected as
+            // "Also available" releases in
+            // https://www.drupal.org/project/node/3100115.
+            $this->assertVersionUpdateLinks('Also available:', "$semver_major.1.0");
+            if ($installed_version === "8.x-$legacy_major.1") {
+              $this->assertUpdateTableTextContains('Up to date');
+              $this->assertUpdateTableTextNotContains('Update available');
+            }
+            else {
+              $this->assertUpdateTableTextNotContains('Up to date');
+              $this->assertUpdateTableTextContains('Update available');
+              // All installed versions besides 8.x-$legacy_major.1 should
+              // recommend 8.x-$legacy_major.1 because it is the latest full
+              // release for the major.
+              $this->assertVersionUpdateLinks('Recommended version:', "8.x-$legacy_major.1");
+            }
+          }
+          else {
+            // If '8.x-7.' is not in the XML 'supported_branches' value then the
+            // latest release for the next major should always be recommended.
+            $this->assertVersionUpdateLinks('Recommended version:', "$semver_major.1.0");
+          }
+        }
+      }
+    }
+  }
+
 }