Making XamlObjectReader tests for common basis to XamlXmlReader.
[mono.git] / mcs / class / System.Xaml / Test / System.Xaml / XamlXmlReaderTest.cs
1 //
2 // Copyright (C) 2010 Novell Inc. http://novell.com
3 //
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:
11 // 
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
14 // 
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.
22 //
23 using System;
24 using System.Collections;
25 using System.Collections.Generic;
26 using System.ComponentModel;
27 using System.Globalization;
28 using System.IO;
29 using System.Linq;
30 using System.Reflection;
31 using System.Windows.Markup;
32 using System.Xaml;
33 using System.Xaml.Schema;
34 using System.Xml;
35 using NUnit.Framework;
36
37 using CategoryAttribute = NUnit.Framework.CategoryAttribute;
38
39 namespace MonoTests.System.Xaml
40 {
41         [TestFixture]
42         public class XamlXmlReaderTest : XamlReaderTestBase
43         {
44                 // read test
45
46                 XamlReader GetReader (string filename)
47                 {
48                         return new XamlXmlReader (XmlReader.Create (Path.Combine ("Test/XmlFiles", filename), new XmlReaderSettings () { CloseInput =true }));
49                 }
50
51                 void ReadTest (string filename)
52                 {
53                         var r = GetReader (filename);
54                         while (!r.IsEof)
55                                 r.Read ();
56                 }
57
58                 T LoadTest<T> (string filename)
59                 {
60                         Type type = typeof (T);
61                         var obj = XamlServices.Load (GetReader (filename));
62                         Assert.AreEqual (type, obj.GetType (), "type");
63                         return (T) obj;
64                 }
65
66                 [Test]
67                 public void Read_String ()
68                 {
69                         ReadTest ("String.xml");
70                         var ret = LoadTest<string> ("String.xml");
71                         Assert.AreEqual ("foo", ret, "ret");
72                 }
73
74                 [Test]
75                 public void Read_Int32 ()
76                 {
77                         ReadTest ("Int32.xml");
78                         var ret = LoadTest<int> ("Int32.xml");
79                         Assert.AreEqual (5, ret, "ret");
80                 }
81
82                 [Test]
83                 public void Read_DateTime ()
84                 {
85                         ReadTest ("DateTime.xml");
86                         var ret = LoadTest<DateTime> ("DateTime.xml");
87                         Assert.AreEqual (new DateTime (2010, 4, 14), ret, "ret");
88                 }
89
90                 [Test]
91                 public void Read_TimeSpan ()
92                 {
93                         ReadTest ("TimeSpan.xml");
94                         var ret = LoadTest<TimeSpan> ("TimeSpan.xml");
95                         Assert.AreEqual (TimeSpan.FromMinutes (7), ret, "ret");
96                 }
97
98                 [Test]
99                 public void Read_Null ()
100                 {
101                         ReadTest ("NullExtension.xml");
102                         Assert.IsNull (XamlServices.Load (GetReader ("NullExtension.xml")));
103                 }
104
105                 [Test]
106                 public void Read_Reference ()
107                 {
108                         ReadTest ("Reference.xml");
109                         var ret = XamlServices.Load (GetReader ("Reference.xml"));
110                         Assert.IsNotNull (ret, "#1"); // the returned value is however not a Reference (in .NET 4.0 it is MS.Internal.Xaml.Context.NameFixupToken).
111                 }
112
113                 [Test]
114                 public void Read_ArrayInt32 ()
115                 {
116                         ReadTest ("Array_Int32.xml");
117                         var ret = LoadTest<int[]> ("Array_Int32.xml");
118                         Assert.AreEqual (5, ret.Length, "#1");
119                         Assert.AreEqual (2147483647, ret [4], "#2");
120                 }
121
122                 [Test]
123                 public void Read_ListInt32 ()
124                 {
125                         ReadTest ("List_Int32.xml");
126                         var ret = LoadTest<List<int>> ("List_Int32.xml");
127                         Assert.AreEqual (5, ret.Count, "#1");
128                         Assert.AreEqual (2147483647, ret [4], "#2");
129                 }
130
131                 [Test]
132                 public void Read_DictionaryInt32String ()
133                 {
134                         ReadTest ("Dictionary_Int32_String.xml");
135                         //LoadTest<Dictionary<int,string>> ("Dictionary_Int32_String.xml");
136                 }
137
138                 [Test]
139                 public void Read_DictionaryStringType ()
140                 {
141                         ReadTest ("Dictionary_String_Type.xml");
142                         //LoadTest<Dictionary<string,Type>> ("Dictionary_String_Type.xml");
143                 }
144
145                 [Test]
146                 public void Read_SilverlightApp1 ()
147                 {
148                         ReadTest ("SilverlightApp1.xaml");
149                 }
150
151                 [Test]
152                 public void Read_Guid ()
153                 {
154                         ReadTest ("Guid.xml");
155                         var ret = LoadTest<Guid> ("Guid.xml");
156                         Assert.AreEqual (Guid.Parse ("9c3345ec-8922-4662-8e8d-a4e41f47cf09"), ret, "ret");
157                 }
158
159                 [Test]
160                 public void Read_GuidFactoryMethod ()
161                 {
162                         ReadTest ("GuidFactoryMethod.xml");
163                         var ret = LoadTest<Guid> ("GuidFactoryMethod.xml");
164                         Assert.AreEqual (Guid.Parse ("9c3345ec-8922-4662-8e8d-a4e41f47cf09"), ret, "ret");
165                 }
166
167                 void ReadBase (XamlReader r)
168                 {
169                         Assert.IsTrue (r.Read (), "sbase#1");
170                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
171                         Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
172
173                         Assert.IsTrue (r.Read (), "vbase#1");
174                         Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
175                         Assert.IsTrue (r.Value is string, "vbase#3");
176
177                         Assert.IsTrue (r.Read (), "ebase#1");
178                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
179                 }
180
181                 [Test]
182                 public void ReadInt32Details ()
183                 {
184                         var r = GetReader ("Int32.xml");
185
186                         Assert.IsTrue (r.Read (), "ns#1");
187                         Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
188                         Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
189
190                         Assert.IsTrue (r.Read (), "so#1");
191                         Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
192                         Assert.AreEqual (XamlLanguage.Int32, r.Type, "so#3");
193
194                         ReadBase (r);
195
196                         Assert.IsTrue (r.Read (), "sinit#1");
197                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
198                         Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
199
200                         Assert.IsTrue (r.Read (), "vinit#1");
201                         Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
202                         Assert.AreEqual ("5", r.Value, "vinit#3"); // string
203
204                         Assert.IsTrue (r.Read (), "einit#1");
205                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
206
207                         Assert.IsTrue (r.Read (), "eo#1");
208                         Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
209
210                         Assert.IsFalse (r.Read (), "end");
211                 }
212
213                 [Test]
214                 public void ReadDateTimeDetails ()
215                 {
216                         var r = GetReader ("DateTime.xml");
217
218                         Assert.IsTrue (r.Read (), "ns#1");
219                         Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
220                         Assert.AreEqual ("clr-namespace:System;assembly=mscorlib", r.Namespace.Namespace, "ns#3");
221
222                         Assert.IsTrue (r.Read (), "so#1");
223                         Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
224                         Assert.AreEqual (r.SchemaContext.GetXamlType (typeof (DateTime)), r.Type, "so#3");
225
226                         ReadBase (r);
227
228                         Assert.IsTrue (r.Read (), "sinit#1");
229                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
230                         Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
231
232                         Assert.IsTrue (r.Read (), "vinit#1");
233                         Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
234                         Assert.AreEqual ("2010-04-14", r.Value, "vinit#3"); // string
235
236                         Assert.IsTrue (r.Read (), "einit#1");
237                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
238
239                         Assert.IsTrue (r.Read (), "eo#1");
240                         Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
241                         Assert.IsFalse (r.Read (), "end");
242                 }
243
244                 [Test]
245                 public void ReadTypeDetails ()
246                 {
247                         var r = GetReader ("Type.xml");
248
249                         Assert.IsTrue (r.Read (), "ns#1");
250                         Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
251                         Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
252
253                         Assert.IsTrue (r.Read (), "so#1");
254                         Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
255                         Assert.AreEqual (XamlLanguage.Type, r.Type, "so#3");
256
257                         ReadBase (r);
258
259                         Assert.IsTrue (r.Read (), "sinit#1");
260                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
261                         // FIXME: They are identical on .NET.
262                         // They aren't on mono, every GetMember() returns different object
263                         // (it is the same as .NET; see XamlMemberTest.EqualsTest.) 
264                         // and XamlMember is almost non-comparable unless they
265                         // are identical, so we fail here.
266                         Assert.AreEqual (XamlLanguage.Type.GetMember ("Type").ToString (), r.Member.ToString (), "sinit#3");
267                         //Assert.AreEqual (XamlLanguage.Type.GetMember ("Type"), r.Member, "sinit#3-2");
268                         //Assert.IsTrue (Object.ReferenceEquals (XamlLanguage.Type.GetMember ("Type"), r.Member), "sinit#3-3");
269
270                         Assert.IsTrue (r.Read (), "vinit#1");
271                         Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
272                         Assert.AreEqual ("x:Int32", r.Value, "vinit#3"); // string
273
274                         Assert.IsTrue (r.Read (), "einit#1");
275                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
276
277                         Assert.IsTrue (r.Read (), "eo#1");
278                         Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
279
280                         Assert.IsFalse (r.Read (), "end");
281                 }
282
283                 [Test]
284                 public void ReadListInt32Details ()
285                 {
286                         var r = GetReader ("List_Int32.xml");
287
288                         Assert.IsTrue (r.Read (), "ns#1");
289                         Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
290                         Assert.AreEqual ("clr-namespace:System.Collections.Generic;assembly=mscorlib", r.Namespace.Namespace, "ns#3");
291                         Assert.AreEqual (String.Empty, r.Namespace.Prefix, "ns#4");
292
293                         Assert.IsTrue (r.Read (), "ns2#1");
294                         Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns2#2");
295                         Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns2#3");
296                         Assert.AreEqual ("x", r.Namespace.Prefix, "ns2#4");
297
298                         Assert.IsTrue (r.Read (), "so#1");
299                         Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
300                         var xt = new XamlType (typeof (List<int>), r.SchemaContext);
301                         Assert.AreEqual (xt, r.Type, "so#3");
302
303                         ReadBase (r);
304
305                         Assert.IsTrue (r.Read (), "scap#1");
306                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "scap#2");
307                         Assert.AreEqual (xt.GetMember ("Capacity"), r.Member, "scap#3");
308
309                         Assert.IsTrue (r.Read (), "vcap#1");
310                         Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vcap#2");
311                         Assert.AreEqual ("5", r.Value, "vcap#3"); // string
312
313                         Assert.IsTrue (r.Read (), "ecap#1");
314                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ecap#2");
315
316                         Assert.IsTrue (r.Read (), "sItems#1");
317                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItems#2");
318                         Assert.AreEqual (XamlLanguage.Items, r.Member, "sItems#3");
319
320                         int [] values = {4, -5, 0, 255, int.MaxValue};
321                         var ci = new CultureInfo ("en-US");
322
323                         for (int i = 0; i < 5; i++) {
324                                 Assert.IsTrue (r.Read (), "soItem#1." + i);
325                                 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "soItem#2." + i);
326                                 Assert.AreEqual (XamlLanguage.Int32, r.Type, "soItem#3." + i);
327
328                                 Assert.IsTrue (r.Read (), "sItem#1." + i);
329                                 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItem#2." + i);
330                                 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sItem#3." + i);
331
332                                 Assert.IsTrue (r.Read (), "vItem#1." + i);
333                                 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vItem#2." + i);
334                                 Assert.AreEqual (values [i].ToString (ci), r.Value, "vItem#3." + i);
335
336                                 Assert.IsTrue (r.Read (), "eItem#1." + i);
337                                 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItem#2." + i);
338
339                                 Assert.IsTrue (r.Read (), "eoItem#1");
340                                 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eoItem#2");
341                         }
342
343                         Assert.IsTrue (r.Read (), "eItems#1");
344                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItems#2");
345
346                         Assert.IsTrue (r.Read (), "eo#1");
347                         Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
348
349                         Assert.IsFalse (r.Read (), "end");
350                 }
351
352                 [Test]
353                 public void ReadStringDetails ()
354                 {
355                         var r = GetReader ("String.xml");
356
357                         Assert.IsTrue (r.Read (), "ns#1");
358                         Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
359                         Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
360
361                         Assert.IsTrue (r.Read (), "so#1");
362                         Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
363                         Assert.AreEqual (XamlLanguage.String, r.Type, "so#3");
364
365                         ReadBase (r);
366
367                         Assert.IsTrue (r.Read (), "sinit#1");
368                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
369                         Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
370
371                         Assert.IsTrue (r.Read (), "vinit#1");
372                         Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
373                         Assert.AreEqual ("foo", r.Value, "vinit#3"); // string
374
375                         Assert.IsTrue (r.Read (), "einit#1");
376                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
377
378                         Assert.IsTrue (r.Read (), "eo#1");
379                         Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
380
381                         Assert.IsFalse (r.Read (), "end");
382                 }
383
384                 [Test]
385                 public void ReadArrayInt32Details ()
386                 {
387                         var r = GetReader ("Array_Int32.xml");
388
389                         Assert.IsTrue (r.Read (), "ns#1");
390                         Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
391                         Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
392                         Assert.AreEqual ("x", r.Namespace.Prefix, "ns#4");
393
394                         Assert.IsTrue (r.Read (), "soa#1");
395                         Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "soa#2");
396                         var xt = new XamlType (typeof (ArrayExtension), r.SchemaContext);
397                         Assert.AreEqual (xt, r.Type, "soa#3");
398
399                         ReadBase (r);
400
401                         // Type
402                         Assert.IsTrue (r.Read (), "stype#1");
403                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "stype#2");
404                         Assert.AreEqual (xt.GetMember ("Type"), r.Member, "stype#3");
405
406                         // Type
407                         Assert.IsTrue (r.Read (), "vtype#1");
408                         Assert.AreEqual (XamlNodeType.Value, r.NodeType, "type#2");
409                         Assert.AreEqual ("x:Int32", r.Value, "vtype#3"); // string value
410
411                         Assert.IsTrue (r.Read (), "etype#1");
412                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ecap#2");
413
414                         // Items
415                         Assert.IsTrue (r.Read (), "sItemsA#1");
416                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItemsA#2");
417                         Assert.AreEqual (xt.GetMember ("Items"), r.Member, "sItemsA#3");
418
419                         // (GetObject)
420                         Assert.IsTrue (r.Read (), "go#1");
421                         Assert.AreEqual (XamlNodeType.GetObject, r.NodeType, "go#2");
422                         Assert.IsNull (r.Type, "go#3");
423                         Assert.IsNull (r.Member, "go#4");
424                         Assert.IsNull (r.Value, "go#5");
425
426                         Assert.IsTrue (r.Read (), "sItems#1");
427                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItems#2");
428                         Assert.AreEqual (XamlLanguage.Items, r.Member, "sItems#3");
429
430                         int [] values = {4, -5, 0, 255, int.MaxValue};
431                         var ci = new CultureInfo ("en-US");
432
433                         for (int i = 0; i < 5; i++) {
434                                 Assert.IsTrue (r.Read (), "soItem#1." + i);
435                                 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "soItem#2." + i);
436                                 Assert.AreEqual (XamlLanguage.Int32, r.Type, "soItem#3." + i);
437
438                                 Assert.IsTrue (r.Read (), "sItem#1." + i);
439                                 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItem#2." + i);
440                                 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sItem#3." + i);
441
442                                 Assert.IsTrue (r.Read (), "vItem#1." + i);
443                                 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vItem#2." + i);
444                                 Assert.AreEqual (values [i].ToString (ci), r.Value, "vItem#3." + i);
445
446                                 Assert.IsTrue (r.Read (), "eItem#1." + i);
447                                 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItem#2." + i);
448
449                                 Assert.IsTrue (r.Read (), "eoItem#1");
450                                 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eoItem#2");
451                         }
452
453                         Assert.IsTrue (r.Read (), "eItems#1");
454                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItems#2");
455
456                         // end of GetObject
457                         Assert.IsTrue (r.Read (), "eog#1");
458                         Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
459
460                         // end of ArrayExtension.Items
461                         Assert.IsTrue (r.Read (), "eItemsA#1");
462                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eItemsA#2");
463
464                         // end of ArrayExtension
465                         Assert.IsTrue (r.Read (), "eoa#1");
466                         Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eoa#2");
467
468                         Assert.IsFalse (r.Read (), "end");
469                 }
470
471                 [Test]
472                 public void ReadNullDetails ()
473                 {
474                         var r = GetReader ("NullExtension.xml");
475
476                         Assert.IsTrue (r.Read (), "ns#1");
477                         Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
478                         Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
479                         Assert.AreEqual ("x", r.Namespace.Prefix, "ns#4");
480
481                         Assert.IsTrue (r.Read (), "so#1");
482                         Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
483                         var xt = new XamlType (typeof (NullExtension), r.SchemaContext);
484                         Assert.AreEqual (xt, r.Type, "so#3");
485
486                         ReadBase (r);
487
488                         // end of NullExtension
489                         Assert.IsTrue (r.Read (), "eo#1");
490                         Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
491
492                         Assert.IsFalse (r.Read (), "end");
493                 }
494
495                 [Test]
496                 public void ReadReferenceDetails ()
497                 {
498                         var r = GetReader ("Reference.xml");
499
500                         Assert.IsTrue (r.Read (), "ns#1");
501                         Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
502                         Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
503                         Assert.AreEqual ("x", r.Namespace.Prefix, "ns#4");
504
505                         Assert.IsTrue (r.Read (), "so#1");
506                         Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
507                         var xt = new XamlType (typeof (Reference), r.SchemaContext);
508                         Assert.AreEqual (xt, r.Type, "so#3");
509
510                         // base
511                         Assert.IsTrue (r.Read (), "sbase#1");
512                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sbase#2");
513                         Assert.AreEqual (XamlLanguage.Base, r.Member, "sbase#3");
514
515                         Assert.IsTrue (r.Read (), "vbase#1");
516                         Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vbase#2");
517                         Assert.IsTrue (r.Value is string, "vbase#3");
518
519                         Assert.IsTrue (r.Read (), "ebase#1");
520                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "ebase#2");
521
522                         // value
523                         Assert.IsTrue (r.Read (), "sinit#1");
524                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
525                         Assert.AreEqual (xt.GetMember ("Name"), r.Member, "sinit#3");
526
527                         Assert.IsTrue (r.Read (), "vinit#1");
528                         Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
529                         Assert.AreEqual ("FooBar", r.Value, "vinit#3"); // string
530
531                         Assert.IsTrue (r.Read (), "einit#1");
532                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
533
534                         // end of Reference
535                         Assert.IsTrue (r.Read (), "eo#1");
536                         Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
537
538                         Assert.IsFalse (r.Read (), "end");
539                 }
540
541                 [Test]
542                 public void ReadGuidFactoryMethodDetails ()
543                 {
544                         var r = GetReader ("GuidFactoryMethod.xml");
545
546                         Assert.IsTrue (r.Read (), "ns#1");
547                         Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
548                         Assert.AreEqual ("clr-namespace:System;assembly=mscorlib", r.Namespace.Namespace, "ns#3");
549                         Assert.AreEqual (String.Empty, r.Namespace.Prefix, "ns#4");
550
551                         Assert.IsTrue (r.Read (), "ns2#1");
552                         Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns2#2");
553                         Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns2#3");
554                         Assert.AreEqual ("x", r.Namespace.Prefix, "ns2#4");
555
556                         Assert.IsTrue (r.Read (), "so#1");
557                         Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
558                         var xt = r.SchemaContext.GetXamlType (typeof (Guid));
559                         Assert.AreEqual (xt, r.Type, "so#3");
560
561                         ReadBase (r);
562
563                         Assert.IsTrue (r.Read (), "sfactory#1");
564                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sfactory#2");
565                         Assert.AreEqual (XamlLanguage.FactoryMethod, r.Member, "sfactory#3");
566
567                         Assert.IsTrue (r.Read (), "vfactory#1");
568                         Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vfactory#2");
569                         Assert.AreEqual ("Parse", r.Value, "vfactory#3"); // string
570
571                         Assert.IsTrue (r.Read (), "efactory#1");
572                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "efactory#2");
573
574                         Assert.IsTrue (r.Read (), "sarg#1");
575                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sarg#2");
576                         Assert.AreEqual (XamlLanguage.Arguments, r.Member, "sarg#3");
577
578                         Assert.IsTrue (r.Read (), "sarg1#1");
579                         Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "sarg1#2");
580                         Assert.AreEqual (XamlLanguage.String, r.Type, "sarg1#3");
581
582                         Assert.IsTrue (r.Read (), "sInit#1");
583                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sInit#2");
584                         Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sInit#3");
585
586                         Assert.IsTrue (r.Read (), "varg1#1");
587                         Assert.AreEqual (XamlNodeType.Value, r.NodeType, "varg1#2");
588                         Assert.AreEqual ("9c3345ec-8922-4662-8e8d-a4e41f47cf09", r.Value, "varg1#3");
589
590                         Assert.IsTrue (r.Read (), "eInit#1");
591                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eInit#2");
592
593                         Assert.IsTrue (r.Read (), "earg1#1");
594                         Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "earg1#2");
595
596                         Assert.IsTrue (r.Read (), "earg#1");
597                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "earg#2");
598
599
600                         Assert.IsTrue (r.Read (), "eo#1");
601                         Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
602
603                         Assert.IsFalse (r.Read (), "end");
604                 }
605         }
606 }