Merge pull request #704 from jgagnon/master
[mono.git] / mcs / class / System.Xaml / Test / System.Xaml / XamlObjectReaderTest.cs
index 079a8b10ed6f91280a91b2b48f84d47fe8e829f7..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,9 +563,12 @@ namespace MonoTests.System.Xaml
                }
                
                [Test]
-               [Category ("NotWorking")]
                public void Read_NamedItems ()
                {
+                       // foo
+                       // - bar
+                       // -- foo
+                       // - baz
                        var obj = new NamedItem ("foo");
                        var obj2 = new NamedItem ("bar");
                        obj.References.Add (obj2);
@@ -563,7 +576,180 @@ namespace MonoTests.System.Xaml
                        obj2.References.Add (obj);
 
                        var xr = new XamlObjectReader (obj);
-                       Read_NamedItems (xr);
+                       Read_NamedItems (xr, true);
+               }
+
+               [Test]
+               public void Read_NamedItems2 ()
+               {
+                       // i1
+                       // - i2
+                       // -- i3
+                       // - i4
+                       // -- i3
+                       var obj = new NamedItem2 ("i1");
+                       var obj2 = new NamedItem2 ("i2");
+                       var obj3 = new NamedItem2 ("i3");
+                       var obj4 = new NamedItem2 ("i4");
+                       obj.References.Add (obj2);
+                       obj.References.Add (obj4);
+                       obj2.References.Add (obj3);
+                       obj4.References.Add (obj3);
+
+                       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);
                }
        }
 }