Merge branch 'sgen-android'
[mono.git] / mcs / class / System.Xaml / Test / System.Xaml / XamlObjectWriterTest.cs
index ceda7bcca9ebe82d956030ab1af7f3b96e6dc71d..958b10a9b468c366f7f13c5eb165ba44ebaf88d6 100755 (executable)
@@ -249,9 +249,6 @@ namespace MonoTests.System.Xaml
                        // passes here, but ...
                        xw.WriteValue ("foo");
                        // rejected here, unlike XamlXmlWriter.
-                       //
-                       // Basically, assume that no content could be written 
-                       // for an object member within XamlObjectWriter.
                        xw.WriteEndMember ();
                }
 
@@ -285,7 +282,6 @@ namespace MonoTests.System.Xaml
 
                [Test]
                [ExpectedException (typeof (XamlDuplicateMemberException))]
-               [Category ("NotWorking")]
                public void DuplicateAssignment2 ()
                {
                        var xw = new XamlObjectWriter (sctx, null);
@@ -337,6 +333,7 @@ namespace MonoTests.System.Xaml
 
                [Test]
                // This behavior is different from XamlXmlWriter. Compare to XamlXmlWriterTest.WriteValueList().
+               [Category ("NotWorking")] // not worthy of passing
                public void WriteValueList ()
                {
                        var xw = new XamlObjectWriter (sctx, null);
@@ -539,7 +536,7 @@ namespace MonoTests.System.Xaml
                }
 
                [Test]
-               [Category ("NotWorking")]
+               [Category ("NotWorking")] // not worthy of passing
                public void StartMemberBeforeNamespace ()
                {
                        var xw = new XamlObjectWriter (sctx, null);
@@ -599,7 +596,6 @@ namespace MonoTests.System.Xaml
                }
 
                [Test]
-               [Category ("NotWorking")]
                public void GetObjectOnIntValue ()
                {
                        var xw = new XamlObjectWriter (sctx, null);
@@ -811,9 +807,18 @@ namespace MonoTests.System.Xaml
                        }
                }
 
+               [Test]
+               public void Write_GuidFactoryMethod ()
+               {
+                       var obj = Guid.Parse ("9c3345ec-8922-4662-8e8d-a4e41f47cf09");
+                       using (var xr = GetReader ("GuidFactoryMethod.xml")) {
+                               var des = XamlServices.Load (xr);
+                               Assert.AreEqual (obj, des, "#1");
+                       }
+               }
+
                [Test]
                [ExpectedException (typeof (XamlObjectWriterException))] // cannot resolve the StaticExtension value.
-               [Category ("NotWorking")]
                public void Write_StaticExtension ()
                {
                        var obj = new StaticExtension ("FooBar");
@@ -888,7 +893,16 @@ namespace MonoTests.System.Xaml
                }
 
                [Test]
-               [Category ("NotWorking")]
+               public void Write_ListArray ()
+               {
+                       var obj = new List<Array> (new Array [] { new int [] { 1,2,3}, new string [] { "foo", "bar", "baz" }}) { Capacity = 2 };
+                       using (var xr = GetReader ("List_Array.xml")) {
+                               var des = (List<Array>) XamlServices.Load (xr);
+                               Assert.AreEqual (obj, des, "#1");
+                       }
+               }
+
+               [Test]
                public void Write_DictionaryInt32String ()
                {
                        var dic = new Dictionary<int,string> ();
@@ -902,7 +916,6 @@ namespace MonoTests.System.Xaml
                }
 
                [Test]
-               [Category ("NotWorking")]
                public void Write_DictionaryStringType ()
                {
                        var dic = new Dictionary<string,Type> ();
@@ -1086,5 +1099,191 @@ namespace MonoTests.System.Xaml
                                Assert.AreEqual (XamlLanguage.String, des.Type, "#3");
                        }
                }
+               
+               [Test]
+               [Ignore ("this still does not give successful deserialization result - should there be any way?")]
+               public void Write_StaticExtensionWrapper ()
+               {
+                       //var obj = new StaticExtensionWrapper () { Param = new StaticExtension ("Foo") };
+                       using (var xr = GetReader ("StaticExtensionWrapper.xml")) {
+                               var des = (StaticExtensionWrapper) XamlServices.Load (xr);
+                               Assert.IsNotNull (des.Param, "#1");
+                               Assert.AreEqual ("Foo", des.Param.Member, "#2");
+                       }
+               }
+               
+               [Test]
+               [Ignore ("this still does not give successful deserialization result - should there be any way?")]
+               public void Write_TypeExtensionWrapper ()
+               {
+                       //var obj = new TypeExtensionWrapper () { Param = new TypeExtension ("Foo") };
+                       using (var xr = GetReader ("TypeExtensionWrapper.xml")) {
+                               var des = (TypeExtensionWrapper) XamlServices.Load (xr);
+                               Assert.IsNotNull (des.Param, "#1");
+                               // TypeName was not serialized into xml, hence deserialized as empty.
+                               Assert.AreEqual (String.Empty, des.Param.TypeName, "#2");
+                       }
+               }
+               
+               [Test]
+               public void Write_NamedItems ()
+               {
+                       // foo
+                       // - bar
+                       // -- foo
+                       // - baz
+                       var obj = new NamedItem ("foo");
+                       var obj2 = new NamedItem ("bar");
+                       obj.References.Add (obj2);
+                       obj.References.Add (new NamedItem ("baz"));
+                       obj2.References.Add (obj);
+
+                       using (var xr = GetReader ("NamedItems.xml")) {
+                               var des = (NamedItem) XamlServices.Load (xr);
+                               Assert.IsNotNull (des, "#1");
+                               Assert.AreEqual (2, des.References.Count, "#2");
+                               Assert.AreEqual (typeof (NamedItem), des.References [0].GetType (), "#3");
+                               Assert.AreEqual (typeof (NamedItem), des.References [1].GetType (), "#4");
+                               Assert.AreEqual (des, des.References [0].References [0], "#5");
+                       }
+               }
+               
+               [Test]
+               public void Write_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);
+
+                       using (var xr = GetReader ("NamedItems2.xml")) {
+                               var des = (NamedItem2) XamlServices.Load (xr);
+                               Assert.IsNotNull (des, "#1");
+                               Assert.AreEqual (2, des.References.Count, "#2");
+                               Assert.AreEqual (typeof (NamedItem2), des.References [0].GetType (), "#3");
+                               Assert.AreEqual (typeof (NamedItem2), des.References [1].GetType (), "#4");
+                               Assert.AreEqual (1, des.References [0].References.Count, "#5");
+                               Assert.AreEqual (1, des.References [1].References.Count, "#6");
+                               Assert.AreEqual (des.References [0].References [0], des.References [1].References [0], "#7");
+                       }
+               }
+
+               [Test]
+               public void Write_XmlSerializableWrapper ()
+               {
+                       var assns = "clr-namespace:MonoTests.System.Xaml;assembly=" + GetType ().Assembly.GetName ().Name;
+                       using (var xr = GetReader ("XmlSerializableWrapper.xml")) {
+                               var des = (XmlSerializableWrapper) XamlServices.Load (xr);
+                               Assert.IsNotNull (des, "#1");
+                               Assert.IsNotNull (des.Value, "#2");
+                               Assert.AreEqual ("<root xmlns=\"" + assns + "\" />", des.Value.GetRaw (), "#3");
+                       }
+               }
+
+               [Test]
+               public void Write_XmlSerializable ()
+               {
+                       using (var xr = GetReader ("XmlSerializable.xml")) {
+                               var des = (XmlSerializable) XamlServices.Load (xr);
+                               Assert.IsNotNull (des, "#1");
+                       }
+               }
+
+               [Test]
+               public void Write_ListXmlSerializable ()
+               {
+                       using (var xr = GetReader ("List_XmlSerializable.xml")) {
+                               var des = (List<XmlSerializable>) XamlServices.Load (xr);
+                               Assert.AreEqual (1, des.Count, "#1");
+                       }
+               }
+
+               [Test]
+               public void Write_AttachedProperty ()
+               {
+                       using (var xr = GetReader ("AttachedProperty.xml")) {
+                               AttachedWrapper des = null;
+                               try {
+                                       des = (AttachedWrapper) XamlServices.Load (xr);
+                                       Assert.IsNotNull (des.Value, "#1");
+                                       Assert.AreEqual ("x", Attachable.GetFoo (des), "#2");
+                                       Assert.AreEqual ("y", Attachable.GetFoo (des.Value), "#3");
+                               } finally {
+                                       if (des != null) {
+                                               Attachable.SetFoo (des, null);
+                                               Attachable.SetFoo (des.Value, null);
+                                       }
+                               }
+                       }
+               }
+
+               [Test]
+               public void Write_EventStore ()
+               {
+                       using (var xr = GetReader ("EventStore.xml")) {
+                               var res = (EventStore) XamlServices.Load (xr);
+                               Assert.AreEqual ("foo", res.Examine (), "#1");
+                               Assert.IsTrue (res.Method1Invoked, "#2");
+                       }
+               }
+
+               [Test]
+               [ExpectedException (typeof (XamlDuplicateMemberException))] // for two occurence of Event1 ...
+               public void Write_EventStore2 ()
+               {
+                       using (var xr = GetReader ("EventStore2.xml")) {
+                               XamlServices.Load (xr);
+                       }
+               }
+
+               [Test]
+               [ExpectedException (typeof (XamlObjectWriterException))] // attaching nonexistent method
+               public void Write_EventStore3 ()
+               {
+                       using (var xr = GetReader ("EventStore3.xml")) {
+                               XamlServices.Load (xr);
+                       }
+               }
+
+               [Test]
+               [Category ("NotWorking")] // type resolution failure.
+               public void Write_EventStore4 ()
+               {
+                       using (var xr = GetReader ("EventStore4.xml")) {
+                               var res = (EventStore2<EventArgs>) XamlServices.Load (xr);
+                               Assert.AreEqual ("foo", res.Examine (), "#1");
+                               Assert.IsTrue (res.Method1Invoked, "#2");
+                       }
+               }
+
+               [Test]
+               public void Write_AbstractWrapper ()
+               {
+                       using (var xr = GetReader ("AbstractContainer.xml")) {
+                               var res = (AbstractContainer) XamlServices.Load (xr);
+                               Assert.IsNull (res.Value1, "#1");
+                               Assert.IsNotNull (res.Value2, "#2");
+                               Assert.AreEqual ("x", res.Value2.Foo, "#3");
+                       }
+               }
+
+               [Test]
+               public void Write_ReadOnlyPropertyContainer ()
+               {
+                       using (var xr = GetReader ("ReadOnlyPropertyContainer.xml")) {
+                               var res = (ReadOnlyPropertyContainer) XamlServices.Load (xr);
+                               Assert.AreEqual ("x", res.Foo, "#1");
+                               Assert.AreEqual ("x", res.Bar, "#2");
+                       }
+               }
        }
 }