2 // Copyright (C) 2010 Novell Inc. http://novell.com
4 // Permission is hereby granted, free of charge, to any person obtaining
5 // a copy of this software and associated documentation files (the
6 // "Software"), to deal in the Software without restriction, including
7 // without limitation the rights to use, copy, modify, merge, publish,
8 // distribute, sublicense, and/or sell copies of the Software, and to
9 // permit persons to whom the Software is furnished to do so, subject to
10 // the following conditions:
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 using System.Collections;
25 using System.Collections.Generic;
26 using System.ComponentModel;
27 using System.Globalization;
30 using System.Reflection;
31 using System.Windows.Markup;
33 using System.Xaml.Schema;
35 using NUnit.Framework;
37 using Category = NUnit.Framework.CategoryAttribute;
39 namespace MonoTests.System.Xaml
42 public class XamlXmlReaderTest
47 XamlReader GetReader (string filename)
49 return new XamlXmlReader (XmlReader.Create (Path.Combine ("Test/XmlFiles", filename), new XmlReaderSettings () { CloseInput =true }));
52 void ReadTest (string filename)
54 var r = GetReader (filename);
59 void LoadTest (string filename, Type type)
61 var obj = XamlServices.Load (GetReader (filename));
62 Assert.AreEqual (type, obj.GetType (), "type");
66 public void Read_String ()
68 ReadTest ("String.xml");
69 //LoadTest ("String.xml", typeof (string));
73 public void Read_Int32 ()
75 ReadTest ("Int32.xml");
76 //LoadTest ("Int32.xml", typeof (int));
80 public void Read_DateTime ()
82 ReadTest ("DateTime.xml");
83 //LoadTest ("DateTime.xml", typeof (DateTime));
87 public void Read_TimeSpan ()
89 ReadTest ("TimeSpan.xml");
90 //LoadTest ("TimeSpan.xml", typeof (TimeSpan));
94 public void Read_ArrayInt32 ()
96 ReadTest ("Array_Int32.xml");
97 //LoadTest ("Array_Int32.xml", typeof (int []));
101 public void Read_ListInt32 ()
103 ReadTest ("List_Int32.xml");
104 //LoadTest ("List_Int32.xml", typeof (List<int>));
108 [Category ("NotWorking")]
109 public void Read_DictionaryInt32String ()
111 ReadTest ("Dictionary_Int32_String.xml");
112 //LoadTest ("Dictionary_Int32_String.xml", typeof (Dictionary<int,string>));
116 [Category ("NotWorking")]
117 public void Read_DictionaryStringType ()
119 ReadTest ("Dictionary_String_Type.xml");
120 //LoadTest ("Dictionary_String_Type.xml", typeof (Dictionary<string,Type>));
126 var r = GetReader ("Int32.xml");
128 Assert.IsTrue (r.Read (), "ns#1");
129 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
130 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
132 Assert.IsTrue (r.Read (), "so#1");
133 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
134 Assert.AreEqual (XamlLanguage.Int32, r.Type, "so#3");
136 Assert.IsTrue (r.Read (), "sbase#1");
137 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
138 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
140 Assert.IsTrue (r.Read (), "vbase#1");
141 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
142 Assert.IsTrue (r.Value is string, "vbase#3");
144 Assert.IsTrue (r.Read (), "ebase#1");
145 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
147 Assert.IsTrue (r.Read (), "sinit#1");
148 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
149 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
151 Assert.IsTrue (r.Read (), "vinit#1");
152 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
153 Assert.AreEqual ("5", r.Value, "vinit#3"); // string
155 Assert.IsTrue (r.Read (), "einit#1");
156 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
158 Assert.IsTrue (r.Read (), "eo#1");
159 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
161 Assert.IsFalse (r.Read (), "end");
167 var r = GetReader ("DateTime.xml");
169 Assert.IsTrue (r.Read (), "ns#1");
170 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
171 Assert.AreEqual ("clr-namespace:System;assembly=mscorlib", r.Namespace.Namespace, "ns#3");
173 Assert.IsTrue (r.Read (), "so#1");
174 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
175 Assert.AreEqual (r.SchemaContext.GetXamlType (typeof (DateTime)), r.Type, "so#3");
177 Assert.IsTrue (r.Read (), "sbase#1");
178 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
179 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
181 Assert.IsTrue (r.Read (), "vbase#1");
182 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
183 Assert.IsTrue (r.Value is string, "vbase#3");
185 Assert.IsTrue (r.Read (), "ebase#21");
187 Assert.IsTrue (r.Read (), "sinit#1");
188 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
189 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
191 Assert.IsTrue (r.Read (), "vinit#1");
192 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
193 Assert.AreEqual ("2010-04-14", r.Value, "vinit#3"); // string
195 Assert.IsTrue (r.Read (), "einit#1");
196 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
198 Assert.IsTrue (r.Read (), "eo#1");
199 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
200 Assert.IsFalse (r.Read (), "end");
206 var r = GetReader ("Type.xml");
208 Assert.IsTrue (r.Read (), "ns#1");
209 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
210 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
212 Assert.IsTrue (r.Read (), "so#1");
213 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
214 Assert.AreEqual (XamlLanguage.Type, r.Type, "so#3");
216 Assert.IsTrue (r.Read (), "sbase#1");
217 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
218 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
220 Assert.IsTrue (r.Read (), "vbase#1");
221 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
222 Assert.IsTrue (r.Value is string, "vbase#3");
224 Assert.IsTrue (r.Read (), "ebase#1");
225 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
227 Assert.IsTrue (r.Read (), "sinit#1");
228 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
229 // FIXME: They are identical on .NET.
230 // They aren't on mono, every GetMember() returns different object
231 // (it is the same as .NET; see XamlMemberTest.EqualsTest.)
232 // and XamlMember is almost non-comparable unless they
233 // are identical, so we fail here.
234 Assert.AreEqual (XamlLanguage.Type.GetMember ("Type").ToString (), r.Member.ToString (), "sinit#3");
235 //Assert.AreEqual (XamlLanguage.Type.GetMember ("Type"), r.Member, "sinit#3-2");
236 //Assert.IsTrue (Object.ReferenceEquals (XamlLanguage.Type.GetMember ("Type"), r.Member), "sinit#3-3");
238 Assert.IsTrue (r.Read (), "vinit#1");
239 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
240 Assert.AreEqual ("x:Int32", r.Value, "vinit#3"); // string
242 Assert.IsTrue (r.Read (), "einit#1");
243 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
245 Assert.IsTrue (r.Read (), "eo#1");
246 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
248 Assert.IsFalse (r.Read (), "end");
252 [Category ("NotWorking")]
255 var r = GetReader ("List_Int32.xml");
257 Assert.IsTrue (r.Read (), "ns#1");
258 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
259 Assert.AreEqual ("clr-namespace:System.Collections.Generic;assembly=mscorlib", r.Namespace.Namespace, "ns#3");
260 Assert.AreEqual (String.Empty, r.Namespace.Prefix, "ns#4");
262 Assert.IsTrue (r.Read (), "ns2#1");
263 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns2#2");
264 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns2#3");
265 Assert.AreEqual ("x", r.Namespace.Prefix, "ns2#4");
267 Assert.IsTrue (r.Read (), "so#1");
268 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
269 var xt = new XamlType (typeof (List<int>), r.SchemaContext);
270 Assert.AreEqual (xt, r.Type, "so#3");
272 Assert.IsTrue (r.Read (), "sbase#1");
273 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
274 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
276 Assert.IsTrue (r.Read (), "vbase#1");
277 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
278 Assert.IsTrue (r.Value is string, "vbase#3");
280 Assert.IsTrue (r.Read (), "ebase#1");
281 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
283 Assert.IsTrue (r.Read (), "scap#1");
284 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "scap#2");
285 Assert.AreEqual (xt.GetMember ("Capacity"), r.Member, "scap#3");
287 Assert.IsTrue (r.Read (), "vcap#1");
288 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vcap#2");
289 Assert.AreEqual ("5", r.Value, "vcap#3"); // string
291 Assert.IsTrue (r.Read (), "ecap#1");
292 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ecap#2");
294 Assert.IsTrue (r.Read (), "sItems#1");
295 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItems#2");
296 Assert.AreEqual (XamlLanguage.Items, r.Member, "sItems#3");
298 int [] values = {4, -5, 0, 255, int.MaxValue};
299 var ci = new CultureInfo ("en-US");
301 for (int i = 0; i < 5; i++) {
302 Assert.IsTrue (r.Read (), "soItem#1." + i);
303 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "soItem#2." + i);
304 Assert.AreEqual (XamlLanguage.Int32, r.Type, "soItem#3." + i);
306 Assert.IsTrue (r.Read (), "sItem#1." + i);
307 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItem#2." + i);
308 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sItem#3." + i);
310 Assert.IsTrue (r.Read (), "vItem#1." + i);
311 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vItem#2." + i);
312 Assert.AreEqual (values [i].ToString (ci), r.Value, "vItem#3." + i);
314 Assert.IsTrue (r.Read (), "eItem#1." + i);
315 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItem#2." + i);
317 Assert.IsTrue (r.Read (), "eoItem#1");
318 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eoItem#2");
321 Assert.IsTrue (r.Read (), "eItems#1");
322 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItems#2");
324 Assert.IsTrue (r.Read (), "eo#1");
325 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
327 Assert.IsFalse (r.Read (), "end");