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 : XamlReaderTestBase
46 XamlReader GetReader (string filename)
49 string ver = "net_4_5";
51 string ver = "net_4_0";
53 string xml = File.ReadAllText (Path.Combine ("Test/XmlFiles", filename)).Replace ("net_4_0", ver);
54 return new XamlXmlReader (XmlReader.Create (new StringReader (xml)));
57 void ReadTest (string filename)
59 var r = GetReader (filename);
65 public void SchemaContext ()
67 Assert.AreNotEqual (XamlLanguage.Type.SchemaContext, new XamlXmlReader (XmlReader.Create (new StringReader ("<root/>"))).SchemaContext, "#1");
71 public void Read_Int32 ()
73 ReadTest ("Int32.xml");
77 public void Read_DateTime ()
79 ReadTest ("DateTime.xml");
83 public void Read_TimeSpan ()
85 ReadTest ("TimeSpan.xml");
89 public void Read_ArrayInt32 ()
91 ReadTest ("Array_Int32.xml");
95 public void Read_DictionaryInt32String ()
97 ReadTest ("Dictionary_Int32_String.xml");
101 public void Read_DictionaryStringType ()
103 ReadTest ("Dictionary_String_Type.xml");
107 public void Read_SilverlightApp1 ()
109 ReadTest ("SilverlightApp1.xaml");
113 public void Read_Guid ()
115 ReadTest ("Guid.xml");
119 public void Read_GuidFactoryMethod ()
121 ReadTest ("GuidFactoryMethod.xml");
125 public void ReadInt32Details ()
127 var r = GetReader ("Int32.xml");
129 Assert.IsTrue (r.Read (), "ns#1");
130 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
131 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#3");
133 Assert.IsTrue (r.Read (), "so#1");
134 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
135 Assert.AreEqual (XamlLanguage.Int32, r.Type, "so#3");
139 Assert.IsTrue (r.Read (), "sinit#1");
140 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
141 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
143 Assert.IsTrue (r.Read (), "vinit#1");
144 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
145 Assert.AreEqual ("5", r.Value, "vinit#3"); // string
147 Assert.IsTrue (r.Read (), "einit#1");
148 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
150 Assert.IsTrue (r.Read (), "eo#1");
151 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
153 Assert.IsFalse (r.Read (), "end");
157 public void ReadDateTimeDetails ()
159 var r = GetReader ("DateTime.xml");
161 Assert.IsTrue (r.Read (), "ns#1");
162 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
163 Assert.AreEqual ("clr-namespace:System;assembly=mscorlib", r.Namespace.Namespace, "ns#3");
165 Assert.IsTrue (r.Read (), "so#1");
166 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
167 Assert.AreEqual (r.SchemaContext.GetXamlType (typeof (DateTime)), r.Type, "so#3");
171 Assert.IsTrue (r.Read (), "sinit#1");
172 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sinit#2");
173 Assert.AreEqual (XamlLanguage.Initialization, r.Member, "sinit#3");
175 Assert.IsTrue (r.Read (), "vinit#1");
176 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vinit#2");
177 Assert.AreEqual ("2010-04-14", r.Value, "vinit#3"); // string
179 Assert.IsTrue (r.Read (), "einit#1");
180 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "einit#2");
182 Assert.IsTrue (r.Read (), "eo#1");
183 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
184 Assert.IsFalse (r.Read (), "end");
188 public void ReadGuidFactoryMethodDetails ()
190 var r = GetReader ("GuidFactoryMethod.xml");
192 Assert.IsTrue (r.Read (), "ns#1");
193 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2");
194 Assert.AreEqual ("clr-namespace:System;assembly=mscorlib", r.Namespace.Namespace, "ns#3");
195 Assert.AreEqual (String.Empty, r.Namespace.Prefix, "ns#4");
197 Assert.IsTrue (r.Read (), "ns2#1");
198 Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns2#2");
199 Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns2#3");
200 Assert.AreEqual ("x", r.Namespace.Prefix, "ns2#4");
202 Assert.IsTrue (r.Read (), "so#1");
203 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#2");
204 var xt = r.SchemaContext.GetXamlType (typeof (Guid));
205 Assert.AreEqual (xt, r.Type, "so#3");
209 Assert.IsTrue (r.Read (), "sfactory#1");
210 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sfactory#2");
211 Assert.AreEqual (XamlLanguage.FactoryMethod, r.Member, "sfactory#3");
213 Assert.IsTrue (r.Read (), "vfactory#1");
214 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vfactory#2");
215 Assert.AreEqual ("Parse", r.Value, "vfactory#3"); // string
217 Assert.IsTrue (r.Read (), "efactory#1");
218 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "efactory#2");
220 Assert.IsTrue (r.Read (), "sarg#1");
221 Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sarg#2");
222 Assert.AreEqual (XamlLanguage.Arguments, r.Member, "sarg#3");
224 Assert.IsTrue (r.Read (), "sarg1#1");
225 Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "sarg1#2");
226 Assert.AreEqual (XamlLanguage.String, r.Type, "sarg1#3");
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");
232 Assert.IsTrue (r.Read (), "varg1#1");
233 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "varg1#2");
234 Assert.AreEqual ("9c3345ec-8922-4662-8e8d-a4e41f47cf09", r.Value, "varg1#3");
236 Assert.IsTrue (r.Read (), "eInit#1");
237 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eInit#2");
239 Assert.IsTrue (r.Read (), "earg1#1");
240 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "earg1#2");
242 Assert.IsTrue (r.Read (), "earg#1");
243 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "earg#2");
246 Assert.IsTrue (r.Read (), "eo#1");
247 Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#2");
249 Assert.IsFalse (r.Read (), "end");
253 public void ReadEventStore ()
255 var r = GetReader ("EventStore2.xml");
257 var xt = r.SchemaContext.GetXamlType (typeof (EventStore));
258 var xm = xt.GetMember ("Event1");
259 Assert.IsNotNull (xt, "premise#1");
260 Assert.IsNotNull (xm, "premise#2");
261 Assert.IsTrue (xm.IsEvent, "premise#3");
264 if (r.Member != null && r.Member.IsEvent)
267 Assert.Fail ("Items did not appear");
270 Assert.AreEqual (xm, r.Member, "#x1");
271 Assert.AreEqual ("Event1", r.Member.Name, "#x2");
273 Assert.IsTrue (r.Read (), "#x11");
274 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#x12");
275 Assert.AreEqual ("Method1", r.Value, "#x13");
277 Assert.IsTrue (r.Read (), "#x21");
278 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#x22");
280 xm = xt.GetMember ("Event2");
281 Assert.IsTrue (r.Read (), "#x31");
282 Assert.AreEqual (xm, r.Member, "#x32");
283 Assert.AreEqual ("Event2", r.Member.Name, "#x33");
285 Assert.IsTrue (r.Read (), "#x41");
286 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#x42");
287 Assert.AreEqual ("Method2", r.Value, "#x43");
289 Assert.IsTrue (r.Read (), "#x51");
290 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#x52");
292 Assert.IsTrue (r.Read (), "#x61");
293 Assert.AreEqual ("Event1", r.Member.Name, "#x62");
295 Assert.IsTrue (r.Read (), "#x71");
296 Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#x72");
297 Assert.AreEqual ("Method3", r.Value, "#x73"); // nonexistent, but no need to raise an error.
299 Assert.IsTrue (r.Read (), "#x81");
300 Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#x82");
308 // common XamlReader tests.
311 public void Read_String ()
313 var r = GetReader ("String.xml");
318 public void WriteNullMemberAsObject ()
320 var r = GetReader ("TestClass4.xml");
321 WriteNullMemberAsObject (r, null);
325 public void StaticMember ()
327 var r = GetReader ("TestClass5.xml");
334 var r = GetReader ("String.xml");
341 var r = GetReader ("String.xml");
346 public void Read_XmlDocument ()
348 var doc = new XmlDocument ();
349 doc.LoadXml ("<root xmlns='urn:foo'><elem attr='val' /></root>");
350 // note that corresponding XamlXmlWriter is untested yet.
351 var r = GetReader ("XmlDocument.xml");
352 Read_XmlDocument (r);
356 public void Read_NonPrimitive ()
358 var r = GetReader ("NonPrimitive.xml");
359 Read_NonPrimitive (r);
363 public void Read_TypeExtension ()
365 var r = GetReader ("Type.xml");
366 Read_TypeOrTypeExtension (r, null, XamlLanguage.Type.GetMember ("Type"));
370 public void Read_Type2 ()
372 var r = GetReader ("Type2.xml");
373 Read_TypeOrTypeExtension2 (r, null, XamlLanguage.Type.GetMember ("Type"));
377 public void Read_Reference ()
379 var r = GetReader ("Reference.xml");
384 public void Read_Null ()
386 var r = GetReader ("NullExtension.xml");
387 Read_NullOrNullExtension (r, null);
391 public void Read_StaticExtension ()
393 var r = GetReader ("StaticExtension.xml");
394 Read_StaticExtension (r, XamlLanguage.Static.GetMember ("Member"));
398 public void Read_ListInt32 ()
400 var r = GetReader ("List_Int32.xml");
401 Read_ListInt32 (r, null, new int [] {5, -3, int.MaxValue, 0}.ToList ());
405 public void Read_ListInt32_2 ()
407 var r = GetReader ("List_Int32_2.xml");
408 Read_ListInt32 (r, null, new int [0].ToList ());
412 public void Read_ListType ()
414 var r = GetReader ("List_Type.xml");
415 Read_ListType (r, false);
419 public void Read_ListArray ()
421 var r = GetReader ("List_Array.xml");
426 public void Read_ArrayList ()
428 var r = GetReader ("ArrayList.xml");
433 public void Read_Array ()
435 var r = GetReader ("ArrayExtension.xml");
436 Read_ArrayOrArrayExtensionOrMyArrayExtension (r, null, typeof (ArrayExtension));
440 public void Read_MyArrayExtension ()
442 var r = GetReader ("MyArrayExtension.xml");
443 Read_ArrayOrArrayExtensionOrMyArrayExtension (r, null, typeof (MyArrayExtension));
447 public void Read_ArrayExtension2 ()
449 var r = GetReader ("ArrayExtension2.xml");
450 Read_ArrayExtension2 (r);
454 public void Read_CustomMarkupExtension ()
456 var r = GetReader ("MyExtension.xml");
457 Read_CustomMarkupExtension (r);
461 public void Read_CustomMarkupExtension2 ()
463 var r = GetReader ("MyExtension2.xml");
464 Read_CustomMarkupExtension2 (r);
468 public void Read_CustomMarkupExtension3 ()
470 var r = GetReader ("MyExtension3.xml");
471 Read_CustomMarkupExtension3 (r);
475 public void Read_CustomMarkupExtension4 ()
477 var r = GetReader ("MyExtension4.xml");
478 Read_CustomMarkupExtension4 (r);
482 public void Read_CustomMarkupExtension6 ()
484 var r = GetReader ("MyExtension6.xml");
485 Read_CustomMarkupExtension6 (r);
489 public void Read_ArgumentAttributed ()
491 var obj = new ArgumentAttributed ("foo", "bar");
492 var r = GetReader ("ArgumentAttributed.xml");
493 Read_ArgumentAttributed (r, obj);
497 public void Read_Dictionary ()
499 var obj = new Dictionary<string,object> ();
502 var r = GetReader ("Dictionary_String_Double.xml");
507 public void Read_Dictionary2 ()
509 var obj = new Dictionary<string,Type> ();
510 obj ["Foo"] = typeof (int);
511 obj ["Bar"] = typeof (Dictionary<Type,XamlType>);
512 var r = GetReader ("Dictionary_String_Type_2.xml");
513 Read_Dictionary2 (r, XamlLanguage.Type.GetMember ("Type"));
517 public void PositionalParameters2 ()
519 var r = GetReader ("PositionalParametersWrapper.xml");
520 PositionalParameters2 (r);
524 public void ComplexPositionalParameters ()
526 var r = GetReader ("ComplexPositionalParameterWrapper.xml");
527 ComplexPositionalParameters (r);
531 public void Read_ListWrapper ()
533 var r = GetReader ("ListWrapper.xml");
534 Read_ListWrapper (r);
538 public void Read_ListWrapper2 () // read-write list member.
540 var r = GetReader ("ListWrapper2.xml");
541 Read_ListWrapper2 (r);
545 public void Read_ContentIncluded ()
547 var r = GetReader ("ContentIncluded.xml");
548 Read_ContentIncluded (r);
552 public void Read_PropertyDefinition ()
554 var r = GetReader ("PropertyDefinition.xml");
555 Read_PropertyDefinition (r);
559 public void Read_StaticExtensionWrapper ()
561 var r = GetReader ("StaticExtensionWrapper.xml");
562 Read_StaticExtensionWrapper (r);
566 public void Read_TypeExtensionWrapper ()
568 var r = GetReader ("TypeExtensionWrapper.xml");
569 Read_TypeExtensionWrapper (r);
573 public void Read_NamedItems ()
575 var r = GetReader ("NamedItems.xml");
576 Read_NamedItems (r, false);
580 public void Read_NamedItems2 ()
582 var r = GetReader ("NamedItems2.xml");
583 Read_NamedItems2 (r, false);
587 public void Read_XmlSerializableWrapper ()
589 var r = GetReader ("XmlSerializableWrapper.xml");
590 Read_XmlSerializableWrapper (r, false);
594 public void Read_XmlSerializable ()
596 var r = GetReader ("XmlSerializable.xml");
597 Read_XmlSerializable (r);
601 public void Read_ListXmlSerializable ()
603 var r = GetReader ("List_XmlSerializable.xml");
604 Read_ListXmlSerializable (r);
608 public void Read_AttachedProperty ()
610 var r = GetReader ("AttachedProperty.xml");
611 Read_AttachedProperty (r);
615 public void Read_AbstractWrapper ()
617 var r = GetReader ("AbstractContainer.xml");
623 public void Read_ReadOnlyPropertyContainer ()
625 var r = GetReader ("ReadOnlyPropertyContainer.xml");
631 public void Read_TypeConverterOnListMember ()
633 var r = GetReader ("TypeConverterOnListMember.xml");
634 Read_TypeConverterOnListMember (r);
638 public void Read_EnumContainer ()
640 var r = GetReader ("EnumContainer.xml");
641 Read_EnumContainer (r);
645 public void Read_CollectionContentProperty ()
647 var r = GetReader ("CollectionContentProperty.xml");
648 Read_CollectionContentProperty (r, false);
652 public void Read_CollectionContentProperty2 ()
655 var r = GetReader ("CollectionContentProperty2.xml");
656 Read_CollectionContentProperty (r, true);
660 public void Read_CollectionContentPropertyX ()
662 var r = GetReader ("CollectionContentPropertyX.xml");
663 Read_CollectionContentPropertyX (r, false);
667 public void Read_CollectionContentPropertyX2 ()
669 var r = GetReader ("CollectionContentPropertyX2.xml");
670 Read_CollectionContentPropertyX (r, true);
674 public void Read_AmbientPropertyContainer ()
676 var r = GetReader ("AmbientPropertyContainer.xml");
677 Read_AmbientPropertyContainer (r, false);
681 public void Read_AmbientPropertyContainer2 ()
683 var r = GetReader ("AmbientPropertyContainer2.xml");
684 Read_AmbientPropertyContainer (r, true);
688 public void Read_NullableContainer ()
690 var r = GetReader ("NullableContainer.xml");
691 Read_NullableContainer (r);
694 // It is not really a common test; it just makes use of base helper methods.
696 public void Read_DirectListContainer ()
698 var r = GetReader ("DirectListContainer.xml");
699 Read_DirectListContainer (r);
702 // It is not really a common test; it just makes use of base helper methods.
704 public void Read_DirectDictionaryContainer ()
706 var r = GetReader ("DirectDictionaryContainer.xml");
707 Read_DirectDictionaryContainer (r);
710 // It is not really a common test; it just makes use of base helper methods.
712 public void Read_DirectDictionaryContainer2 ()
714 var r = GetReader ("DirectDictionaryContainer2.xml");
715 Read_DirectDictionaryContainer2 (r);
719 public void Read_ContentPropertyContainer ()
721 var r = GetReader ("ContentPropertyContainer.xml");
722 Read_ContentPropertyContainer (r);
725 #region non-common tests
727 public void Bug680385 ()
729 XamlServices.Load ("Test/XmlFiles/CurrentVersion.xaml");