From 7cdfbeec1343f75c6cc9ef8ee6aa05e51475cbc7 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 29 Jan 2026 18:17:54 +0000
Subject: [PATCH 1/3] Initial plan
From d8acbce3082f3bf5644dfee2cf9dc0e5c6de0dcc Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 29 Jan 2026 18:45:52 +0000
Subject: [PATCH 2/3] Move Uri tests from System.Runtime to System.Private.Uri
and consolidate ExtendedFunctionalTests
Co-authored-by: MihaZupan <25307628+MihaZupan@users.noreply.github.com>
---
...rivate.Uri.ExtendedFunctional.Tests.csproj | 9 -
.../UriRelativeResolutionTest.cs | 480 ------------------
.../tests/ExtendedFunctionalTests/UriTests.cs | 191 -------
...System.Private.Uri.Functional.Tests.csproj | 3 +
.../FunctionalTests/UriCreateStringTests.cs} | 2 +-
.../FunctionalTests/UriCreateUriTests.cs} | 2 +-
.../tests/FunctionalTests/UriMethodsTests.cs} | 2 +-
.../tests/FunctionalTests/UriTests.cs | 181 +++++++
.../System.Runtime.Tests.csproj | 3 -
9 files changed, 187 insertions(+), 686 deletions(-)
delete mode 100644 src/libraries/System.Private.Uri/tests/ExtendedFunctionalTests/System.Private.Uri.ExtendedFunctional.Tests.csproj
delete mode 100644 src/libraries/System.Private.Uri/tests/ExtendedFunctionalTests/UriRelativeResolutionTest.cs
delete mode 100644 src/libraries/System.Private.Uri/tests/ExtendedFunctionalTests/UriTests.cs
rename src/libraries/{System.Runtime/tests/System.Runtime.Tests/System/Uri.CreateStringTests.cs => System.Private.Uri/tests/FunctionalTests/UriCreateStringTests.cs} (99%)
rename src/libraries/{System.Runtime/tests/System.Runtime.Tests/System/Uri.CreateUriTests.cs => System.Private.Uri/tests/FunctionalTests/UriCreateUriTests.cs} (99%)
rename src/libraries/{System.Runtime/tests/System.Runtime.Tests/System/Uri.MethodsTests.cs => System.Private.Uri/tests/FunctionalTests/UriMethodsTests.cs} (99%)
diff --git a/src/libraries/System.Private.Uri/tests/ExtendedFunctionalTests/System.Private.Uri.ExtendedFunctional.Tests.csproj b/src/libraries/System.Private.Uri/tests/ExtendedFunctionalTests/System.Private.Uri.ExtendedFunctional.Tests.csproj
deleted file mode 100644
index 819b83682306fe..00000000000000
--- a/src/libraries/System.Private.Uri/tests/ExtendedFunctionalTests/System.Private.Uri.ExtendedFunctional.Tests.csproj
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- $(NetCoreAppCurrent)
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/libraries/System.Private.Uri/tests/ExtendedFunctionalTests/UriRelativeResolutionTest.cs b/src/libraries/System.Private.Uri/tests/ExtendedFunctionalTests/UriRelativeResolutionTest.cs
deleted file mode 100644
index a293d414b4564f..00000000000000
--- a/src/libraries/System.Private.Uri/tests/ExtendedFunctionalTests/UriRelativeResolutionTest.cs
+++ /dev/null
@@ -1,480 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Xunit;
-
-namespace System.PrivateUri.Tests
-{
- ///
- /// Summary description for UriRelativeResolution
- ///
- public class UriRelativeResolutionTest
- {
- // See RFC 3986 Section 5.2.2 and 5.4 http://www.ietf.org/rfc/rfc3986.txt
-
- private readonly Uri _fullBaseUri = new Uri("http://user:PLACEHOLDER@host:9090/path1/path2/path3/fileA?query#fragment");
-
- [Fact]
- public void Uri_Relative_BaseVsAbsolute_ReturnsFullAbsolute()
- {
- string absolute = "http://username:password@hostname:8080/p1/p2/p3/p4/file1?AQuery#TheFragment";
- Uri resolved = new Uri(_fullBaseUri, absolute);
-
- Assert.Equal(absolute, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsAuthority_ReturnsBaseSchemePlusAuthority()
- {
- string authority = "//username:password@hostname:8080/p1/p2/p3/p4/file1?AQuery#TheFragment";
- Uri resolved = new Uri(_fullBaseUri, authority);
-
- string expectedResult = _fullBaseUri.Scheme + ":" + authority;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsFullPath_ReturnsBaseAuthorityPlusFullPath()
- {
- string fullPath = "/p1/p2/p3/p4/file1?AQuery#TheFragment";
- Uri resolved = new Uri(_fullBaseUri, fullPath);
-
- string expectedResult = _fullBaseUri.GetLeftPart(UriPartial.Authority) + fullPath;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsQueryAndFragment_ReturnsBaseAuthorityAndPathPlusQueryAndFragment()
- {
- string queryAndFragment = "?AQuery#TheFragment";
- Uri resolved = new Uri(_fullBaseUri, queryAndFragment);
-
- string expectedResult = _fullBaseUri.GetLeftPart(UriPartial.Path) + queryAndFragment;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsQuery_ReturnsBaseAuthorityAndPathPlusQuery()
- {
- string query = "?AQuery";
- Uri resolved = new Uri(_fullBaseUri, query);
-
- string expectedResult = _fullBaseUri.GetLeftPart(UriPartial.Path) + query;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsFragment_ReturnsBasePlusFragment()
- {
- string fragment = "#TheFragment";
- Uri resolved = new Uri(_fullBaseUri, fragment);
-
- string expectedResult = _fullBaseUri.GetLeftPart(UriPartial.Query) + fragment;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- // Drop the 'filename' part of the path
- // IE: http://a/b/c/d;p?q + y = http://a/b/c/y
- public void Uri_Relative_BaseVsPartialPath_ReturnsMergedPaths()
- {
- string partialPath = "p1/p2/p3/p4/file1?AQuery#TheFragment";
- Uri resolved = new Uri(_fullBaseUri, partialPath);
-
- string baseUri = _fullBaseUri.GetLeftPart(UriPartial.Path);
- string expectedResult = baseUri.Substring(0, baseUri.LastIndexOf("/") + 1) + partialPath;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsSimplePartialPath_ReturnsMergedPaths()
- {
- string partialPath = "p1";
- Uri resolved = new Uri(_fullBaseUri, partialPath);
-
- string baseUri = _fullBaseUri.GetLeftPart(UriPartial.Path);
- string expectedResult = baseUri.Substring(0, baseUri.LastIndexOf("/") + 1) + partialPath;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsSimplePartialPathTrailingSlash_ReturnsMergedPaths()
- {
- string partialPath = "p1/";
- Uri resolved = new Uri(_fullBaseUri, partialPath);
-
- string baseUri = _fullBaseUri.GetLeftPart(UriPartial.Path);
- string expectedResult = baseUri.Substring(0, baseUri.LastIndexOf("/") + 1) + partialPath;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- /* RFC 3986 Section 5.4.2 - System.Uri is a strict parser, not backward compatible with RFC 1630
- "Some parsers allow the scheme name to be present in a relative
- reference if it is the same as the base URI scheme. This is
- considered to be a loophole in prior specifications of partial URI
- [RFC1630]. Its use should be avoided but is allowed for backward
- compatibility.
-
- "http:g" = "http:g" ; for strict parsers
- / "http://a/b/c/g" ; for backward compatibility "*/
- public void Uri_Relative_BaseVsSimplePartialPathWithScheme_ReturnsPartialPathWithScheme()
- {
- string partialPath = "scheme:p1";
- Uri resolved = new Uri(_fullBaseUri, partialPath);
-
- string expectedResult = partialPath;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsDoubleCharColinChar_ReturnsCharColinChar()
- {
- string basicUri = "gd:a";
- Uri resolved = new Uri(_fullBaseUri, basicUri);
-
- string expectedResult = basicUri;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsFileLikeUri_MissingRootSlash_ThrowsUriFormatException()
- {
- Assert.ThrowsAny(() => new Uri(_fullBaseUri, "g:a"));
- }
-
- #region PathCompression
-
- [Fact]
- public void Uri_Relative_BaseVsSingleDotSlashStartingCompressPath_ReturnsMergedPathsWithoutSingleDot()
- {
- string compressible = "./";
- string partialPath = "p1/p2/p3/p4/file1?AQuery#TheFragment";
- Uri resolved = new Uri(_fullBaseUri, compressible + partialPath);
-
- string baseUri = _fullBaseUri.GetLeftPart(UriPartial.Path);
- string expectedResult = baseUri.Substring(0, baseUri.LastIndexOf("/") + 1) + partialPath;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsDoubleDotSlashStartingCompressPath_ReturnsBasePathBacksteppedOncePlusRelativePath()
- {
- string compressible = "../";
- string partialPath = "p1/p2/p3/p4/file1?AQuery#TheFragment";
- Uri resolved = new Uri(_fullBaseUri, compressible + partialPath);
-
- string baseUri = _fullBaseUri.GetLeftPart(UriPartial.Path);
- baseUri = baseUri.Substring(0, baseUri.LastIndexOf("/"));
- string expectedResult = baseUri.Substring(0, baseUri.LastIndexOf("/") + 1) + partialPath;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsDoubleDoubleDotSlashStartingCompressPath_ReturnsBasePathBacksteppedTwicePlusRelativePath()
- {
- string compressible = "../../";
- string partialPath = "p1/p2/p3/p4/file1?AQuery#TheFragment";
- Uri resolved = new Uri(_fullBaseUri, compressible + partialPath);
-
- string baseUri = _fullBaseUri.GetLeftPart(UriPartial.Path);
- baseUri = baseUri.Substring(0, baseUri.LastIndexOf("/"));
- baseUri = baseUri.Substring(0, baseUri.LastIndexOf("/"));
- string expectedResult = baseUri.Substring(0, baseUri.LastIndexOf("/") + 1) + partialPath;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsTripleDoubleDotSlashStartingCompressPath_ReturnsBaseWithoutPathPlusRelativePath()
- {
- string compressible = "../../../";
- string partialPath = "p1/p2/p3/p4/file1?AQuery#TheFragment";
- Uri resolved = new Uri(_fullBaseUri, compressible + partialPath);
-
- string baseUri = _fullBaseUri.GetLeftPart(UriPartial.Authority);
- string expectedResult = baseUri + "/" + partialPath;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsTooManyDoubleDotSlashStartingCompressPath_ReturnsBaseWithoutPathPlusRelativePath()
- {
- string compressible = "../../../../";
- string partialPath = "p1/p2/p3/p4/file1?AQuery#TheFragment";
- Uri resolved = new Uri(_fullBaseUri, compressible + partialPath);
-
- string baseUri = _fullBaseUri.GetLeftPart(UriPartial.Authority);
- string expectedResult = baseUri + "/" + partialPath;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsSingleDotSlashEndingCompressPath_ReturnsMergedPathsWithoutSingleDot()
- {
- string compressible = "./";
- string partialPath = "p1/p2/p3/p4/";
- Uri resolved = new Uri(_fullBaseUri, partialPath + compressible);
-
- string baseUri = _fullBaseUri.GetLeftPart(UriPartial.Path);
- string expectedResult = baseUri.Substring(0, baseUri.LastIndexOf("/") + 1) + partialPath;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsSingleDotEndingCompressPath_ReturnsMergedPathsWithoutSingleDot()
- {
- string compressible = ".";
- string partialPath = "p1/p2/p3/p4/";
- Uri resolved = new Uri(_fullBaseUri, partialPath + compressible);
-
- string baseUri = _fullBaseUri.GetLeftPart(UriPartial.Path);
- string expectedResult = baseUri.Substring(0, baseUri.LastIndexOf("/") + 1) + partialPath;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsSingleDot_ReturnsBasePathMinusFileWithoutSingleDot()
- {
- string compressible = ".";
- Uri resolved = new Uri(_fullBaseUri, compressible);
-
- string baseUri = _fullBaseUri.GetLeftPart(UriPartial.Path);
- string expectedResult = baseUri.Substring(0, baseUri.LastIndexOf("/") + 1);
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsSlashDot_ReturnsBaseMinusPath()
- {
- string compressible = "/.";
- Uri resolved = new Uri(_fullBaseUri, compressible);
-
- string expectedResult = _fullBaseUri.GetLeftPart(UriPartial.Authority) + "/";
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsSlashDotSlashFile_ReturnsBasePlusRelativeFile()
- {
- string compressible = "/./file";
- Uri resolved = new Uri(_fullBaseUri, compressible);
-
- string expectedResult = _fullBaseUri.GetLeftPart(UriPartial.Authority) + "/file";
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsSlashDoubleDotSlashFile_ReturnsBasePlusRelativeFile()
- {
- string compressible = "/../file";
- Uri resolved = new Uri(_fullBaseUri, compressible);
-
- string expectedResult = _fullBaseUri.GetLeftPart(UriPartial.Authority) + "/file";
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsCharDot_ReturnsBasePathPlusCharDot()
- {
- string nonCompressible = "f.";
- Uri resolved = new Uri(_fullBaseUri, nonCompressible);
-
- string baseUri = _fullBaseUri.GetLeftPart(UriPartial.Path);
- string expectedResult = baseUri.Substring(0, baseUri.LastIndexOf("/") + 1) + nonCompressible;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsDotChar_ReturnsBasePathPlusDotChar()
- {
- string nonCompressible = ".f";
- Uri resolved = new Uri(_fullBaseUri, nonCompressible);
-
- string baseUri = _fullBaseUri.GetLeftPart(UriPartial.Path);
- string expectedResult = baseUri.Substring(0, baseUri.LastIndexOf("/") + 1) + nonCompressible;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsCharDoubleDot_ReturnsBasePathPlusCharDoubleDot()
- {
- string nonCompressible = "f..";
- Uri resolved = new Uri(_fullBaseUri, nonCompressible);
-
- string baseUri = _fullBaseUri.GetLeftPart(UriPartial.Path);
- string expectedResult = baseUri.Substring(0, baseUri.LastIndexOf("/") + 1) + nonCompressible;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsDoubleDotChar_ReturnsBasePathPlusDoubleDotChar()
- {
- string nonCompressible = "..f";
- Uri resolved = new Uri(_fullBaseUri, nonCompressible);
-
- string baseUri = _fullBaseUri.GetLeftPart(UriPartial.Path);
- string expectedResult = baseUri.Substring(0, baseUri.LastIndexOf("/") + 1) + nonCompressible;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsTripleDot_ReturnsBasePathPlusTripleDot()
- {
- string nonCompressible = "...";
- Uri resolved = new Uri(_fullBaseUri, nonCompressible);
-
- string baseUri = _fullBaseUri.GetLeftPart(UriPartial.Path);
- string expectedResult = baseUri.Substring(0, baseUri.LastIndexOf("/") + 1) + nonCompressible;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsCharDotSlash_ReturnsCharDotSlash()
- {
- string nonCompressible = "/f./";
- Uri resolved = new Uri(_fullBaseUri, nonCompressible);
-
- string expectedResult = _fullBaseUri.GetLeftPart(UriPartial.Authority) + nonCompressible;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsSlashDotCharSlash_ReturnsSlashDotCharSlash()
- {
- string nonCompressible = "/.f/";
- Uri resolved = new Uri(_fullBaseUri, nonCompressible);
-
- string expectedResult = _fullBaseUri.GetLeftPart(UriPartial.Authority) + nonCompressible;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsCharDoubleDotSlash_ReturnsCharDoubleDotSlash()
- {
- string nonCompressible = "/f../";
- Uri resolved = new Uri(_fullBaseUri, nonCompressible);
-
- string expectedResult = _fullBaseUri.GetLeftPart(UriPartial.Authority) + nonCompressible;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsSlashDoubleDotCharSlash_ReturnsSlashDoubleDotCharSlash()
- {
- string nonCompressible = "/..f/";
- Uri resolved = new Uri(_fullBaseUri, nonCompressible);
-
- string expectedResult = _fullBaseUri.GetLeftPart(UriPartial.Authority) + nonCompressible;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseVsSlashTripleDotSlash_ReturnsSlashTripleDotSlash()
- {
- string nonCompressible = "/.../";
- Uri resolved = new Uri(_fullBaseUri, nonCompressible);
-
- string expectedResult = _fullBaseUri.GetLeftPart(UriPartial.Authority) + nonCompressible;
- Assert.Equal(expectedResult, resolved.ToString());
- }
-
- #endregion PathCompression
-
- #region MakeRelativeToUri
-
- [Fact]
- public void Uri_Relative_BaseMadeRelativeToSamePath_ReturnsQueryAndFragment()
- {
- Uri compareUri = new Uri("http://user:PLACEHOLDER@host:9090/path1/path2/path3/fileA?AQuery#AFragment");
- Uri relative = _fullBaseUri.MakeRelativeUri(compareUri);
-
- string expectedResult = "?AQuery#AFragment"; // compareUri.GetParts(UriComponents.Query | UriComponents.Fragment,UriFormat.Unescaped);
- Assert.Equal(expectedResult, relative.ToString());
- }
-
- [Fact]
- public void Uri_Relative_BaseMadeRelativeToLastSlash_ReturnsDotSlashPlusQueryAndFragment()
- {
- Uri compareUri = new Uri("http://user:PLACEHOLDER@host:9090/path1/path2/path3/?AQuery#AFragment");
- Uri relative = _fullBaseUri.MakeRelativeUri(compareUri);
- Uri reassembled = new Uri(_fullBaseUri, relative); // Symmetric
-
-
- string expectedResult = "./" + "?AQuery#AFragment"; // compareUri.GetParts(UriComponents.Query | UriComponents.Fragment, UriFormat.Unescaped);
- Assert.Equal(expectedResult, relative.ToString());
- Assert.Equal(compareUri, reassembled);
- }
-
- [Fact]
- public void Uri_Relative_BaseMadeRelativeToLastSlash_ReturnsDotSlash()
- {
- Uri compareUri = new Uri("http://user:PLACEHOLDER@host:9090/path1/path2/path3/");
- Uri relative = _fullBaseUri.MakeRelativeUri(compareUri);
- Uri reassembled = new Uri(_fullBaseUri, relative); // Symmetric
-
- string expectedResult = "./";
- Assert.Equal(expectedResult, relative.ToString());
- Assert.Equal(compareUri, reassembled);
- }
-
- [Fact]
- public void Uri_Relative_BaseMadeRelativeToLastSlashWithExtra_ReturnsDotSlashPlusQueryAndFragment()
- {
- Uri compareUri = new Uri("http://user:PLACEHOLDER@host:9090/path1/path2/path3/Path4/fileb?AQuery#AFragment");
- Uri relative = _fullBaseUri.MakeRelativeUri(compareUri);
- Uri reassembled = new Uri(_fullBaseUri, relative); // Symmetric
-
- string expectedResult = "Path4/fileb" + "?AQuery#AFragment"; // compareUri.GetParts(UriComponents.Query | UriComponents.Fragment, UriFormat.Unescaped);
- Assert.Equal(expectedResult, relative.ToString());
- Assert.Equal(compareUri, reassembled);
- }
-
- [Fact]
- public void Uri_Relative_BaseMadeRelativeToSecondToLastSlash_ReturnsDoubleDotSlashPlusQueryAndFragment()
- {
- Uri compareUri = new Uri("http://user:PLACEHOLDER@host:9090/path1/path2/?AQuery#AFragment");
- Uri relative = _fullBaseUri.MakeRelativeUri(compareUri);
- Uri reassembled = new Uri(_fullBaseUri, relative); // Symmetric
-
- string expectedResult = "../" + "?AQuery#AFragment"; // compareUri.GetParts(UriComponents.Query | UriComponents.Fragment, UriFormat.Unescaped);
- Assert.Equal(expectedResult, relative.ToString());
- Assert.Equal(compareUri, reassembled);
- }
-
- [Fact]
- public void Uri_Relative_BaseMadeRelativeToThirdToLastSlash_ReturnsDoubleDoubleDotSlashPlusQueryAndFragment()
- {
- Uri compareUri = new Uri("http://user:PLACEHOLDER@host:9090/path1/?AQuery#AFragment");
- Uri relative = _fullBaseUri.MakeRelativeUri(compareUri);
- Uri reassembled = new Uri(_fullBaseUri, relative); // Symmetric
-
- string expectedResult = "../../" + "?AQuery#AFragment"; // compareUri.GetParts(UriComponents.Query | UriComponents.Fragment, UriFormat.Unescaped);
- Assert.Equal(expectedResult, relative.ToString());
- Assert.Equal(compareUri, reassembled);
- }
-
- [Fact]
- public void Uri_Relative_BaseMadeRelativeToEmptyPath_ReturnsTripleDoubleDotSlashPlusQueryAndFragment()
- {
- Uri compareUri = new Uri("http://user:PLACEHOLDER@host:9090/?AQuery#AFragment");
- Uri relative = _fullBaseUri.MakeRelativeUri(compareUri);
- Uri reassembled = new Uri(_fullBaseUri, relative); // Symmetric
-
- string expectedResult = "../../../" + "?AQuery#AFragment"; // compareUri.GetParts(UriComponents.Query | UriComponents.Fragment, UriFormat.Unescaped);
- Assert.Equal(expectedResult, relative.ToString());
- Assert.Equal(compareUri, reassembled);
- }
-
- #endregion MakeRelativeToUri
-
- [Fact]
- public void UriRelative_AbsoluteToAbsolute_CustomPortCarriedOver()
- {
- Uri baseUri = new Uri("http://nothing.com/");
- Uri testUri = new Uri("https://specialPort.com:00065535/path?query#fragment");
- Uri resultUri = new Uri(baseUri, testUri);
-
- Assert.Equal(testUri.Port, resultUri.Port);
- }
- }
-}
diff --git a/src/libraries/System.Private.Uri/tests/ExtendedFunctionalTests/UriTests.cs b/src/libraries/System.Private.Uri/tests/ExtendedFunctionalTests/UriTests.cs
deleted file mode 100644
index 82fae3f45034b6..00000000000000
--- a/src/libraries/System.Private.Uri/tests/ExtendedFunctionalTests/UriTests.cs
+++ /dev/null
@@ -1,191 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Xunit;
-
-namespace System.PrivateUri.Tests
-{
- public static class UriTests
- {
- [InlineData(true)]
- [InlineData(false)]
- [Theory]
- public static void TestCtor_String_Boolean(bool dontEscape)
- {
-#pragma warning disable 0618
-#pragma warning disable 0612
- Uri uri = new Uri(@"http://foo/bar/baz#frag", dontEscape);
-#pragma warning restore 0612
-#pragma warning restore 0618
-
- Assert.Equal(@"http://foo/bar/baz#frag", uri.ToString());
-
- Assert.Equal(@"/bar/baz", uri.AbsolutePath);
-
- Assert.Equal(@"http://foo/bar/baz#frag", uri.AbsoluteUri);
-
- Assert.Equal(@"foo", uri.Authority);
-
- Assert.Equal(@"foo", uri.DnsSafeHost);
-
- Assert.Equal(@"#frag", uri.Fragment);
-
- Assert.Equal(@"foo", uri.Host);
-
- Assert.Equal(UriHostNameType.Dns, uri.HostNameType);
-
- Assert.True(uri.IsAbsoluteUri);
-
- Assert.True(uri.IsDefaultPort);
-
- Assert.False(uri.IsFile);
-
- Assert.False(uri.IsLoopback);
-
- Assert.False(uri.IsUnc);
-
- Assert.Equal(@"/bar/baz", uri.LocalPath);
-
- Assert.Equal(@"http://foo/bar/baz#frag", uri.OriginalString);
-
- Assert.Equal(@"/bar/baz", uri.PathAndQuery);
-
- Assert.Equal(80, uri.Port);
-
- Assert.Equal(@"", uri.Query);
-
- Assert.Equal(@"http", uri.Scheme);
-
- string[] ss = uri.Segments;
- Assert.Equal(3, ss.Length);
- Assert.Equal(@"/", ss[0]);
- Assert.Equal(@"bar/", ss[1]);
- Assert.Equal(@"baz", ss[2]);
-
- Assert.Equal(dontEscape, uri.UserEscaped);
-
- Assert.Equal(@"", uri.UserInfo);
- }
-
- [InlineData(true)]
- [InlineData(false)]
- [Theory]
- public static void TestCtor_Uri_String_Boolean(bool dontEscape)
- {
- Uri uri = new Uri(@"http://www.contoso.com/");
-#pragma warning disable 0618
- uri = new Uri(uri, "catalog/shownew.htm?date=today", dontEscape);
-#pragma warning restore 0618
-
- Assert.Equal(@"http://www.contoso.com/catalog/shownew.htm?date=today", uri.ToString());
-
- Assert.Equal(@"/catalog/shownew.htm", uri.AbsolutePath);
-
- Assert.Equal(@"http://www.contoso.com/catalog/shownew.htm?date=today", uri.AbsoluteUri);
-
- Assert.Equal(@"www.contoso.com", uri.Authority);
-
- Assert.Equal(@"www.contoso.com", uri.DnsSafeHost);
-
- Assert.Equal(@"", uri.Fragment);
-
- Assert.Equal(@"www.contoso.com", uri.Host);
-
- Assert.Equal(UriHostNameType.Dns, uri.HostNameType);
-
- Assert.True(uri.IsAbsoluteUri);
-
- Assert.True(uri.IsDefaultPort);
-
- Assert.False(uri.IsFile);
-
- Assert.False(uri.IsLoopback);
-
- Assert.False(uri.IsUnc);
-
- Assert.Equal(@"/catalog/shownew.htm", uri.LocalPath);
-
- Assert.Equal(@"http://www.contoso.com/catalog/shownew.htm?date=today", uri.OriginalString);
-
- Assert.Equal(@"/catalog/shownew.htm?date=today", uri.PathAndQuery);
-
- Assert.Equal(80, uri.Port);
-
- Assert.Equal(@"?date=today", uri.Query);
-
- Assert.Equal(@"http", uri.Scheme);
-
- string[] ss = uri.Segments;
- Assert.Equal(3, ss.Length);
- Assert.Equal(@"/", ss[0]);
- Assert.Equal(@"catalog/", ss[1]);
- Assert.Equal(@"shownew.htm", ss[2]);
-
- Assert.Equal(dontEscape, uri.UserEscaped);
-
- Assert.Equal(@"", uri.UserInfo);
- }
-
- [Fact]
- public static void TestMakeRelative_Invalid()
- {
- var baseUri = new Uri("http://www.domain.com/");
- var relativeUri = new Uri("/path/", UriKind.Relative);
-#pragma warning disable 0618
- AssertExtensions.Throws("toUri", () => baseUri.MakeRelative(null)); // Uri is null
-
- Assert.Throws(() => relativeUri.MakeRelative(baseUri)); // Base uri is relative
- Assert.Throws(() => baseUri.MakeRelative(relativeUri)); // Uri is relative
-#pragma warning restore 0618
- }
-
- [Fact]
- public static void TestMakeRelative()
- {
- // Create a base Uri.
- Uri address1 = new Uri("http://www.contoso.com/");
- Uri address2 = new Uri("http://www.contoso.com:8000/");
- Uri address3 = new Uri("http://username@www.contoso.com/");
-
- // Create a new Uri from a string.
- Uri address4 = new Uri("http://www.contoso.com/index.htm?date=today");
-#pragma warning disable 0618
- // Determine the relative Uri.
- string uriStr1 = address1.MakeRelative(address4);
- string uriStr2 = address2.MakeRelative(address4);
- string uriStr3 = address3.MakeRelative(address4);
-#pragma warning restore 0618
-
- Assert.Equal(@"index.htm", uriStr1);
- Assert.Equal(@"http://www.contoso.com/index.htm?date=today", uriStr2);
- Assert.Equal(@"index.htm", uriStr3);
- }
-
- [Fact]
- public static void TestHexMethods()
- {
- char testChar = 'e';
- Assert.True(Uri.IsHexDigit(testChar));
- Assert.Equal(14, Uri.FromHex(testChar));
-
- string hexString = Uri.HexEscape(testChar);
- Assert.Equal("%65", hexString);
-
- int index = 0;
- Assert.True(Uri.IsHexEncoding(hexString, index));
- Assert.Equal(testChar, Uri.HexUnescape(hexString, ref index));
- }
-
- [Fact]
- public static void TestHexMethods_Invalid()
- {
- AssertExtensions.Throws("digit", () => Uri.FromHex('?'));
- Assert.Throws(() => Uri.HexEscape('\x100'));
- int index = -1;
- Assert.Throws(() => Uri.HexUnescape("%75", ref index));
- index = 0;
- Uri.HexUnescape("%75", ref index);
- Assert.Throws(() => Uri.HexUnescape("%75", ref index));
- }
- }
-}
diff --git a/src/libraries/System.Private.Uri/tests/FunctionalTests/System.Private.Uri.Functional.Tests.csproj b/src/libraries/System.Private.Uri/tests/FunctionalTests/System.Private.Uri.Functional.Tests.csproj
index 980804ded97c5c..0cf3b6a1f5a6cb 100644
--- a/src/libraries/System.Private.Uri/tests/FunctionalTests/System.Private.Uri.Functional.Tests.csproj
+++ b/src/libraries/System.Private.Uri/tests/FunctionalTests/System.Private.Uri.Functional.Tests.csproj
@@ -16,12 +16,15 @@
+
+
+
diff --git a/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Uri.CreateStringTests.cs b/src/libraries/System.Private.Uri/tests/FunctionalTests/UriCreateStringTests.cs
similarity index 99%
rename from src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Uri.CreateStringTests.cs
rename to src/libraries/System.Private.Uri/tests/FunctionalTests/UriCreateStringTests.cs
index 918df38dad2b5b..83e9e79a54a715 100644
--- a/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Uri.CreateStringTests.cs
+++ b/src/libraries/System.Private.Uri/tests/FunctionalTests/UriCreateStringTests.cs
@@ -6,7 +6,7 @@
using System.Text.RegularExpressions;
using Xunit;
-namespace System.Tests
+namespace System.PrivateUri.Tests
{
public class UriCreateStringTests
{
diff --git a/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Uri.CreateUriTests.cs b/src/libraries/System.Private.Uri/tests/FunctionalTests/UriCreateUriTests.cs
similarity index 99%
rename from src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Uri.CreateUriTests.cs
rename to src/libraries/System.Private.Uri/tests/FunctionalTests/UriCreateUriTests.cs
index 79ea08c9fccc65..9be572582d15d4 100644
--- a/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Uri.CreateUriTests.cs
+++ b/src/libraries/System.Private.Uri/tests/FunctionalTests/UriCreateUriTests.cs
@@ -4,7 +4,7 @@
using System.Collections.Generic;
using Xunit;
-namespace System.Tests
+namespace System.PrivateUri.Tests
{
public class UriCreateUriTests
{
diff --git a/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Uri.MethodsTests.cs b/src/libraries/System.Private.Uri/tests/FunctionalTests/UriMethodsTests.cs
similarity index 99%
rename from src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Uri.MethodsTests.cs
rename to src/libraries/System.Private.Uri/tests/FunctionalTests/UriMethodsTests.cs
index 7b42936a154ca2..b07938a84ebb73 100644
--- a/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Uri.MethodsTests.cs
+++ b/src/libraries/System.Private.Uri/tests/FunctionalTests/UriMethodsTests.cs
@@ -7,7 +7,7 @@
using System.Runtime.InteropServices;
using Xunit;
-namespace System.Tests
+namespace System.PrivateUri.Tests
{
public class UriMethodTests
{
diff --git a/src/libraries/System.Private.Uri/tests/FunctionalTests/UriTests.cs b/src/libraries/System.Private.Uri/tests/FunctionalTests/UriTests.cs
index c65ad82ba4564c..17add0951cf7ff 100644
--- a/src/libraries/System.Private.Uri/tests/FunctionalTests/UriTests.cs
+++ b/src/libraries/System.Private.Uri/tests/FunctionalTests/UriTests.cs
@@ -1022,5 +1022,186 @@ static void Test(string uriString)
Assert.Throws(() => uri.AbsoluteUri);
}
}
+
+ [InlineData(true)]
+ [InlineData(false)]
+ [Theory]
+ public static void TestCtor_String_Boolean(bool dontEscape)
+ {
+#pragma warning disable 0618
+#pragma warning disable 0612
+ Uri uri = new Uri(@"http://foo/bar/baz#frag", dontEscape);
+#pragma warning restore 0612
+#pragma warning restore 0618
+
+ Assert.Equal(@"http://foo/bar/baz#frag", uri.ToString());
+
+ Assert.Equal(@"/bar/baz", uri.AbsolutePath);
+
+ Assert.Equal(@"http://foo/bar/baz#frag", uri.AbsoluteUri);
+
+ Assert.Equal(@"foo", uri.Authority);
+
+ Assert.Equal(@"foo", uri.DnsSafeHost);
+
+ Assert.Equal(@"#frag", uri.Fragment);
+
+ Assert.Equal(@"foo", uri.Host);
+
+ Assert.Equal(UriHostNameType.Dns, uri.HostNameType);
+
+ Assert.True(uri.IsAbsoluteUri);
+
+ Assert.True(uri.IsDefaultPort);
+
+ Assert.False(uri.IsFile);
+
+ Assert.False(uri.IsLoopback);
+
+ Assert.False(uri.IsUnc);
+
+ Assert.Equal(@"/bar/baz", uri.LocalPath);
+
+ Assert.Equal(@"http://foo/bar/baz#frag", uri.OriginalString);
+
+ Assert.Equal(@"/bar/baz", uri.PathAndQuery);
+
+ Assert.Equal(80, uri.Port);
+
+ Assert.Equal(@"", uri.Query);
+
+ Assert.Equal(@"http", uri.Scheme);
+
+ string[] ss = uri.Segments;
+ Assert.Equal(3, ss.Length);
+ Assert.Equal(@"/", ss[0]);
+ Assert.Equal(@"bar/", ss[1]);
+ Assert.Equal(@"baz", ss[2]);
+
+ Assert.Equal(dontEscape, uri.UserEscaped);
+
+ Assert.Equal(@"", uri.UserInfo);
+ }
+
+ [InlineData(true)]
+ [InlineData(false)]
+ [Theory]
+ public static void TestCtor_Uri_String_Boolean(bool dontEscape)
+ {
+ Uri uri = new Uri(@"http://www.contoso.com/");
+#pragma warning disable 0618
+ uri = new Uri(uri, "catalog/shownew.htm?date=today", dontEscape);
+#pragma warning restore 0618
+
+ Assert.Equal(@"http://www.contoso.com/catalog/shownew.htm?date=today", uri.ToString());
+
+ Assert.Equal(@"/catalog/shownew.htm", uri.AbsolutePath);
+
+ Assert.Equal(@"http://www.contoso.com/catalog/shownew.htm?date=today", uri.AbsoluteUri);
+
+ Assert.Equal(@"www.contoso.com", uri.Authority);
+
+ Assert.Equal(@"www.contoso.com", uri.DnsSafeHost);
+
+ Assert.Equal(@"", uri.Fragment);
+
+ Assert.Equal(@"www.contoso.com", uri.Host);
+
+ Assert.Equal(UriHostNameType.Dns, uri.HostNameType);
+
+ Assert.True(uri.IsAbsoluteUri);
+
+ Assert.True(uri.IsDefaultPort);
+
+ Assert.False(uri.IsFile);
+
+ Assert.False(uri.IsLoopback);
+
+ Assert.False(uri.IsUnc);
+
+ Assert.Equal(@"/catalog/shownew.htm", uri.LocalPath);
+
+ Assert.Equal(@"http://www.contoso.com/catalog/shownew.htm?date=today", uri.OriginalString);
+
+ Assert.Equal(@"/catalog/shownew.htm?date=today", uri.PathAndQuery);
+
+ Assert.Equal(80, uri.Port);
+
+ Assert.Equal(@"?date=today", uri.Query);
+
+ Assert.Equal(@"http", uri.Scheme);
+
+ string[] ss = uri.Segments;
+ Assert.Equal(3, ss.Length);
+ Assert.Equal(@"/", ss[0]);
+ Assert.Equal(@"catalog/", ss[1]);
+ Assert.Equal(@"shownew.htm", ss[2]);
+
+ Assert.Equal(dontEscape, uri.UserEscaped);
+
+ Assert.Equal(@"", uri.UserInfo);
+ }
+
+ [Fact]
+ public static void TestMakeRelative_Invalid_Obsolete()
+ {
+ var baseUri = new Uri("http://www.domain.com/");
+ var relativeUri = new Uri("/path/", UriKind.Relative);
+#pragma warning disable 0618
+ AssertExtensions.Throws("toUri", () => baseUri.MakeRelative(null)); // Uri is null
+
+ Assert.Throws(() => relativeUri.MakeRelative(baseUri)); // Base uri is relative
+ Assert.Throws(() => baseUri.MakeRelative(relativeUri)); // Uri is relative
+#pragma warning restore 0618
+ }
+
+ [Fact]
+ public static void TestMakeRelative_Obsolete()
+ {
+ // Create a base Uri.
+ Uri address1 = new Uri("http://www.contoso.com/");
+ Uri address2 = new Uri("http://www.contoso.com:8000/");
+ Uri address3 = new Uri("http://username@www.contoso.com/");
+
+ // Create a new Uri from a string.
+ Uri address4 = new Uri("http://www.contoso.com/index.htm?date=today");
+#pragma warning disable 0618
+ // Determine the relative Uri.
+ string uriStr1 = address1.MakeRelative(address4);
+ string uriStr2 = address2.MakeRelative(address4);
+ string uriStr3 = address3.MakeRelative(address4);
+#pragma warning restore 0618
+
+ Assert.Equal(@"index.htm", uriStr1);
+ Assert.Equal(@"http://www.contoso.com/index.htm?date=today", uriStr2);
+ Assert.Equal(@"index.htm", uriStr3);
+ }
+
+ [Fact]
+ public static void TestHexMethods()
+ {
+ char testChar = 'e';
+ Assert.True(Uri.IsHexDigit(testChar));
+ Assert.Equal(14, Uri.FromHex(testChar));
+
+ string hexString = Uri.HexEscape(testChar);
+ Assert.Equal("%65", hexString);
+
+ int index = 0;
+ Assert.True(Uri.IsHexEncoding(hexString, index));
+ Assert.Equal(testChar, Uri.HexUnescape(hexString, ref index));
+ }
+
+ [Fact]
+ public static void TestHexMethods_Invalid()
+ {
+ AssertExtensions.Throws("digit", () => Uri.FromHex('?'));
+ Assert.Throws(() => Uri.HexEscape('\x100'));
+ int index = -1;
+ Assert.Throws(() => Uri.HexUnescape("%75", ref index));
+ index = 0;
+ Uri.HexUnescape("%75", ref index);
+ Assert.Throws(() => Uri.HexUnescape("%75", ref index));
+ }
}
}
diff --git a/src/libraries/System.Runtime/tests/System.Runtime.Tests/System.Runtime.Tests.csproj b/src/libraries/System.Runtime/tests/System.Runtime.Tests/System.Runtime.Tests.csproj
index 0b55a2c5f536e9..ce7a42a7f69699 100644
--- a/src/libraries/System.Runtime/tests/System.Runtime.Tests/System.Runtime.Tests.csproj
+++ b/src/libraries/System.Runtime/tests/System.Runtime.Tests/System.Runtime.Tests.csproj
@@ -184,9 +184,6 @@
-
-
-
From 92ed522b3076e95b252c17389e9f5556400483f4 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 29 Jan 2026 21:18:34 +0000
Subject: [PATCH 3/3] Remove Uri test references from NlsTests project
Co-authored-by: MihaZupan <25307628+MihaZupan@users.noreply.github.com>
---
.../NlsTests/System.Runtime.Nls.Tests.csproj | 6 ------
1 file changed, 6 deletions(-)
diff --git a/src/libraries/System.Runtime/tests/System.Runtime.Tests/NlsTests/System.Runtime.Nls.Tests.csproj b/src/libraries/System.Runtime/tests/System.Runtime.Tests/NlsTests/System.Runtime.Nls.Tests.csproj
index f7677ff891c204..a6f30d9a69f354 100644
--- a/src/libraries/System.Runtime/tests/System.Runtime.Tests/NlsTests/System.Runtime.Nls.Tests.csproj
+++ b/src/libraries/System.Runtime/tests/System.Runtime.Tests/NlsTests/System.Runtime.Nls.Tests.csproj
@@ -32,12 +32,6 @@
Link="System\Text\StringBuilderTests.cs" />
-
-
-