Merge branch 'master' of github.com:mono/mono into masterwork
[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                 [Test]
59                 public void SchemaContext ()
60                 {
61                         Assert.AreNotEqual (XamlLanguage.Type.SchemaContext, new XamlXmlReader (XmlReader.Create (new StringReader ("<root/>"))).SchemaContext, "#1");
62                 }
63
64                 [Test]
65                 public void Read_Int32 ()
66                 {
67                         ReadTest ("Int32.xml");
68                 }
69
70                 [Test]
71                 public void Read_DateTime ()
72                 {
73                         ReadTest ("DateTime.xml");
74                 }
75
76                 [Test]
77                 public void Read_TimeSpan ()
78                 {
79                         ReadTest ("TimeSpan.xml");
80                 }
81
82                 [Test]
83                 public void Read_ArrayInt32 ()
84                 {
85                         ReadTest ("Array_Int32.xml");
86                 }
87
88                 [Test]
89                 public void Read_DictionaryInt32String ()
90                 {
91                         ReadTest ("Dictionary_Int32_String.xml");
92                 }
93
94                 [Test]
95                 public void Read_DictionaryStringType ()
96                 {
97                         ReadTest ("Dictionary_String_Type.xml");
98                 }
99
100                 [Test]
101                 public void Read_SilverlightApp1 ()
102                 {
103                         ReadTest ("SilverlightApp1.xaml");
104                 }
105
106                 [Test]
107                 public void Read_Guid ()
108                 {
109                         ReadTest ("Guid.xml");
110                 }
111
112                 [Test]
113                 public void Read_GuidFactoryMethod ()
114                 {
115                         ReadTest ("GuidFactoryMethod.xml");
116                 }
117
118                 [Test]
119                 public void ReadInt32Details ()
120                 {
121                         var r = GetReader ("Int32.xml");
122
123                         Assert.IsTrue (r.Read (), "ns#1");
124                         Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
125                         Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
126
127                         Assert.IsTrue (r.Read (), "so#1");
128                         Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
129                         Assert.AreEqual (XamlLanguage.Int32, r.Type, "so#3");
130
131                         ReadBase (r);
132
133                         Assert.IsTrue (r.Read (), "sinit#1");
134                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
135                         Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
136
137                         Assert.IsTrue (r.Read (), "vinit#1");
138                         Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
139                         Assert.AreEqual ("5", r.Value, "vinit#3"); // string
140
141                         Assert.IsTrue (r.Read (), "einit#1");
142                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
143
144                         Assert.IsTrue (r.Read (), "eo#1");
145                         Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
146
147                         Assert.IsFalse (r.Read (), "end");
148                 }
149
150                 [Test]
151                 public void ReadDateTimeDetails ()
152                 {
153                         var r = GetReader ("DateTime.xml");
154
155                         Assert.IsTrue (r.Read (), "ns#1");
156                         Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
157                         Assert.AreEqual ("clr-namespace:System;assembly=mscorlib", r.Namespace.Namespace, "ns#3");
158
159                         Assert.IsTrue (r.Read (), "so#1");
160                         Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
161                         Assert.AreEqual (r.SchemaContext.GetXamlType (typeof (DateTime)), r.Type, "so#3");
162
163                         ReadBase (r);
164
165                         Assert.IsTrue (r.Read (), "sinit#1");
166                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
167                         Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
168
169                         Assert.IsTrue (r.Read (), "vinit#1");
170                         Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
171                         Assert.AreEqual ("2010-04-14", r.Value, "vinit#3"); // string
172
173                         Assert.IsTrue (r.Read (), "einit#1");
174                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
175
176                         Assert.IsTrue (r.Read (), "eo#1");
177                         Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
178                         Assert.IsFalse (r.Read (), "end");
179                 }
180
181                 [Test]
182                 public void ReadGuidFactoryMethodDetails ()
183                 {
184                         var r = GetReader ("GuidFactoryMethod.xml");
185
186                         Assert.IsTrue (r.Read (), "ns#1");
187                         Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
188                         Assert.AreEqual ("clr-namespace:System;assembly=mscorlib", r.Namespace.Namespace, "ns#3");
189                         Assert.AreEqual (String.Empty, r.Namespace.Prefix, "ns#4");
190
191                         Assert.IsTrue (r.Read (), "ns2#1");
192                         Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns2#2");
193                         Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns2#3");
194                         Assert.AreEqual ("x", r.Namespace.Prefix, "ns2#4");
195
196                         Assert.IsTrue (r.Read (), "so#1");
197                         Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
198                         var xt = r.SchemaContext.GetXamlType (typeof (Guid));
199                         Assert.AreEqual (xt, r.Type, "so#3");
200
201                         ReadBase (r);
202
203                         Assert.IsTrue (r.Read (), "sfactory#1");
204                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sfactory#2");
205                         Assert.AreEqual (XamlLanguage.FactoryMethod, r.Member, "sfactory#3");
206
207                         Assert.IsTrue (r.Read (), "vfactory#1");
208                         Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vfactory#2");
209                         Assert.AreEqual ("Parse", r.Value, "vfactory#3"); // string
210
211                         Assert.IsTrue (r.Read (), "efactory#1");
212                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "efactory#2");
213
214                         Assert.IsTrue (r.Read (), "sarg#1");
215                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sarg#2");
216                         Assert.AreEqual (XamlLanguage.Arguments, r.Member, "sarg#3");
217
218                         Assert.IsTrue (r.Read (), "sarg1#1");
219                         Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "sarg1#2");
220                         Assert.AreEqual (XamlLanguage.String, r.Type, "sarg1#3");
221
222                         Assert.IsTrue (r.Read (), "sInit#1");
223                         Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sInit#2");
224                         Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sInit#3");
225
226                         Assert.IsTrue (r.Read (), "varg1#1");
227                         Assert.AreEqual (XamlNodeType.Value, r.NodeType, "varg1#2");
228                         Assert.AreEqual ("9c3345ec-8922-4662-8e8d-a4e41f47cf09", r.Value, "varg1#3");
229
230                         Assert.IsTrue (r.Read (), "eInit#1");
231                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eInit#2");
232
233                         Assert.IsTrue (r.Read (), "earg1#1");
234                         Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "earg1#2");
235
236                         Assert.IsTrue (r.Read (), "earg#1");
237                         Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "earg#2");
238
239
240                         Assert.IsTrue (r.Read (), "eo#1");
241                         Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
242
243                         Assert.IsFalse (r.Read (), "end");
244                 }
245
246                 [Test]
247                 public void Read_String ()
248                 {
249                         var r = GetReader ("String.xml");
250                         Read_String (r);
251                 }
252
253                 [Test]
254                 public void WriteNullMemberAsObject ()
255                 {
256                         var r = GetReader ("TestClass4.xml");
257                         WriteNullMemberAsObject (r, null);
258                 }
259                 
260                 [Test]
261                 public void StaticMember ()
262                 {
263                         var r = GetReader ("TestClass5.xml");
264                         StaticMember (r);
265                 }
266
267                 [Test]
268                 public void Skip ()
269                 {
270                         var r = GetReader ("String.xml");
271                         Skip (r);
272                 }
273                 
274                 [Test]
275                 public void Skip2 ()
276                 {
277                         var r = GetReader ("String.xml");
278                         Skip2 (r);
279                 }
280
281                 [Test]
282                 public void Read_XmlDocument ()
283                 {
284                         var doc = new XmlDocument ();
285                         doc.LoadXml ("<root xmlns='urn:foo'><elem attr='val' /></root>");
286                         // note that corresponding XamlXmlWriter is untested yet.
287                         var r = GetReader ("XmlDocument.xml");
288                         Read_XmlDocument (r);
289                 }
290
291                 [Test]
292                 public void Read_NonPrimitive ()
293                 {
294                         var r = GetReader ("NonPrimitive.xml");
295                         Read_NonPrimitive (r);
296                 }
297                 
298                 [Test]
299                 public void Read_TypeExtension ()
300                 {
301                         var r = GetReader ("Type.xml");
302                         Read_TypeOrTypeExtension (r, null, XamlLanguage.Type.GetMember ("Type"));
303                 }
304                 
305                 [Test]
306                 public void Read_Type2 ()
307                 {
308                         var r = GetReader ("Type2.xml");
309                         Read_TypeOrTypeExtension2 (r, null, XamlLanguage.Type.GetMember ("Type"));
310                 }
311                 
312                 [Test]
313                 public void Read_Reference ()
314                 {
315                         var r = GetReader ("Reference.xml");
316                         Read_Reference (r);
317                 }
318                 
319                 [Test]
320                 public void Read_Null ()
321                 {
322                         var r = GetReader ("NullExtension.xml");
323                         Read_NullOrNullExtension (r, null);
324                 }
325                 
326                 [Test]
327                 public void Read_StaticExtension ()
328                 {
329                         var r = GetReader ("StaticExtension.xml");
330                         Read_StaticExtension (r, XamlLanguage.Static.GetMember ("Member"));
331                 }
332                 
333                 [Test]
334                 public void Read_ListInt32 ()
335                 {
336                         var r = GetReader ("List_Int32.xml");
337                         Read_ListInt32 (r, null, new int [] {5, -3, int.MaxValue, 0}.ToList ());
338                 }
339                 
340                 [Test]
341                 public void Read_ListInt32_2 ()
342                 {
343                         var r = GetReader ("List_Int32_2.xml");
344                         Read_ListInt32 (r, null, new int [0].ToList ());
345                 }
346                 
347                 [Test]
348                 public void Read_ListType ()
349                 {
350                         var r = GetReader ("List_Type.xml");
351                         Read_ListType (r, false);
352                 }
353
354                 [Test]
355                 public void Read_ListArray ()
356                 {
357                         var r = GetReader ("List_Array.xml");
358                         Read_ListArray (r);
359                 }
360
361                 [Test]
362                 public void Read_ArrayList ()
363                 {
364                         var r = GetReader ("ArrayList.xml");
365                         Read_ArrayList (r);
366                 }
367                 
368                 [Test]
369                 public void Read_Array ()
370                 {
371                         var r = GetReader ("ArrayExtension.xml");
372                         Read_ArrayOrArrayExtensionOrMyArrayExtension (r, null, typeof (ArrayExtension));
373                 }
374                 
375                 [Test]
376                 public void Read_MyArrayExtension ()
377                 {
378                         var r = GetReader ("MyArrayExtension.xml");
379                         Read_ArrayOrArrayExtensionOrMyArrayExtension (r, null, typeof (MyArrayExtension));
380                 }
381
382                 [Test]
383                 public void Read_ArrayExtension2 ()
384                 {
385                         var r = GetReader ("ArrayExtension2.xml");
386                         Read_ArrayExtension2 (r);
387                 }
388
389                 [Test]
390                 public void Read_CustomMarkupExtension ()
391                 {
392                         var r = GetReader ("MyExtension.xml");
393                         Read_CustomMarkupExtension (r);
394                 }
395                 
396                 [Test]
397                 public void Read_CustomMarkupExtension2 ()
398                 {
399                         var r = GetReader ("MyExtension2.xml");
400                         Read_CustomMarkupExtension2 (r);
401                 }
402                 
403                 [Test]
404                 public void Read_CustomMarkupExtension3 ()
405                 {
406                         var r = GetReader ("MyExtension3.xml");
407                         Read_CustomMarkupExtension3 (r);
408                 }
409                 
410                 [Test]
411                 public void Read_CustomMarkupExtension4 ()
412                 {
413                         var r = GetReader ("MyExtension4.xml");
414                         Read_CustomMarkupExtension4 (r);
415                 }
416                 
417                 [Test]
418                 public void Read_CustomMarkupExtension6 ()
419                 {
420                         var r = GetReader ("MyExtension6.xml");
421                         Read_CustomMarkupExtension6 (r);
422                 }
423
424                 [Test]
425                 public void Read_ArgumentAttributed ()
426                 {
427                         var obj = new ArgumentAttributed ("foo", "bar");
428                         var r = GetReader ("ArgumentAttributed.xml");
429                         Read_ArgumentAttributed (r, obj);
430                 }
431
432                 [Test]
433                 public void Read_Dictionary ()
434                 {
435                         var obj = new Dictionary<string,object> ();
436                         obj ["Foo"] = 5.0;
437                         obj ["Bar"] = -6.5;
438                         var r = GetReader ("Dictionary_String_Double.xml");
439                         Read_Dictionary (r);
440                 }
441                 
442                 [Test]
443                 public void Read_Dictionary2 ()
444                 {
445                         var obj = new Dictionary<string,Type> ();
446                         obj ["Foo"] = typeof (int);
447                         obj ["Bar"] = typeof (Dictionary<Type,XamlType>);
448                         var r = GetReader ("Dictionary_String_Type_2.xml");
449                         Read_Dictionary2 (r, XamlLanguage.Type.GetMember ("Type"));
450                 }
451                 
452                 [Test]
453                 public void PositionalParameters2 ()
454                 {
455                         var r = GetReader ("PositionalParametersWrapper.xml");
456                         PositionalParameters2 (r);
457                 }
458
459                 [Test]
460                 public void ComplexPositionalParameters ()
461                 {
462                         var r = GetReader ("ComplexPositionalParameterWrapper.xml");
463                         ComplexPositionalParameters (r);
464                 }
465                 
466                 [Test]
467                 public void Read_ListWrapper ()
468                 {
469                         var r = GetReader ("ListWrapper.xml");
470                         Read_ListWrapper (r);
471                 }
472                 
473                 [Test]
474                 public void Read_ListWrapper2 () // read-write list member.
475                 {
476                         var r = GetReader ("ListWrapper2.xml");
477                         Read_ListWrapper2 (r);
478                 }
479
480                 [Test]
481                 public void Read_ContentIncluded ()
482                 {
483                         var r = GetReader ("ContentIncluded.xml");
484                         Read_ContentIncluded (r);
485                 }
486
487                 [Test]
488                 public void Read_PropertyDefinition ()
489                 {
490                         var r = GetReader ("PropertyDefinition.xml");
491                         Read_PropertyDefinition (r);
492                 }
493
494                 [Test]
495                 public void Read_StaticExtensionWrapper ()
496                 {
497                         var r = GetReader ("StaticExtensionWrapper.xml");
498                         Read_StaticExtensionWrapper (r);
499                 }
500
501                 [Test]
502                 public void Read_TypeExtensionWrapper ()
503                 {
504                         var r = GetReader ("TypeExtensionWrapper.xml");
505                         Read_TypeExtensionWrapper (r);
506                 }
507
508                 [Test]
509                 public void Read_NamedItems ()
510                 {
511                         var r = GetReader ("NamedItems.xml");
512                         Read_NamedItems (r, false);
513                 }
514
515                 [Test]
516                 public void Read_NamedItems2 ()
517                 {
518                         var r = GetReader ("NamedItems2.xml");
519                         Read_NamedItems2 (r, false);
520                 }
521
522                 [Test]
523                 public void Read_XmlSerializableWrapper ()
524                 {
525                         var r = GetReader ("XmlSerializableWrapper.xml");
526                         Read_XmlSerializableWrapper (r, false);
527                 }
528
529                 [Test]
530                 public void Read_XmlSerializable ()
531                 {
532                         var r = GetReader ("XmlSerializable.xml");
533                         Read_XmlSerializable (r);
534                 }
535
536                 [Test]
537                 public void Read_ListXmlSerializable ()
538                 {
539                         var r = GetReader ("List_XmlSerializable.xml");
540                         Read_ListXmlSerializable (r);
541                 }
542         }
543 }