Attachable property setter was not working with XamlObjectWriter.
[mono.git] / mcs / class / System.Xaml / Test / System.Xaml / XamlMemberTest.cs
index 2498dd3f074960c69556ef0a08a70156d66671ae..f4023dd9767adf065c9fa71eea03a41f113cf2c4 100755 (executable)
@@ -24,8 +24,10 @@ using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.ComponentModel;
+using System.Linq;
 using System.Reflection;
 using System.Text;
+using System.Windows.Markup;
 using System.Xaml;
 using System.Xaml.Schema;
 using NUnit.Framework;
@@ -232,7 +234,7 @@ namespace MonoTests.System.Xaml
                        Assert.AreEqual (new XamlType (typeof (string), sctx), m.TargetType, "#10");
                        Assert.IsNotNull (m.Type, "#11");
                        Assert.AreEqual (typeof (int), m.Type.UnderlyingType, "#11-2");
-//                     Assert.IsNotNull (m.TypeConverter, "#12");
+                       Assert.IsNotNull (m.TypeConverter, "#12");
                        Assert.IsNull (m.ValueSerializer, "#13");
                        Assert.IsNull (m.DeferringLoader, "#14");
                        Assert.AreEqual (str_len, m.UnderlyingMember, "#15");
@@ -360,7 +362,7 @@ namespace MonoTests.System.Xaml
                        Assert.AreEqual (new XamlType (typeof (string), sctx), m.TargetType, "#10");
                        Assert.IsNotNull (m.Type, "#11");
                        Assert.AreEqual (typeof (object), m.Type.UnderlyingType, "#11-2");
-//                     Assert.IsNull (m.TypeConverter, "#12");
+                       Assert.IsNull (m.TypeConverter, "#12");
                        Assert.IsNull (m.ValueSerializer, "#13");
                        Assert.IsNull (m.DeferringLoader, "#14");
                        Assert.IsNull (m.UnderlyingMember, "#15");
@@ -374,34 +376,54 @@ namespace MonoTests.System.Xaml
                        Assert.IsFalse (m.IsAmbient, "#22");
                }
 
-               class MyXamlMember : XamlMember
+               [Test]
+               public void UnderlyingMember ()
                {
-                       public MyXamlMember (PropertyInfo pi, XamlSchemaContext sc)
-                               : base (pi, sc)
-                       {
-                       }
-
-                       public MyXamlMember (EventInfo ei, XamlSchemaContext sc)
-                               : base (ei, sc)
-                       {
-                       }
-
-                       public MyXamlMember (string name, MethodInfo getter, MethodInfo setter, XamlSchemaContext sc)
-                               : base (name, getter, setter, sc)
-                       {
-                       }
+                       Assert.IsTrue (new XamlMember (ass_load, sctx).UnderlyingMember is EventInfo, "#1");
+                       Assert.IsTrue (new XamlMember (str_len, sctx).UnderlyingMember is PropertyInfo, "#2");
+                       Assert.AreEqual (dummy_get, new XamlMember ("DummyProp", dummy_get, dummy_set, sctx).UnderlyingMember, "#3");
+                       Assert.AreEqual (dummy_add, new XamlMember ("DummyAddMethod", dummy_add, sctx).UnderlyingMember, "#4");
+                       Assert.IsNull (new XamlMember ("Length", new XamlType (typeof (string), sctx), false).UnderlyingMember, "#5");
+               }
 
-                       public MemberInfo UnderlyingMember {
-                               get { return LookupUnderlyingMember (); }
-                       }
+               [Test]
+               public void EqualsTest ()
+               {
+                       XamlMember m;
+                       var xt = XamlLanguage.Type;
+                       m = new XamlMember ("Type", xt, false);
+                       var type_type = xt.GetMember ("Type");
+                       Assert.AreNotEqual (m, xt.GetMember ("Type"), "#1"); // whoa!
+                       Assert.AreNotEqual (type_type, m, "#2"); // whoa!
+                       Assert.AreEqual (type_type, xt.GetMember ("Type"), "#3");
+                       Assert.AreEqual (type_type.ToString (), m.ToString (), "#4");
+
+                       Assert.AreEqual (xt.GetAllMembers ().FirstOrDefault (mm => mm.Name == "Type"), xt.GetAllMembers ().FirstOrDefault (mm => mm.Name == "Type"), "#5");
+                       Assert.AreEqual (xt.GetAllMembers ().FirstOrDefault (mm => mm.Name == "Type"), xt.GetMember ("Type"), "#6");
+
+                       // different XamlSchemaContext
+                       Assert.AreNotEqual (m, XamlLanguage.Type.GetMember ("Type"), "#7");
+                       Assert.AreNotEqual (XamlLanguage.Type.GetMember ("Type"), new XamlSchemaContext ().GetXamlType (typeof (Type)).GetMember ("Type"), "#7");
+                       Assert.AreEqual (XamlLanguage.Type.GetMember ("Type"), new XamlSchemaContext ().GetXamlType (typeof (TypeExtension)).GetMember ("Type"), "#8");
                }
 
                [Test]
-               public void UnderlyingMember ()
+               public void ToStringTest ()
                {
-                       Assert.IsTrue (new MyXamlMember (ass_load, sctx).UnderlyingMember is EventInfo, "#1");
-                       Assert.IsTrue (new MyXamlMember (str_len, sctx).UnderlyingMember is PropertyInfo, "#2");
-                       Assert.AreEqual (dummy_get, new MyXamlMember ("DummyProp", dummy_get, dummy_set, sctx).UnderlyingMember, "#3");
+                       Assert.AreEqual ("{http://schemas.microsoft.com/winfx/2006/xaml}_Initialization", XamlLanguage.Initialization.ToString (), "#1");
+
+                       // Wow. Uncomment this, and it will show .NET returns the XamlMember.ToString() results *inconsistently*.
+                       //Assert.AreEqual ("System.Windows.Markup.XData", XamlLanguage.XData.ToString (), "#2pre");
+                       Assert.AreEqual (XamlLanguage.Xaml2006Namespace, XamlLanguage.XData.PreferredXamlNamespace, "#2pre2");
+
+                       Assert.AreEqual ("{http://schemas.microsoft.com/winfx/2006/xaml}XData.Text", XamlLanguage.XData.GetMember ("Text").ToString (), "#2");
+
+                       var pi = typeof (string).GetProperty ("Length");
+                       Assert.AreEqual ("{http://schemas.microsoft.com/winfx/2006/xaml}String.Length", new XamlMember (pi, sctx).ToString (), "#3");
+
+                       Assert.AreEqual ("System.Xaml.XamlSchemaContext.FooBar", new XamlMember ("FooBar", typeof (XamlSchemaContext).GetMethod ("GetPreferredPrefix"), null, sctx).ToString (), "#4");
+
+                       Assert.AreEqual ("{urn:foo}bar", new XamlDirective ("urn:foo", "bar").ToString (), "#5");
                }
        }
 }