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;
29 using System.Reflection;
30 using System.Windows.Markup;
32 using System.Xaml.Schema;
34 using NUnit.Framework;
36 using CategoryAttribute = NUnit.Framework.CategoryAttribute;
38 namespace MonoTests.System.Xaml
41 public partial class XamlObjectReaderTest : XamlReaderTestBase
44 public void ConstructorNullObject ()
47 new XamlObjectReader (null);
51 [ExpectedException (typeof (ArgumentNullException))]
52 public void ConstructorNullSchemaContext ()
54 new XamlObjectReader ("foo", (XamlSchemaContext) null);
58 public void ConstructorNullSettings ()
60 new XamlObjectReader ("foo", (XamlObjectReaderSettings) null);
64 [ExpectedException (typeof (ArgumentNullException))]
65 public void ConstructorNullSchemaContext2 ()
67 new XamlObjectReader ("foo", null, new XamlObjectReaderSettings ());
71 public void ConstructorNullSettings2 ()
73 new XamlObjectReader ("foo", new XamlSchemaContext (null, null), null);
77 [ExpectedException (typeof (XamlObjectReaderException))]
78 public void ReadNonConstructible ()
80 // XamlType has no default constructor.
81 new XamlObjectReader (XamlLanguage.String);
85 [ExpectedException (typeof (XamlObjectReaderException))]
86 public void NonPublicType ()
88 new XamlObjectReader (new TestClass1 ());
92 [ExpectedException (typeof (XamlObjectReaderException))]
93 public void NestedType ()
95 new XamlObjectReader (new TestClass2 ());
98 public class TestClass2
103 public void ConstructibleType ()
105 new XamlObjectReader (new TestClass3 ());
108 // Based on Common tests
111 public void Read_String ()
113 var r = new XamlObjectReader ("foo");
118 public void WriteNullMemberAsObject ()
120 var r = new XamlObjectReader (new TestClass4 ());
121 WriteNullMemberAsObject (r, delegate {
122 Assert.IsNull (r.Instance, "#x"); }
127 public void StaticMember ()
129 var r = new XamlObjectReader (new TestClass5 ());
136 var r = new XamlObjectReader ("Foo");
143 var r = new XamlObjectReader ("Foo");
148 public void Read_XmlDocument ()
150 var doc = new XmlDocument ();
151 doc.LoadXml ("<root xmlns='urn:foo'><elem attr='val' /></root>");
152 var r = new XamlObjectReader (doc);
153 Read_XmlDocument (r);
157 public void Read_NonPrimitive ()
159 var r = new XamlObjectReader (new TestClass3 ());
160 Read_NonPrimitive (r);
164 public void Read_Type ()
166 var r = new XamlObjectReader (typeof (int));
167 Read_TypeOrTypeExtension (r);
171 public void Read_TypeExtension ()
173 var tx = new TypeExtension (typeof (int));
174 var r = new XamlObjectReader (tx);
175 Read_TypeOrTypeExtension (r);
178 void Read_TypeOrTypeExtension (XamlObjectReader r)
180 Read_TypeOrTypeExtension (r, delegate {
181 Assert.IsTrue (r.Instance is TypeExtension, "#26");
182 }, XamlLanguage.PositionalParameters);
186 public void Read_Type2 ()
188 var r = new XamlObjectReader (typeof (TestClass1));
189 Read_TypeOrTypeExtension2 (r);
193 public void Read_TypeExtension2 ()
195 var r = new XamlObjectReader (new TypeExtension (typeof (TestClass1)));
196 Read_TypeOrTypeExtension2 (r);
199 void Read_TypeOrTypeExtension2 (XamlObjectReader r)
201 Read_TypeOrTypeExtension2 (r, delegate {
202 Assert.IsTrue (r.Instance is TypeExtension, "#26");
203 }, XamlLanguage.PositionalParameters);
207 public void Read_Reference ()
209 var r = new XamlObjectReader (new Reference ("FooBar"));
214 public void Read_Null ()
216 var r = new XamlObjectReader (null);
217 Read_NullOrNullExtension (r, (object) null);
221 public void Read_NullExtension ()
223 var o = new NullExtension ();
224 var r = new XamlObjectReader (o);
225 Read_NullOrNullExtension (r, o);
228 void Read_NullOrNullExtension (XamlObjectReader r, object instance)
230 Read_NullOrNullExtension (r, delegate {
231 Assert.AreEqual (instance, r.Instance, "#26"); // null and NullExtension are different here.
236 public void Read_StaticExtension ()
238 var r = new XamlObjectReader (new StaticExtension ("FooBar"));
239 Read_StaticExtension (r, XamlLanguage.PositionalParameters);
243 public void Read_ListInt32 ()
245 var obj = new List<int> (new int [] {5, -3, int.MaxValue, 0});
246 Read_ListInt32 (obj);
250 public void Read_ListInt32_2 ()
252 var obj = new List<int> (new int [0]);
253 Read_ListInt32 (obj);
256 void Read_ListInt32 (List<int> obj)
258 var r = new XamlObjectReader (obj);
259 Read_ListInt32 (r, delegate {
260 Assert.AreEqual (obj, r.Instance, "#26");
265 public void Read_ListType ()
267 var obj = new List<Type> (new Type [] {typeof (int), typeof (Dictionary<Type, XamlType>)}) { Capacity = 2 };
268 var r = new XamlObjectReader (obj);
269 Read_ListType (r, true);
273 public void Read_ListArray ()
275 var obj = new List<Array> (new Array [] { new int [] { 1,2,3}, new string [] { "foo", "bar", "baz" }}) { Capacity = 2 };
276 var r = new XamlObjectReader (obj);
281 public void Read_ArrayList ()
283 var obj = new ArrayList (new int [] {5, -3, 0});
284 var r = new XamlObjectReader (obj);
289 public void Read_Array ()
291 var obj = new int [] {5, -3, 0};
292 var r = new XamlObjectReader (obj);
293 Read_ArrayOrArrayExtension (r, obj);
297 public void Read_ArrayExtension ()
299 var obj = new ArrayExtension (new int [] {5, -3, 0});
300 var r = new XamlObjectReader (obj);
301 Read_ArrayOrArrayExtension (r, obj);
305 public void Read_MyArrayExtension ()
307 var obj = new MyArrayExtension (new int [] {5, -3, 0});
308 var r = new XamlObjectReader (obj);
309 Read_ArrayOrArrayExtensionOrMyArrayExtension (r, obj, typeof (MyArrayExtension));
312 void Read_ArrayOrArrayExtension (XamlObjectReader r, object instance)
314 Read_ArrayOrArrayExtensionOrMyArrayExtension (r, instance, typeof (ArrayExtension));
317 void Read_ArrayOrArrayExtensionOrMyArrayExtension (XamlObjectReader r, object instance, Type extType)
319 Read_ArrayOrArrayExtensionOrMyArrayExtension (r, delegate {
320 Assert.AreEqual (instance, r.Instance, "#26"); // different between Array and ArrayExtension. Also, different from Type and TypeExtension (Type returns TypeExtension, while Array remains to return Array)
325 public void Read_ArrayExtension2 ()
327 var r = new XamlObjectReader (new ArrayExtension (typeof (int)));
328 Read_ArrayExtension2 (r);
332 public void Read_DateTime ()
334 var obj = new DateTime (2010, 4, 15);
335 var r = new XamlObjectReader (obj);
336 Read_CommonClrType (r, obj);
337 Assert.AreEqual ("2010-04-15", Read_Initialization (r, null), "#1");
341 public void Read_TimeSpan ()
343 Read_CommonXamlPrimitive (TimeSpan.FromMinutes (4));
347 public void Read_Uri ()
349 Read_CommonXamlPrimitive (new Uri ("urn:foo"));
353 public void Read_Guid ()
355 var obj = Guid.NewGuid ();
356 var r = new XamlObjectReader (obj);
357 Assert.IsNotNull (r.SchemaContext.GetXamlType (typeof (Guid)).TypeConverter, "premise#1");
358 Read_CommonClrType (r, obj);
359 Assert.AreEqual (obj.ToString (), Read_Initialization (r, null), "#1");
363 [ExpectedException (typeof (XamlObjectReaderException))]
364 [Category ("NotWorking")]
365 public void Read_XData ()
367 var r = new XamlObjectReader (new XData () {Text = "xdata text"}); // XmlReader implementation is not visible.
373 public void ReadStandardTypes ()
375 SimpleReadStandardType (new ArrayExtension ());
376 SimpleReadStandardType (new NullExtension ());
377 SimpleReadStandardType (new PropertyDefinition ());
378 SimpleReadStandardType (new Reference ());
379 SimpleReadStandardType (new StaticExtension ());
380 SimpleReadStandardType (new TypeExtension ());
383 void SimpleReadStandardType (object instance)
385 var r = new XamlObjectReader (instance);
391 public void Read_CustomMarkupExtension ()
393 var r = new XamlObjectReader (new MyExtension () { Foo = typeof (int), Bar = "v2", Baz = "v7"});
394 Read_CustomMarkupExtension (r);
398 public void Read_CustomMarkupExtension2 ()
400 var r = new XamlObjectReader (new MyExtension2 () { Foo = typeof (int), Bar = "v2"});
401 Read_CustomMarkupExtension2 (r);
405 public void Read_CustomMarkupExtension3 ()
407 var r = new XamlObjectReader (new MyExtension3 () { Foo = typeof (int), Bar = "v2"});
408 Read_CustomMarkupExtension3 (r);
412 public void Read_CustomMarkupExtension4 ()
414 var r = new XamlObjectReader (new MyExtension4 () { Foo = typeof (int), Bar = "v2"});
415 Read_CustomMarkupExtension4 (r);
419 public void Read_CustomMarkupExtension5 ()
421 // This cannot be written to XamlXmlWriter though...
423 var r = new XamlObjectReader (new MyExtension5 ("foo", "bar"));
424 Read_CustomMarkupExtension5 (r);
428 public void Read_CustomMarkupExtension6 ()
430 var r = new XamlObjectReader (new MyExtension6 ("foo"));
431 Read_CustomMarkupExtension6 (r);
435 public void Read_ArgumentAttributed ()
437 var obj = new ArgumentAttributed ("foo", "bar");
438 var r = new XamlObjectReader (obj);
439 Read_ArgumentAttributed (r, obj);
443 public void Read_Dictionary ()
445 var obj = new Dictionary<string,object> ();
448 var r = new XamlObjectReader (obj);
453 public void Read_Dictionary2 ()
455 var obj = new Dictionary<string,Type> ();
456 obj ["Foo"] = typeof (int);
457 obj ["Bar"] = typeof (Dictionary<Type,XamlType>);
458 var r = new XamlObjectReader (obj);
459 Read_Dictionary2 (r, XamlLanguage.PositionalParameters);
463 public void PositionalParameters1 ()
465 // Note: this can be read, but cannot be written to XML.
466 var obj = new PositionalParametersClass1 ("foo", 5);
467 var r = new XamlObjectReader (obj);
468 PositionalParameters1 (r);
472 public void PositionalParameters2 ()
474 var obj = new PositionalParametersWrapper ("foo", 5);
475 var r = new XamlObjectReader (obj);
476 PositionalParameters2 (r);
480 public void ComplexPositionalParameters ()
482 var obj = new ComplexPositionalParameterWrapper () { Param = new ComplexPositionalParameterClass (new ComplexPositionalParameterValue () { Foo = "foo" })};
483 var r = new XamlObjectReader (obj);
484 ComplexPositionalParameters (r);
488 public void Read_ListWrapper ()
490 var obj = new ListWrapper (new List<int> (new int [] {5, -3, 0}));
491 var r = new XamlObjectReader (obj);
492 Read_ListWrapper (r);
496 public void Read_ListWrapper2 () // read-write list member.
498 var obj = new ListWrapper2 (new List<int> (new int [] {5, -3, 0}));
499 var r = new XamlObjectReader (obj);
500 Read_ListWrapper2 (r);
504 public void Read_ContentIncluded ()
506 var obj = new ContentIncludedClass () { Content = "foo" };
507 var r = new XamlObjectReader (obj);
508 Read_ContentIncluded (r);
512 public void Read_PropertyDefinition ()
514 var obj = new PropertyDefinition () { Modifier = "protected", Name = "foo", Type = XamlLanguage.String };
515 var r = new XamlObjectReader (obj);
516 Read_PropertyDefinition (r);
520 public void Read_StaticExtensionWrapper ()
522 var obj = new StaticExtensionWrapper () { Param = new StaticExtension ("StaticExtensionWrapper.Foo") };
523 var r = new XamlObjectReader (obj);
524 Read_StaticExtensionWrapper (r);
528 public void Read_TypeExtensionWrapper ()
530 var obj = new TypeExtensionWrapper () { Param = new TypeExtension ("Foo") };
531 var r = new XamlObjectReader (obj);
532 Read_TypeExtensionWrapper (r);