@@ -821,12 +821,33 @@ public static IEnumerable<object[]> FilePathHandlesNonAscii_TestData()
821821 yield return new object [ ] { "file:///\u00FC ri/" , "file:///\u00FC ri/" , "/%C3%BCri/" , "file:///%C3%BCri/" , "/\u00FC ri/" } ;
822822 yield return new object [ ] { "file:///a/b\uD83D \uDE1F /Foo.cs" , "file:///a/b\uD83D \uDE1F /Foo.cs" , "/a/b%F0%9F%98%9F/Foo.cs" , "file:///a/b%F0%9F%98%9F/Foo.cs" , "/a/b\uD83D \uDE1F /Foo.cs" } ;
823823
824+ // DOS with ':' or ':/' instead of '://'
825+ yield return new object [ ] { "file:C:/uri/" , "file:///C:/uri/" , "C:/uri/" , "file:///C:/uri/" , "C:\\ uri\\ " } ;
826+ yield return new object [ ] { "file:C:/\u00FC ri/" , "file:///C:/\u00FC ri/" , "C:/%C3%BCri/" , "file:///C:/%C3%BCri/" , "C:\\ \u00FC ri\\ " } ;
827+ yield return new object [ ] { "file:/C:/uri/" , "file:///C:/uri/" , "C:/uri/" , "file:///C:/uri/" , "C:\\ uri\\ " } ;
828+ yield return new object [ ] { "file:/C:/\u00FC ri/" , "file:///C:/\u00FC ri/" , "C:/%C3%BCri/" , "file:///C:/%C3%BCri/" , "C:\\ \u00FC ri\\ " } ;
829+
824830 // DOS
831+ yield return new object [ ] { "file://C:/uri/" , "file:///C:/uri/" , "C:/uri/" , "file:///C:/uri/" , "C:\\ uri\\ " } ;
825832 yield return new object [ ] { "file://C:/\u00FC ri/" , "file:///C:/\u00FC ri/" , "C:/%C3%BCri/" , "file:///C:/%C3%BCri/" , "C:\\ \u00FC ri\\ " } ;
833+ yield return new object [ ] { "file:///C:/uri/" , "file:///C:/uri/" , "C:/uri/" , "file:///C:/uri/" , "C:\\ uri\\ " } ;
826834 yield return new object [ ] { "file:///C:/\u00FC ri/" , "file:///C:/\u00FC ri/" , "C:/%C3%BCri/" , "file:///C:/%C3%BCri/" , "C:\\ \u00FC ri\\ " } ;
827835 yield return new object [ ] { "C:/\u00FC ri/" , "file:///C:/\u00FC ri/" , "C:/%C3%BCri/" , "file:///C:/%C3%BCri/" , "C:\\ \u00FC ri\\ " } ;
828836 yield return new object [ ] { "\t C:/\u00FC ri/" , "file:///C:/\u00FC ri/" , "C:/%C3%BCri/" , "file:///C:/%C3%BCri/" , "C:\\ \u00FC ri\\ " } ;
829837
838+ // DOS in custom scheme (differs in whether ':' vs '://' is used since it doesn't have MustHaveAuthority)
839+ yield return new object [ ] { "custom:C:/uri/" , "custom:C:/uri/" , "C:/uri/" , "custom:C:/uri/" , "C:\\ uri\\ " } ;
840+ yield return new object [ ] { "custom:C:/\u00FC ri/" , "custom:C:/\u00FC ri/" , "C:/%C3%BCri/" , "custom:C:/%C3%BCri/" , "C:\\ \u00FC ri\\ " } ;
841+ yield return new object [ ] { "custom:/C:/uri/" , "custom:/C:/uri/" , "C:/uri/" , "custom:/C:/uri/" , "C:\\ uri\\ " } ;
842+ yield return new object [ ] { "custom:/C:/\u00FC ri/" , "custom:/C:/\u00FC ri/" , "C:/%C3%BCri/" , "custom:/C:/%C3%BCri/" , "C:\\ \u00FC ri\\ " } ;
843+ yield return new object [ ] { "custom://C:/uri/" , "custom:///C:/uri/" , "C:/uri/" , "custom:///C:/uri/" , "C:\\ uri\\ " } ;
844+ yield return new object [ ] { "custom://C:/\u00FC ri/" , "custom:///C:/\u00FC ri/" , "C:/%C3%BCri/" , "custom:///C:/%C3%BCri/" , "C:\\ \u00FC ri\\ " } ;
845+ yield return new object [ ] { "custom:///C:/uri/" , "custom:///C:/uri/" , "C:/uri/" , "custom:///C:/uri/" , "C:\\ uri\\ " } ;
846+ yield return new object [ ] { "custom:///C:/\u00FC ri/" , "custom:///C:/\u00FC ri/" , "C:/%C3%BCri/" , "custom:///C:/%C3%BCri/" , "C:\\ \u00FC ri\\ " } ;
847+
848+ yield return new object [ ] { "vsmacros://C:/\u00FC ri/" , "vsmacros://C:/\u00FC ri/" , "C:/%C3%BCri/" , "vsmacros://C:/%C3%BCri/" , "C:\\ \u00FC ri\\ " } ;
849+ yield return new object [ ] { "vsmacros://test/\u00FC ri/" , "vsmacros://test/\u00FC ri/" , "/%C3%BCri/" , "vsmacros://test/%C3%BCri/" , "\\ \\ test\\ \u00FC ri\\ " } ;
850+
830851 // UNC
831852 yield return new object [ ] { "\\ \\ \u00FC ri/" , "file://\u00FC ri/" , "/" , "file://\u00FC ri/" , "\\ \\ \u00FC ri\\ " } ;
832853 yield return new object [ ] { "file://\u00FC ri/" , "file://\u00FC ri/" , "/" , "file://\u00FC ri/" , "\\ \\ \u00FC ri\\ " } ;
0 commit comments