diff options
author | Pablo Ruiz Garcia <pablo.ruiz@gmail.com> | 2012-10-13 03:23:47 +0400 |
---|---|---|
committer | Pablo Ruiz Garcia <pablo.ruiz@gmail.com> | 2012-10-13 03:23:47 +0400 |
commit | fe994000959e3874651f6bf193d152b589ab35ba (patch) | |
tree | c4d7d0dbf9bfa24af315d27b6a61a070bca2e373 /mcs/class/WindowsBase | |
parent | 7427d7df268ac6d5a09dc7c24bbc3096a19ecc49 (diff) |
Fix implementation of System.IO.Packaging::GetRelativeUri(Uri,Uri) [fixes xamarin's bug #2727].
Diffstat (limited to 'mcs/class/WindowsBase')
3 files changed, 29 insertions, 4 deletions
diff --git a/mcs/class/WindowsBase/System.IO.Packaging/Check.cs b/mcs/class/WindowsBase/System.IO.Packaging/Check.cs index cf31ec08111..53fd8b7152e 100644 --- a/mcs/class/WindowsBase/System.IO.Packaging/Check.cs +++ b/mcs/class/WindowsBase/System.IO.Packaging/Check.cs @@ -135,6 +135,12 @@ namespace System.IO.Packaging { NotNull(sourcePartUri, "sourcePartUri"); } + + public static void TargetPartUri (Uri targetPartUri) + { + NotNull(targetPartUri, "targetPartUri"); + } + public static void SourceUri (Uri sourceUri) { if (sourceUri == null) diff --git a/mcs/class/WindowsBase/System.IO.Packaging/PackUriHelper.cs b/mcs/class/WindowsBase/System.IO.Packaging/PackUriHelper.cs index c3a558756c5..37b805a18a7 100644 --- a/mcs/class/WindowsBase/System.IO.Packaging/PackUriHelper.cs +++ b/mcs/class/WindowsBase/System.IO.Packaging/PackUriHelper.cs @@ -139,10 +139,14 @@ namespace System.IO.Packaging { public static Uri GetRelativeUri (Uri sourcePartUri, Uri targetPartUri) { - //Check.SourcePartUri (sourcePartUri); - //Check.TargetPartUri (targetPartUri); + Check.SourcePartUri (sourcePartUri); + Check.TargetPartUri (targetPartUri); + + Uri uri = new Uri ("http://fake.com"); + Uri a = new Uri (uri, sourcePartUri.AbsolutePath); + Uri b = new Uri (uri, targetPartUri.AbsolutePath); - return sourcePartUri; + return a.MakeRelativeUri(b); } public static Uri GetSourcePartUriFromRelationshipPartUri (Uri relationshipPartUri) diff --git a/mcs/class/WindowsBase/Test/System.IO.Packaging/PackUriHelperTests.cs b/mcs/class/WindowsBase/Test/System.IO.Packaging/PackUriHelperTests.cs index 22068313f86..04494fff118 100644 --- a/mcs/class/WindowsBase/Test/System.IO.Packaging/PackUriHelperTests.cs +++ b/mcs/class/WindowsBase/Test/System.IO.Packaging/PackUriHelperTests.cs @@ -230,6 +230,21 @@ namespace System.IO.Packaging.Tests { dest = new Uri ("/1/2/", UriKind.Relative);
Assert.AreEqual (new Uri ("", UriKind.Relative), PackUriHelper.GetRelativeUri (src, src), "#4");
+
+ // See: http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.getrelativeuri.aspx
+
+ src = new Uri("/mydoc/markup/page.xml", UriKind.Relative);
+ dest = new Uri("/mydoc/markup/picture.jpg", UriKind.Relative);
+ Assert.AreEqual (new Uri ("picture.jpg", UriKind.Relative), PackUriHelper.GetRelativeUri (src, dest), "#5");
+
+ src = new Uri("/mydoc/markup/page.xml", UriKind.Relative);
+ dest = new Uri("/mydoc/picture.jpg", UriKind.Relative);
+ Assert.AreEqual (new Uri ("../picture.jpg", UriKind.Relative), PackUriHelper.GetRelativeUri (src, dest), "#6");
+
+ src = new Uri("/mydoc/markup/page.xml", UriKind.Relative);
+ dest = new Uri("/mydoc/images/picture.jpg", UriKind.Relative);
+ Assert.AreEqual (new Uri ("../images/picture.jpg", UriKind.Relative), PackUriHelper.GetRelativeUri (src, dest), "#7");
+
}
[Test]
@@ -299,4 +314,4 @@ namespace System.IO.Packaging.Tests { Assert.AreEqual ("/word/document.xml", result.ToString(), "#2");
}
}
-}
\ No newline at end of file +}
|