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 CategoryAttribute = 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 T LoadTest<T> (string filename)
61 Type type = typeof (T);
62 var obj = XamlServices.Load (GetReader (filename));
63 Assert.AreEqual (type, obj.GetType (), "type");
68 public void Read_String ()
70 ReadTest ("String.xml");
71 var ret = LoadTest<string> ("String.xml");
72 Assert.AreEqual ("foo", ret, "ret");
76 public void Read_Int32 ()
78 ReadTest ("Int32.xml");
79 var ret = LoadTest<int> ("Int32.xml");
80 Assert.AreEqual (5, ret, "ret");
84 public void Read_DateTime ()
86 ReadTest ("DateTime.xml");
87 var ret = LoadTest<DateTime> ("DateTime.xml");
88 Assert.AreEqual (new DateTime (2010, 4, 14), ret, "ret");
92 public void Read_TimeSpan ()
94 ReadTest ("TimeSpan.xml");
95 var ret = LoadTest<TimeSpan> ("TimeSpan.xml");
96 Assert.AreEqual (TimeSpan.FromMinutes (7), ret, "ret");
100 public void Read_ArrayInt32 ()
102 ReadTest ("Array_Int32.xml");
103 //LoadTest<int[]> ("Array_Int32.xml");
107 public void Read_ListInt32 ()
109 ReadTest ("List_Int32.xml");
110 var ret = LoadTest<List<int>> ("List_Int32.xml");
111 Assert.AreEqual (5, ret.Count, "#1");
112 Assert.AreEqual (2147483647, ret [4], "#2");
116 [Category ("NotWorking")]
117 public void Read_DictionaryInt32String ()
119 ReadTest ("Dictionary_Int32_String.xml");
120 //LoadTest<Dictionary<int,string>> ("Dictionary_Int32_String.xml");
124 [Category ("NotWorking")]
125 public void Read_DictionaryStringType ()
127 ReadTest ("Dictionary_String_Type.xml");
128 //LoadTest<Dictionary<string,Type>> ("Dictionary_String_Type.xml");
132 public void Read_SilverlightApp1 ()
134 ReadTest ("SilverlightApp1.xaml");
140 var r = GetReader ("Int32.xml");
142 Assert.IsTrue (r.Read (), "ns#1");
143 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
144 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
146 Assert.IsTrue (r.Read (), "so#1");
147 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
148 Assert.AreEqual (XamlLanguage.Int32, r.Type, "so#3");
150 Assert.IsTrue (r.Read (), "sbase#1");
151 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
152 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
154 Assert.IsTrue (r.Read (), "vbase#1");
155 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
156 Assert.IsTrue (r.Value is string, "vbase#3");
158 Assert.IsTrue (r.Read (), "ebase#1");
159 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
161 Assert.IsTrue (r.Read (), "sinit#1");
162 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
163 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
165 Assert.IsTrue (r.Read (), "vinit#1");
166 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
167 Assert.AreEqual ("5", r.Value, "vinit#3"); // string
169 Assert.IsTrue (r.Read (), "einit#1");
170 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
172 Assert.IsTrue (r.Read (), "eo#1");
173 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
175 Assert.IsFalse (r.Read (), "end");
181 var r = GetReader ("DateTime.xml");
183 Assert.IsTrue (r.Read (), "ns#1");
184 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
185 Assert.AreEqual ("clr-namespace:System;assembly=mscorlib", r.Namespace.Namespace, "ns#3");
187 Assert.IsTrue (r.Read (), "so#1");
188 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
189 Assert.AreEqual (r.SchemaContext.GetXamlType (typeof (DateTime)), r.Type, "so#3");
191 Assert.IsTrue (r.Read (), "sbase#1");
192 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
193 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
195 Assert.IsTrue (r.Read (), "vbase#1");
196 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
197 Assert.IsTrue (r.Value is string, "vbase#3");
199 Assert.IsTrue (r.Read (), "ebase#21");
201 Assert.IsTrue (r.Read (), "sinit#1");
202 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
203 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
205 Assert.IsTrue (r.Read (), "vinit#1");
206 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
207 Assert.AreEqual ("2010-04-14", r.Value, "vinit#3"); // string
209 Assert.IsTrue (r.Read (), "einit#1");
210 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
212 Assert.IsTrue (r.Read (), "eo#1");
213 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
214 Assert.IsFalse (r.Read (), "end");
220 var r = GetReader ("Type.xml");
222 Assert.IsTrue (r.Read (), "ns#1");
223 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
224 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
226 Assert.IsTrue (r.Read (), "so#1");
227 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
228 Assert.AreEqual (XamlLanguage.Type, r.Type, "so#3");
230 Assert.IsTrue (r.Read (), "sbase#1");
231 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
232 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
234 Assert.IsTrue (r.Read (), "vbase#1");
235 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
236 Assert.IsTrue (r.Value is string, "vbase#3");
238 Assert.IsTrue (r.Read (), "ebase#1");
239 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
241 Assert.IsTrue (r.Read (), "sinit#1");
242 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
243 // FIXME: They are identical on .NET.
244 // They aren't on mono, every GetMember() returns different object
245 // (it is the same as .NET; see XamlMemberTest.EqualsTest.)
246 // and XamlMember is almost non-comparable unless they
247 // are identical, so we fail here.
248 Assert.AreEqual (XamlLanguage.Type.GetMember ("Type").ToString (), r.Member.ToString (), "sinit#3");
249 //Assert.AreEqual (XamlLanguage.Type.GetMember ("Type"), r.Member, "sinit#3-2");
250 //Assert.IsTrue (Object.ReferenceEquals (XamlLanguage.Type.GetMember ("Type"), r.Member), "sinit#3-3");
252 Assert.IsTrue (r.Read (), "vinit#1");
253 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
254 Assert.AreEqual ("x:Int32", r.Value, "vinit#3"); // string
256 Assert.IsTrue (r.Read (), "einit#1");
257 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
259 Assert.IsTrue (r.Read (), "eo#1");
260 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
262 Assert.IsFalse (r.Read (), "end");
266 //[Category ("NotWorking")]
269 var r = GetReader ("List_Int32.xml");
271 Assert.IsTrue (r.Read (), "ns#1");
272 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
273 Assert.AreEqual ("clr-namespace:System.Collections.Generic;assembly=mscorlib", r.Namespace.Namespace, "ns#3");
274 Assert.AreEqual (String.Empty, r.Namespace.Prefix, "ns#4");
276 Assert.IsTrue (r.Read (), "ns2#1");
277 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns2#2");
278 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns2#3");
279 Assert.AreEqual ("x", r.Namespace.Prefix, "ns2#4");
281 Assert.IsTrue (r.Read (), "so#1");
282 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
283 var xt = new XamlType (typeof (List<int>), r.SchemaContext);
284 Assert.AreEqual (xt, r.Type, "so#3");
286 Assert.IsTrue (r.Read (), "sbase#1");
287 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
288 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
290 Assert.IsTrue (r.Read (), "vbase#1");
291 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
292 Assert.IsTrue (r.Value is string, "vbase#3");
294 Assert.IsTrue (r.Read (), "ebase#1");
295 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
297 Assert.IsTrue (r.Read (), "scap#1");
298 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "scap#2");
299 Assert.AreEqual (xt.GetMember ("Capacity"), r.Member, "scap#3");
301 Assert.IsTrue (r.Read (), "vcap#1");
302 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vcap#2");
303 Assert.AreEqual ("5", r.Value, "vcap#3"); // string
305 Assert.IsTrue (r.Read (), "ecap#1");
306 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ecap#2");
308 Assert.IsTrue (r.Read (), "sItems#1");
309 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItems#2");
310 Assert.AreEqual (XamlLanguage.Items, r.Member, "sItems#3");
312 int [] values = {4, -5, 0, 255, int.MaxValue};
313 var ci = new CultureInfo ("en-US");
315 for (int i = 0; i < 5; i++) {
316 Assert.IsTrue (r.Read (), "soItem#1." + i);
317 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "soItem#2." + i);
318 Assert.AreEqual (XamlLanguage.Int32, r.Type, "soItem#3." + i);
320 Assert.IsTrue (r.Read (), "sItem#1." + i);
321 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItem#2." + i);
322 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sItem#3." + i);
324 Assert.IsTrue (r.Read (), "vItem#1." + i);
325 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vItem#2." + i);
326 Assert.AreEqual (values [i].ToString (ci), r.Value, "vItem#3." + i);
328 Assert.IsTrue (r.Read (), "eItem#1." + i);
329 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItem#2." + i);
331 Assert.IsTrue (r.Read (), "eoItem#1");
332 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eoItem#2");
335 Assert.IsTrue (r.Read (), "eItems#1");
336 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItems#2");
338 Assert.IsTrue (r.Read (), "eo#1");
339 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
341 Assert.IsFalse (r.Read (), "end");
347 var r = GetReader ("String.xml");
349 Assert.IsTrue (r.Read (), "ns#1");
350 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
351 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
353 Assert.IsTrue (r.Read (), "so#1");
354 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
355 Assert.AreEqual (XamlLanguage.String, r.Type, "so#3");
357 Assert.IsTrue (r.Read (), "sbase#1");
358 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
359 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
361 Assert.IsTrue (r.Read (), "vbase#1");
362 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
363 Assert.IsTrue (r.Value is string, "vbase#3");
365 Assert.IsTrue (r.Read (), "ebase#1");
366 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
368 Assert.IsTrue (r.Read (), "sinit#1");
369 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
370 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
372 Assert.IsTrue (r.Read (), "vinit#1");
373 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
374 Assert.AreEqual ("foo", r.Value, "vinit#3"); // string
376 Assert.IsTrue (r.Read (), "einit#1");
377 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
379 Assert.IsTrue (r.Read (), "eo#1");
380 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
382 Assert.IsFalse (r.Read (), "end");