1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
//
// System.Xml.XmlUrlResolver.cs
//
// Authors:
// Atsushi Enomoto (ginga@kit.hi-ho.ne.jp)
//
// (C) 2003 Atsushi Enomoto
//
using System;
using System.IO;
using System.Xml;
using NUnit.Framework;
using System.Reflection;
using MonoTests.Helpers;
namespace MonoTests.System.Xml
{
[TestFixture]
public class XmlUrlResolverTests
{
XmlUrlResolver resolver;
[SetUp]
public void GetReady ()
{
resolver = new XmlUrlResolver ();
}
[Test]
public void FileUri ()
{
Uri resolved = resolver.ResolveUri (null, TestResourceHelper.GetFullPathOfResource ("Test/XmlFiles/xsd/xml.xsd"));
Assert.AreEqual ("file", resolved.Scheme);
Stream s = resolver.GetEntity (resolved, null, typeof (Stream)) as Stream;
}
[Test]
public void FileUri2 ()
{
Assert.AreEqual (resolver.ResolveUri (new Uri ("file://usr/local/src"), null).ToString (), "file://usr/local/src");
// MS.NET returns the Uri.ToString() as
// file://usr/local/src, but it is apparently
// incorrect in the context of Unix path.
Assert.AreEqual (resolver.ResolveUri (new Uri ("file:///usr/local/src"), null).ToString (), "file:///usr/local/src");
}
[Test]
public void HttpUri ()
{
Assert.AreEqual (resolver.ResolveUri (null, "http://test.xml").ToString (), "http://test.xml/");
}
[Test]
public void HttpUri2 ()
{
Assert.AreEqual (resolver.ResolveUri (new Uri ("http://go-mono.com"), null).ToString (), "http://go-mono.com/");
}
[Test]
[Category ("NotDotNet")] // It should throw ArgumentNullException.
[Ignore(".NET implementation does not throw ArgumentNullException.")]
[ExpectedException (typeof (ArgumentNullException))]
public void ResolveUriWithNullArgs ()
{
resolver.ResolveUri (null, null);
Assert.Fail ("Should be error (MS.NET throws ArgumentException here).");
}
// [Test] Uncomment if you want to test.
public void GetEntityWithNullArgs ()
{
Uri uri = new Uri ("http://www.go-mono.com/index.rss");
resolver.GetEntity (uri, null, null);
}
[Test]
[ExpectedException (typeof (InvalidOperationException))]
public void GetEntityWithRelativeFileUri ()
{
resolver.GetEntity (new Uri ("file.txt", UriKind.Relative), null, typeof (Stream));
}
[Test]
[ExpectedException (typeof (XmlException))]
public void GetEntityWithNonStreamReturnType ()
{
resolver.GetEntity (new Uri ("http://www.go-mono.com/"), null, typeof (File));
}
[Test] // bug #998
public void NullAbsoluteUriWithCustomSchemedRelativeUri ()
{
XmlResolver res = new XmlUrlResolver ();
var uri = res.ResolveUri (null, "view:Standard.xslt");
Assert.AreEqual ("view", uri.Scheme, "#1");
Assert.AreEqual ("Standard.xslt", uri.AbsolutePath, "#2");
Assert.AreEqual ("view:Standard.xslt", uri.AbsoluteUri, "#2");
}
[Test]
[Category ("StaticLinkedAotNotWorking")] // Can't find .dll files when bundled in .exe
public void TestAsync ()
{
var loc = Assembly.GetExecutingAssembly ().Location;
Uri resolved = resolver.ResolveUri (null, loc);
Assert.AreEqual ("file", resolved.Scheme);
var task = resolver.GetEntityAsync (resolved, null, typeof (Stream));
Assert.IsTrue (task.Wait (3000));
Assert.IsTrue (task.Result is Stream);
}
[Test]
public void TestAsyncError ()
{
var loc = Assembly.GetExecutingAssembly ().Location;
Uri resolved = resolver.ResolveUri (null, loc);
Assert.AreEqual ("file", resolved.Scheme);
var task = resolver.GetEntityAsync (resolved, null, typeof (File));
try {
task.Wait (3000);
Assert.Fail ("#1");
} catch (Exception ex) {
if (ex is AggregateException)
ex = ((AggregateException) ex).InnerException;
Assert.IsTrue (ex is XmlException);
}
}
}
}
|