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_Null ()
102 ReadTest ("NullExtension.xml");
103 Assert.IsNull (XamlServices.Load (GetReader ("NullExtension.xml")));
107 public void Read_Reference ()
109 ReadTest ("Reference.xml");
110 var ret = XamlServices.Load (GetReader ("Reference.xml"));
111 Assert.IsNotNull (ret, "#1"); // the returned value is however not a Reference (in .NET 4.0 it is MS.Internal.Xaml.Context.NameFixupToken).
115 public void Read_ArrayInt32 ()
117 ReadTest ("Array_Int32.xml");
118 var ret = LoadTest<int[]> ("Array_Int32.xml");
119 Assert.AreEqual (5, ret.Length, "#1");
120 Assert.AreEqual (2147483647, ret [4], "#2");
124 public void Read_ListInt32 ()
126 ReadTest ("List_Int32.xml");
127 var ret = LoadTest<List<int>> ("List_Int32.xml");
128 Assert.AreEqual (5, ret.Count, "#1");
129 Assert.AreEqual (2147483647, ret [4], "#2");
133 [Category ("NotWorking")]
134 public void Read_DictionaryInt32String ()
136 ReadTest ("Dictionary_Int32_String.xml");
137 //LoadTest<Dictionary<int,string>> ("Dictionary_Int32_String.xml");
141 [Category ("NotWorking")]
142 public void Read_DictionaryStringType ()
144 ReadTest ("Dictionary_String_Type.xml");
145 //LoadTest<Dictionary<string,Type>> ("Dictionary_String_Type.xml");
149 public void Read_SilverlightApp1 ()
151 ReadTest ("SilverlightApp1.xaml");
155 public void Read_Guid ()
157 ReadTest ("Guid.xml");
158 var ret = LoadTest<Guid> ("Guid.xml");
159 Assert.AreEqual (Guid.Parse ("9c3345ec-8922-4662-8e8d-a4e41f47cf09"), ret, "ret");
163 public void Read_GuidFactoryMethod ()
165 ReadTest ("GuidFactoryMethod.xml");
166 var ret = LoadTest<Guid> ("GuidFactoryMethod.xml");
167 Assert.AreEqual (Guid.Parse ("9c3345ec-8922-4662-8e8d-a4e41f47cf09"), ret, "ret");
171 public void ReadInt32Details ()
173 var r = GetReader ("Int32.xml");
175 Assert.IsTrue (r.Read (), "ns#1");
176 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
177 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
179 Assert.IsTrue (r.Read (), "so#1");
180 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
181 Assert.AreEqual (XamlLanguage.Int32, r.Type, "so#3");
183 Assert.IsTrue (r.Read (), "sbase#1");
184 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
185 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
187 Assert.IsTrue (r.Read (), "vbase#1");
188 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
189 Assert.IsTrue (r.Value is string, "vbase#3");
191 Assert.IsTrue (r.Read (), "ebase#1");
192 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
194 Assert.IsTrue (r.Read (), "sinit#1");
195 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
196 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
198 Assert.IsTrue (r.Read (), "vinit#1");
199 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
200 Assert.AreEqual ("5", r.Value, "vinit#3"); // string
202 Assert.IsTrue (r.Read (), "einit#1");
203 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
205 Assert.IsTrue (r.Read (), "eo#1");
206 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
208 Assert.IsFalse (r.Read (), "end");
212 public void ReadDateTimeDetails ()
214 var r = GetReader ("DateTime.xml");
216 Assert.IsTrue (r.Read (), "ns#1");
217 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
218 Assert.AreEqual ("clr-namespace:System;assembly=mscorlib", r.Namespace.Namespace, "ns#3");
220 Assert.IsTrue (r.Read (), "so#1");
221 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
222 Assert.AreEqual (r.SchemaContext.GetXamlType (typeof (DateTime)), r.Type, "so#3");
224 Assert.IsTrue (r.Read (), "sbase#1");
225 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
226 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
228 Assert.IsTrue (r.Read (), "vbase#1");
229 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
230 Assert.IsTrue (r.Value is string, "vbase#3");
232 Assert.IsTrue (r.Read (), "ebase#21");
234 Assert.IsTrue (r.Read (), "sinit#1");
235 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
236 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
238 Assert.IsTrue (r.Read (), "vinit#1");
239 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
240 Assert.AreEqual ("2010-04-14", 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");
247 Assert.IsFalse (r.Read (), "end");
251 public void ReadTypeDetails ()
253 var r = GetReader ("Type.xml");
255 Assert.IsTrue (r.Read (), "ns#1");
256 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
257 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
259 Assert.IsTrue (r.Read (), "so#1");
260 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
261 Assert.AreEqual (XamlLanguage.Type, r.Type, "so#3");
263 Assert.IsTrue (r.Read (), "sbase#1");
264 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
265 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
267 Assert.IsTrue (r.Read (), "vbase#1");
268 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
269 Assert.IsTrue (r.Value is string, "vbase#3");
271 Assert.IsTrue (r.Read (), "ebase#1");
272 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
274 Assert.IsTrue (r.Read (), "sinit#1");
275 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
276 // FIXME: They are identical on .NET.
277 // They aren't on mono, every GetMember() returns different object
278 // (it is the same as .NET; see XamlMemberTest.EqualsTest.)
279 // and XamlMember is almost non-comparable unless they
280 // are identical, so we fail here.
281 Assert.AreEqual (XamlLanguage.Type.GetMember ("Type").ToString (), r.Member.ToString (), "sinit#3");
282 //Assert.AreEqual (XamlLanguage.Type.GetMember ("Type"), r.Member, "sinit#3-2");
283 //Assert.IsTrue (Object.ReferenceEquals (XamlLanguage.Type.GetMember ("Type"), r.Member), "sinit#3-3");
285 Assert.IsTrue (r.Read (), "vinit#1");
286 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
287 Assert.AreEqual ("x:Int32", r.Value, "vinit#3"); // string
289 Assert.IsTrue (r.Read (), "einit#1");
290 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
292 Assert.IsTrue (r.Read (), "eo#1");
293 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
295 Assert.IsFalse (r.Read (), "end");
299 public void ReadListInt32Details ()
301 var r = GetReader ("List_Int32.xml");
303 Assert.IsTrue (r.Read (), "ns#1");
304 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
305 Assert.AreEqual ("clr-namespace:System.Collections.Generic;assembly=mscorlib", r.Namespace.Namespace, "ns#3");
306 Assert.AreEqual (String.Empty, r.Namespace.Prefix, "ns#4");
308 Assert.IsTrue (r.Read (), "ns2#1");
309 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns2#2");
310 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns2#3");
311 Assert.AreEqual ("x", r.Namespace.Prefix, "ns2#4");
313 Assert.IsTrue (r.Read (), "so#1");
314 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
315 var xt = new XamlType (typeof (List<int>), r.SchemaContext);
316 Assert.AreEqual (xt, r.Type, "so#3");
318 Assert.IsTrue (r.Read (), "sbase#1");
319 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
320 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
322 Assert.IsTrue (r.Read (), "vbase#1");
323 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
324 Assert.IsTrue (r.Value is string, "vbase#3");
326 Assert.IsTrue (r.Read (), "ebase#1");
327 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
329 Assert.IsTrue (r.Read (), "scap#1");
330 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "scap#2");
331 Assert.AreEqual (xt.GetMember ("Capacity"), r.Member, "scap#3");
333 Assert.IsTrue (r.Read (), "vcap#1");
334 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vcap#2");
335 Assert.AreEqual ("5", r.Value, "vcap#3"); // string
337 Assert.IsTrue (r.Read (), "ecap#1");
338 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ecap#2");
340 Assert.IsTrue (r.Read (), "sItems#1");
341 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItems#2");
342 Assert.AreEqual (XamlLanguage.Items, r.Member, "sItems#3");
344 int [] values = {4, -5, 0, 255, int.MaxValue};
345 var ci = new CultureInfo ("en-US");
347 for (int i = 0; i < 5; i++) {
348 Assert.IsTrue (r.Read (), "soItem#1." + i);
349 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "soItem#2." + i);
350 Assert.AreEqual (XamlLanguage.Int32, r.Type, "soItem#3." + i);
352 Assert.IsTrue (r.Read (), "sItem#1." + i);
353 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItem#2." + i);
354 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sItem#3." + i);
356 Assert.IsTrue (r.Read (), "vItem#1." + i);
357 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vItem#2." + i);
358 Assert.AreEqual (values [i].ToString (ci), r.Value, "vItem#3." + i);
360 Assert.IsTrue (r.Read (), "eItem#1." + i);
361 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItem#2." + i);
363 Assert.IsTrue (r.Read (), "eoItem#1");
364 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eoItem#2");
367 Assert.IsTrue (r.Read (), "eItems#1");
368 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItems#2");
370 Assert.IsTrue (r.Read (), "eo#1");
371 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
373 Assert.IsFalse (r.Read (), "end");
377 public void ReadStringDetails ()
379 var r = GetReader ("String.xml");
381 Assert.IsTrue (r.Read (), "ns#1");
382 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
383 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
385 Assert.IsTrue (r.Read (), "so#1");
386 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
387 Assert.AreEqual (XamlLanguage.String, r.Type, "so#3");
389 Assert.IsTrue (r.Read (), "sbase#1");
390 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
391 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
393 Assert.IsTrue (r.Read (), "vbase#1");
394 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
395 Assert.IsTrue (r.Value is string, "vbase#3");
397 Assert.IsTrue (r.Read (), "ebase#1");
398 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
400 Assert.IsTrue (r.Read (), "sinit#1");
401 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
402 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
404 Assert.IsTrue (r.Read (), "vinit#1");
405 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
406 Assert.AreEqual ("foo", r.Value, "vinit#3"); // string
408 Assert.IsTrue (r.Read (), "einit#1");
409 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
411 Assert.IsTrue (r.Read (), "eo#1");
412 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
414 Assert.IsFalse (r.Read (), "end");
418 public void ReadArrayInt32Details ()
420 var r = GetReader ("Array_Int32.xml");
422 Assert.IsTrue (r.Read (), "ns#1");
423 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
424 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
425 Assert.AreEqual ("x", r.Namespace.Prefix, "ns#4");
427 Assert.IsTrue (r.Read (), "soa#1");
428 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "soa#2");
429 var xt = new XamlType (typeof (ArrayExtension), r.SchemaContext);
430 Assert.AreEqual (xt, r.Type, "soa#3");
433 Assert.IsTrue (r.Read (), "sbase#1");
434 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
435 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
437 Assert.IsTrue (r.Read (), "vbase#1");
438 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
439 Assert.IsTrue (r.Value is string, "vbase#3");
441 Assert.IsTrue (r.Read (), "ebase#1");
442 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
445 Assert.IsTrue (r.Read (), "stype#1");
446 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "stype#2");
447 Assert.AreEqual (xt.GetMember ("Type"), r.Member, "stype#3");
450 Assert.IsTrue (r.Read (), "vtype#1");
451 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "type#2");
452 Assert.AreEqual ("x:Int32", r.Value, "vtype#3"); // string value
454 Assert.IsTrue (r.Read (), "etype#1");
455 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ecap#2");
458 Assert.IsTrue (r.Read (), "sItemsA#1");
459 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItemsA#2");
460 Assert.AreEqual (xt.GetMember ("Items"), r.Member, "sItemsA#3");
463 Assert.IsTrue (r.Read (), "go#1");
464 Assert.AreEqual (XamlNodeType.GetObject, r.NodeType, "go#2");
465 Assert.IsNull (r.Type, "go#3");
466 Assert.IsNull (r.Member, "go#4");
467 Assert.IsNull (r.Value, "go#5");
469 Assert.IsTrue (r.Read (), "sItems#1");
470 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItems#2");
471 Assert.AreEqual (XamlLanguage.Items, r.Member, "sItems#3");
473 int [] values = {4, -5, 0, 255, int.MaxValue};
474 var ci = new CultureInfo ("en-US");
476 for (int i = 0; i < 5; i++) {
477 Assert.IsTrue (r.Read (), "soItem#1." + i);
478 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "soItem#2." + i);
479 Assert.AreEqual (XamlLanguage.Int32, r.Type, "soItem#3." + i);
481 Assert.IsTrue (r.Read (), "sItem#1." + i);
482 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItem#2." + i);
483 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sItem#3." + i);
485 Assert.IsTrue (r.Read (), "vItem#1." + i);
486 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vItem#2." + i);
487 Assert.AreEqual (values [i].ToString (ci), r.Value, "vItem#3." + i);
489 Assert.IsTrue (r.Read (), "eItem#1." + i);
490 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItem#2." + i);
492 Assert.IsTrue (r.Read (), "eoItem#1");
493 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eoItem#2");
496 Assert.IsTrue (r.Read (), "eItems#1");
497 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItems#2");
500 Assert.IsTrue (r.Read (), "eog#1");
501 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
503 // end of ArrayExtension.Items
504 Assert.IsTrue (r.Read (), "eItemsA#1");
505 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItemsA#2");
507 // end of ArrayExtension
508 Assert.IsTrue (r.Read (), "eoa#1");
509 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eoa#2");
511 Assert.IsFalse (r.Read (), "end");
515 public void ReadNullDetails ()
517 var r = GetReader ("NullExtension.xml");
519 Assert.IsTrue (r.Read (), "ns#1");
520 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
521 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
522 Assert.AreEqual ("x", r.Namespace.Prefix, "ns#4");
524 Assert.IsTrue (r.Read (), "so#1");
525 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
526 var xt = new XamlType (typeof (NullExtension), r.SchemaContext);
527 Assert.AreEqual (xt, r.Type, "so#3");
530 Assert.IsTrue (r.Read (), "sbase#1");
531 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
532 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
534 Assert.IsTrue (r.Read (), "vbase#1");
535 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
536 Assert.IsTrue (r.Value is string, "vbase#3");
538 Assert.IsTrue (r.Read (), "ebase#1");
539 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
541 // end of NullExtension
542 Assert.IsTrue (r.Read (), "eo#1");
543 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
545 Assert.IsFalse (r.Read (), "end");
549 public void ReadReferenceDetails ()
551 var r = GetReader ("Reference.xml");
553 Assert.IsTrue (r.Read (), "ns#1");
554 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
555 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
556 Assert.AreEqual ("x", r.Namespace.Prefix, "ns#4");
558 Assert.IsTrue (r.Read (), "so#1");
559 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
560 var xt = new XamlType (typeof (Reference), r.SchemaContext);
561 Assert.AreEqual (xt, r.Type, "so#3");
564 Assert.IsTrue (r.Read (), "sbase#1");
565 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
566 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
568 Assert.IsTrue (r.Read (), "vbase#1");
569 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
570 Assert.IsTrue (r.Value is string, "vbase#3");
572 Assert.IsTrue (r.Read (), "ebase#1");
573 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
576 Assert.IsTrue (r.Read (), "sinit#1");
577 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
578 Assert.AreEqual (xt.GetMember ("Name"), r.Member, "sinit#3");
580 Assert.IsTrue (r.Read (), "vinit#1");
581 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
582 Assert.AreEqual ("FooBar", r.Value, "vinit#3"); // string
584 Assert.IsTrue (r.Read (), "einit#1");
585 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
588 Assert.IsTrue (r.Read (), "eo#1");
589 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
591 Assert.IsFalse (r.Read (), "end");
595 public void ReadGuidFactoryMethodDetails ()
597 var r = GetReader ("GuidFactoryMethod.xml");
599 Assert.IsTrue (r.Read (), "ns#1");
600 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
601 Assert.AreEqual ("clr-namespace:System;assembly=mscorlib", r.Namespace.Namespace, "ns#3");
602 Assert.AreEqual (String.Empty, r.Namespace.Prefix, "ns#4");
604 Assert.IsTrue (r.Read (), "ns2#1");
605 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns2#2");
606 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns2#3");
607 Assert.AreEqual ("x", r.Namespace.Prefix, "ns2#4");
609 Assert.IsTrue (r.Read (), "so#1");
610 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
611 var xt = r.SchemaContext.GetXamlType (typeof (Guid));
612 Assert.AreEqual (xt, r.Type, "so#3");
614 Assert.IsTrue (r.Read (), "sbase#1");
615 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
616 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
618 Assert.IsTrue (r.Read (), "vbase#1");
619 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
620 Assert.IsTrue (r.Value is string, "vbase#3");
622 Assert.IsTrue (r.Read (), "ebase#1");
623 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
625 Assert.IsTrue (r.Read (), "sfactory#1");
626 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sfactory#2");
627 Assert.AreEqual (XamlLanguage.FactoryMethod, r.Member, "sfactory#3");
629 Assert.IsTrue (r.Read (), "vfactory#1");
630 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vfactory#2");
631 Assert.AreEqual ("Parse", r.Value, "vfactory#3"); // string
633 Assert.IsTrue (r.Read (), "efactory#1");
634 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "efactory#2");
636 Assert.IsTrue (r.Read (), "sarg#1");
637 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sarg#2");
638 Assert.AreEqual (XamlLanguage.Arguments, r.Member, "sarg#3");
640 Assert.IsTrue (r.Read (), "sarg1#1");
641 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "sarg1#2");
642 Assert.AreEqual (XamlLanguage.String, r.Type, "sarg1#3");
644 Assert.IsTrue (r.Read (), "sInit#1");
645 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sInit#2");
646 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sInit#3");
648 Assert.IsTrue (r.Read (), "varg1#1");
649 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "varg1#2");
650 Assert.AreEqual ("9c3345ec-8922-4662-8e8d-a4e41f47cf09", r.Value, "varg1#3");
652 Assert.IsTrue (r.Read (), "eInit#1");
653 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eInit#2");
655 Assert.IsTrue (r.Read (), "earg1#1");
656 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "earg1#2");
658 Assert.IsTrue (r.Read (), "earg#1");
659 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "earg#2");
662 Assert.IsTrue (r.Read (), "eo#1");
663 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
665 Assert.IsFalse (r.Read (), "end");