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 //LoadTest<int[]> ("Array_Int32.xml");
122 public void Read_ListInt32 ()
124 ReadTest ("List_Int32.xml");
125 var ret = LoadTest<List<int>> ("List_Int32.xml");
126 Assert.AreEqual (5, ret.Count, "#1");
127 Assert.AreEqual (2147483647, ret [4], "#2");
131 [Category ("NotWorking")]
132 public void Read_DictionaryInt32String ()
134 ReadTest ("Dictionary_Int32_String.xml");
135 //LoadTest<Dictionary<int,string>> ("Dictionary_Int32_String.xml");
139 [Category ("NotWorking")]
140 public void Read_DictionaryStringType ()
142 ReadTest ("Dictionary_String_Type.xml");
143 //LoadTest<Dictionary<string,Type>> ("Dictionary_String_Type.xml");
147 public void Read_SilverlightApp1 ()
149 ReadTest ("SilverlightApp1.xaml");
153 public void ReadInt32Details ()
155 var r = GetReader ("Int32.xml");
157 Assert.IsTrue (r.Read (), "ns#1");
158 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
159 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
161 Assert.IsTrue (r.Read (), "so#1");
162 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
163 Assert.AreEqual (XamlLanguage.Int32, r.Type, "so#3");
165 Assert.IsTrue (r.Read (), "sbase#1");
166 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
167 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
169 Assert.IsTrue (r.Read (), "vbase#1");
170 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
171 Assert.IsTrue (r.Value is string, "vbase#3");
173 Assert.IsTrue (r.Read (), "ebase#1");
174 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
176 Assert.IsTrue (r.Read (), "sinit#1");
177 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
178 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
180 Assert.IsTrue (r.Read (), "vinit#1");
181 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
182 Assert.AreEqual ("5", r.Value, "vinit#3"); // string
184 Assert.IsTrue (r.Read (), "einit#1");
185 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
187 Assert.IsTrue (r.Read (), "eo#1");
188 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
190 Assert.IsFalse (r.Read (), "end");
194 public void ReadDateTimeDetails ()
196 var r = GetReader ("DateTime.xml");
198 Assert.IsTrue (r.Read (), "ns#1");
199 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
200 Assert.AreEqual ("clr-namespace:System;assembly=mscorlib", r.Namespace.Namespace, "ns#3");
202 Assert.IsTrue (r.Read (), "so#1");
203 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
204 Assert.AreEqual (r.SchemaContext.GetXamlType (typeof (DateTime)), r.Type, "so#3");
206 Assert.IsTrue (r.Read (), "sbase#1");
207 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
208 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
210 Assert.IsTrue (r.Read (), "vbase#1");
211 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
212 Assert.IsTrue (r.Value is string, "vbase#3");
214 Assert.IsTrue (r.Read (), "ebase#21");
216 Assert.IsTrue (r.Read (), "sinit#1");
217 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
218 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
220 Assert.IsTrue (r.Read (), "vinit#1");
221 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
222 Assert.AreEqual ("2010-04-14", r.Value, "vinit#3"); // string
224 Assert.IsTrue (r.Read (), "einit#1");
225 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
227 Assert.IsTrue (r.Read (), "eo#1");
228 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
229 Assert.IsFalse (r.Read (), "end");
233 public void ReadTypeDetails ()
235 var r = GetReader ("Type.xml");
237 Assert.IsTrue (r.Read (), "ns#1");
238 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
239 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
241 Assert.IsTrue (r.Read (), "so#1");
242 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
243 Assert.AreEqual (XamlLanguage.Type, r.Type, "so#3");
245 Assert.IsTrue (r.Read (), "sbase#1");
246 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
247 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
249 Assert.IsTrue (r.Read (), "vbase#1");
250 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
251 Assert.IsTrue (r.Value is string, "vbase#3");
253 Assert.IsTrue (r.Read (), "ebase#1");
254 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
256 Assert.IsTrue (r.Read (), "sinit#1");
257 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
258 // FIXME: They are identical on .NET.
259 // They aren't on mono, every GetMember() returns different object
260 // (it is the same as .NET; see XamlMemberTest.EqualsTest.)
261 // and XamlMember is almost non-comparable unless they
262 // are identical, so we fail here.
263 Assert.AreEqual (XamlLanguage.Type.GetMember ("Type").ToString (), r.Member.ToString (), "sinit#3");
264 //Assert.AreEqual (XamlLanguage.Type.GetMember ("Type"), r.Member, "sinit#3-2");
265 //Assert.IsTrue (Object.ReferenceEquals (XamlLanguage.Type.GetMember ("Type"), r.Member), "sinit#3-3");
267 Assert.IsTrue (r.Read (), "vinit#1");
268 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
269 Assert.AreEqual ("x:Int32", r.Value, "vinit#3"); // string
271 Assert.IsTrue (r.Read (), "einit#1");
272 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
274 Assert.IsTrue (r.Read (), "eo#1");
275 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
277 Assert.IsFalse (r.Read (), "end");
281 public void ReadListInt32Details ()
283 var r = GetReader ("List_Int32.xml");
285 Assert.IsTrue (r.Read (), "ns#1");
286 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
287 Assert.AreEqual ("clr-namespace:System.Collections.Generic;assembly=mscorlib", r.Namespace.Namespace, "ns#3");
288 Assert.AreEqual (String.Empty, r.Namespace.Prefix, "ns#4");
290 Assert.IsTrue (r.Read (), "ns2#1");
291 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns2#2");
292 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns2#3");
293 Assert.AreEqual ("x", r.Namespace.Prefix, "ns2#4");
295 Assert.IsTrue (r.Read (), "so#1");
296 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
297 var xt = new XamlType (typeof (List<int>), r.SchemaContext);
298 Assert.AreEqual (xt, r.Type, "so#3");
300 Assert.IsTrue (r.Read (), "sbase#1");
301 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
302 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
304 Assert.IsTrue (r.Read (), "vbase#1");
305 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
306 Assert.IsTrue (r.Value is string, "vbase#3");
308 Assert.IsTrue (r.Read (), "ebase#1");
309 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
311 Assert.IsTrue (r.Read (), "scap#1");
312 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "scap#2");
313 Assert.AreEqual (xt.GetMember ("Capacity"), r.Member, "scap#3");
315 Assert.IsTrue (r.Read (), "vcap#1");
316 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vcap#2");
317 Assert.AreEqual ("5", r.Value, "vcap#3"); // string
319 Assert.IsTrue (r.Read (), "ecap#1");
320 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ecap#2");
322 Assert.IsTrue (r.Read (), "sItems#1");
323 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItems#2");
324 Assert.AreEqual (XamlLanguage.Items, r.Member, "sItems#3");
326 int [] values = {4, -5, 0, 255, int.MaxValue};
327 var ci = new CultureInfo ("en-US");
329 for (int i = 0; i < 5; i++) {
330 Assert.IsTrue (r.Read (), "soItem#1." + i);
331 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "soItem#2." + i);
332 Assert.AreEqual (XamlLanguage.Int32, r.Type, "soItem#3." + i);
334 Assert.IsTrue (r.Read (), "sItem#1." + i);
335 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItem#2." + i);
336 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sItem#3." + i);
338 Assert.IsTrue (r.Read (), "vItem#1." + i);
339 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vItem#2." + i);
340 Assert.AreEqual (values [i].ToString (ci), r.Value, "vItem#3." + i);
342 Assert.IsTrue (r.Read (), "eItem#1." + i);
343 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItem#2." + i);
345 Assert.IsTrue (r.Read (), "eoItem#1");
346 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eoItem#2");
349 Assert.IsTrue (r.Read (), "eItems#1");
350 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItems#2");
352 Assert.IsTrue (r.Read (), "eo#1");
353 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
355 Assert.IsFalse (r.Read (), "end");
359 public void ReadStringDetails ()
361 var r = GetReader ("String.xml");
363 Assert.IsTrue (r.Read (), "ns#1");
364 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
365 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
367 Assert.IsTrue (r.Read (), "so#1");
368 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
369 Assert.AreEqual (XamlLanguage.String, r.Type, "so#3");
371 Assert.IsTrue (r.Read (), "sbase#1");
372 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
373 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
375 Assert.IsTrue (r.Read (), "vbase#1");
376 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
377 Assert.IsTrue (r.Value is string, "vbase#3");
379 Assert.IsTrue (r.Read (), "ebase#1");
380 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
382 Assert.IsTrue (r.Read (), "sinit#1");
383 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
384 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
386 Assert.IsTrue (r.Read (), "vinit#1");
387 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
388 Assert.AreEqual ("foo", r.Value, "vinit#3"); // string
390 Assert.IsTrue (r.Read (), "einit#1");
391 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
393 Assert.IsTrue (r.Read (), "eo#1");
394 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
396 Assert.IsFalse (r.Read (), "end");
400 public void ReadArrayInt32Details ()
402 var r = GetReader ("Array_Int32.xml");
404 Assert.IsTrue (r.Read (), "ns#1");
405 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
406 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
407 Assert.AreEqual ("x", r.Namespace.Prefix, "ns#4");
409 Assert.IsTrue (r.Read (), "soa#1");
410 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "soa#2");
411 var xt = new XamlType (typeof (ArrayExtension), r.SchemaContext);
412 Assert.AreEqual (xt, r.Type, "soa#3");
415 Assert.IsTrue (r.Read (), "sbase#1");
416 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
417 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
419 Assert.IsTrue (r.Read (), "vbase#1");
420 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
421 Assert.IsTrue (r.Value is string, "vbase#3");
423 Assert.IsTrue (r.Read (), "ebase#1");
424 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
427 Assert.IsTrue (r.Read (), "stype#1");
428 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "stype#2");
429 Assert.AreEqual (xt.GetMember ("Type"), r.Member, "stype#3");
432 Assert.IsTrue (r.Read (), "vtype#1");
433 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "type#2");
434 Assert.AreEqual ("x:Int32", r.Value, "vtype#3"); // string value
436 Assert.IsTrue (r.Read (), "etype#1");
437 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ecap#2");
440 Assert.IsTrue (r.Read (), "sItemsA#1");
441 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItemsA#2");
442 Assert.AreEqual (xt.GetMember ("Items"), r.Member, "sItemsA#3");
445 Assert.IsTrue (r.Read (), "go#1");
446 Assert.AreEqual (XamlNodeType.GetObject, r.NodeType, "go#2");
447 Assert.IsNull (r.Type, "go#3");
448 Assert.IsNull (r.Member, "go#4");
449 Assert.IsNull (r.Value, "go#5");
451 Assert.IsTrue (r.Read (), "sItems#1");
452 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItems#2");
453 Assert.AreEqual (XamlLanguage.Items, r.Member, "sItems#3");
455 int [] values = {4, -5, 0, 255, int.MaxValue};
456 var ci = new CultureInfo ("en-US");
458 for (int i = 0; i < 5; i++) {
459 Assert.IsTrue (r.Read (), "soItem#1." + i);
460 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "soItem#2." + i);
461 Assert.AreEqual (XamlLanguage.Int32, r.Type, "soItem#3." + i);
463 Assert.IsTrue (r.Read (), "sItem#1." + i);
464 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItem#2." + i);
465 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sItem#3." + i);
467 Assert.IsTrue (r.Read (), "vItem#1." + i);
468 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vItem#2." + i);
469 Assert.AreEqual (values [i].ToString (ci), r.Value, "vItem#3." + i);
471 Assert.IsTrue (r.Read (), "eItem#1." + i);
472 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItem#2." + i);
474 Assert.IsTrue (r.Read (), "eoItem#1");
475 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eoItem#2");
478 Assert.IsTrue (r.Read (), "eItems#1");
479 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItems#2");
482 Assert.IsTrue (r.Read (), "eog#1");
483 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
485 // end of ArrayExtension.Items
486 Assert.IsTrue (r.Read (), "eItemsA#1");
487 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItemsA#2");
489 // end of ArrayExtension
490 Assert.IsTrue (r.Read (), "eoa#1");
491 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eoa#2");
493 Assert.IsFalse (r.Read (), "end");
497 public void ReadNullDetails ()
499 var r = GetReader ("NullExtension.xml");
501 Assert.IsTrue (r.Read (), "ns#1");
502 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
503 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
504 Assert.AreEqual ("x", r.Namespace.Prefix, "ns#4");
506 Assert.IsTrue (r.Read (), "so#1");
507 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
508 var xt = new XamlType (typeof (NullExtension), r.SchemaContext);
509 Assert.AreEqual (xt, r.Type, "so#3");
512 Assert.IsTrue (r.Read (), "sbase#1");
513 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
514 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
516 Assert.IsTrue (r.Read (), "vbase#1");
517 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
518 Assert.IsTrue (r.Value is string, "vbase#3");
520 Assert.IsTrue (r.Read (), "ebase#1");
521 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
523 // end of NullExtension
524 Assert.IsTrue (r.Read (), "eo#1");
525 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
527 Assert.IsFalse (r.Read (), "end");
531 public void ReadReferenceDetails ()
533 var r = GetReader ("Reference.xml");
535 Assert.IsTrue (r.Read (), "ns#1");
536 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
537 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
538 Assert.AreEqual ("x", r.Namespace.Prefix, "ns#4");
540 Assert.IsTrue (r.Read (), "so#1");
541 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
542 var xt = new XamlType (typeof (Reference), r.SchemaContext);
543 Assert.AreEqual (xt, r.Type, "so#3");
546 Assert.IsTrue (r.Read (), "sbase#1");
547 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
548 Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
550 Assert.IsTrue (r.Read (), "vbase#1");
551 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
552 Assert.IsTrue (r.Value is string, "vbase#3");
554 Assert.IsTrue (r.Read (), "ebase#1");
555 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
558 Assert.IsTrue (r.Read (), "sinit#1");
559 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
560 Assert.AreEqual (xt.GetMember ("Name"), r.Member, "sinit#3");
562 Assert.IsTrue (r.Read (), "vinit#1");
563 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
564 Assert.AreEqual ("FooBar", r.Value, "vinit#3"); // string
566 Assert.IsTrue (r.Read (), "einit#1");
567 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
570 Assert.IsTrue (r.Read (), "eo#1");
571 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
573 Assert.IsFalse (r.Read (), "end");