Merge pull request #704 from jgagnon/master
[mono.git] / mcs / class / System.Xaml / Test / System.Xaml / XamlObjectReaderTest.cs
index 88724154d4e339fc6eff7837cb5324883a647b66..d8fc2cd6c756bb102e73bd72b154db7e266424c5 100755 (executable)
@@ -144,6 +144,16 @@ namespace MonoTests.System.Xaml
                        Skip2 (r);
                }
 
+               [Test]
+               public void Skip3 ()
+               {
+                       var r = new XamlObjectReader (new ReadOnlyPropertyContainer () { Foo = "x" });
+                       while (r.NodeType != XamlNodeType.StartMember)
+                               r.Read ();
+                       r.Skip ();
+                       Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#1");
+               }
+
                [Test]
                public void Read_XmlDocument ()
                {
@@ -553,7 +563,6 @@ namespace MonoTests.System.Xaml
                }
                
                [Test]
-               [Category ("NotWorking")]
                public void Read_NamedItems ()
                {
                        // foo
@@ -571,7 +580,6 @@ namespace MonoTests.System.Xaml
                }
 
                [Test]
-               [Category ("NotWorking")]
                public void Read_NamedItems2 ()
                {
                        // i1
@@ -591,5 +599,157 @@ namespace MonoTests.System.Xaml
                        var xr = new XamlObjectReader (obj);
                        Read_NamedItems2 (xr, true);
                }
+
+               [Test]
+               public void Read_XmlSerializableWrapper ()
+               {
+                       var obj = new XmlSerializableWrapper (new XmlSerializable ("<root/>"));
+                       var xr = new XamlObjectReader (obj);
+                       Read_XmlSerializableWrapper (xr, true);
+               }
+
+               [Test] // If it is root, it is not serialized as IXmlSerializable.
+               public void Read_XmlSerializable ()
+               {
+                       var obj = new XmlSerializable ("<root/>");
+                       var xr = new XamlObjectReader (obj);
+                       Read_XmlSerializable (xr);
+               }
+
+               [Test] // List contents are (sort of) treated as top-level too, so it is not serialized as IXmlSerializable(!)
+               public void Read_ListXmlSerializable ()
+               {
+                       var obj = new List<XmlSerializable> ();
+                       obj.Add (new XmlSerializable ("<root/>"));
+                       var xr = new XamlObjectReader (obj);
+                       Read_ListXmlSerializable (xr);
+               }
+               
+               [Test]
+               public void Read_AttachedProperty ()
+               {
+                       var obj = new AttachedWrapper ();
+                       Attachable.SetFoo (obj, "x");
+                       Attachable.SetFoo (obj.Value, "y");
+                       try {
+                               var xr = new XamlObjectReader (obj);
+                               Read_AttachedProperty (xr);
+                       } finally {
+                               Attachable.SetFoo (obj, null);
+                               Attachable.SetFoo (obj.Value, null);
+                       }
+               }
+               
+               [Test]
+               [Ignore ("Foo does not work as attached properties in this test yet")]
+               public void Read_AttachedProperty2 ()
+               {
+                       var obj = new AttachedWrapper2 ();
+                       AttachedWrapper2.SetFoo (obj, "x");
+                       AttachedWrapper2.SetFoo (obj.Value, "y");
+                       try {
+                               var xr = new XamlObjectReader (obj);
+//while (xr.Read ()) Console.Error.WriteLine ("{0} {1} {2} {3}", xr.NodeType, xr.Type, xr.Member, xr.Value);
+                       } finally {
+                               AttachedWrapper2.SetFoo (obj, null);
+                               AttachedWrapper2.SetFoo (obj.Value, null);
+                       }
+               }
+
+               [Test]
+               public void Read_AbstractContainer ()
+               {
+                       var obj = new AbstractContainer () { Value2 = new DerivedObject () { Foo = "x" } };
+                       var xr = new XamlObjectReader (obj);
+                       while (!xr.IsEof)
+                               xr.Read ();
+               }
+
+               [Test]
+               public void Read_ReadOnlyPropertyContainer ()
+               {
+                       var obj = new ReadOnlyPropertyContainer () { Foo = "x" };
+                       var xr = new XamlObjectReader (obj);
+                       var xt = xr.SchemaContext.GetXamlType (obj.GetType ());
+                       while (xr.Read ())
+                               if (xr.NodeType == XamlNodeType.StartMember)
+                                       break;
+                       Assert.AreEqual (xt.GetMember ("Foo"), xr.Member, "#1");
+                       while (!xr.IsEof)
+                               xr.Read ();
+               }
+
+               [Test]
+               public void Read_TypeConverterOnListMember ()
+               {
+                       var obj = new SecondTest.TypeOtherAssembly ();
+                       obj.Values.AddRange (new uint? [] {1, 2, 3});
+                       var xr = new XamlObjectReader (obj);
+                       Read_TypeConverterOnListMember (xr);
+               }
+
+               [Test]
+               public void Read_EnumContainer ()
+               {
+                       var obj = new EnumContainer () { EnumProperty = EnumValueType.Two };
+                       var xr = new XamlObjectReader (obj);
+                       Read_EnumContainer (xr);
+               }
+
+               [Test]
+               public void Read_CollectionContentProperty ()
+               {
+                       var obj = new CollectionContentProperty ();
+                       for (int i = 0; i < 4; i++)
+                               obj.ListOfItems.Add (new SimpleClass ());
+                       var xr = new XamlObjectReader (obj);
+                       Read_CollectionContentProperty (xr, false);
+               }
+
+               [Test]
+               public void Read_CollectionContentPropertyX ()
+               {
+                       var obj = new CollectionContentPropertyX ();
+                       var l = new List<object> ();
+                       obj.ListOfItems.Add (l);
+                       for (int i = 0; i < 4; i++)
+                               l.Add (new SimpleClass ());
+                       var xr = new XamlObjectReader (obj);
+                       Read_CollectionContentPropertyX (xr, false);
+               }
+
+               [Test]
+               [Category ("NotWorking")] // only member ordering difference, maybe.
+               public void Read_AmbientPropertyContainer ()
+               {
+                       var obj = new SecondTest.ResourcesDict ();
+                       var t1 = new SecondTest.TestObject ();
+                       obj.Add ("TestDictItem", t1);
+                       var t2 = new SecondTest.TestObject ();
+                       t2.TestProperty = t1;
+                       obj.Add ("okay", t2);
+                       var xr = new XamlObjectReader (obj);
+                       Read_AmbientPropertyContainer (xr, false);
+               }
+
+               [Test]
+               [Category ("NotWorking")] // only member ordering difference, maybe.
+               public void Read_AmbientPropertyContainer2 ()
+               {
+                       var obj = new SecondTest.ResourcesDict ();
+                       var t1 = new SecondTest.TestObject ();
+                       obj.Add ("TestDictItem", t1);
+                       obj.Add ("okay", new SecondTest.ResourceExtension (t1));
+                       var xr = new XamlObjectReader (obj);
+                       Read_AmbientPropertyContainer (xr, true);
+               }
+
+               [Test]
+               public void Read_NullableContainer ()
+               {
+                       var obj = new NullableContainer () { TestProp = 5 };
+                       var xr = new XamlObjectReader (obj);
+                       Read_NullableContainer (xr);
+               }
        }
 }