Merge pull request #704 from jgagnon/master
[mono.git] / mcs / class / System.Xaml / Test / System.Xaml / XamlXmlReaderTest.cs
index 9de0417b33b0b328c4d0c603072ba37fb4799286..70b26b87c5ab2dd6d95b4089e92b3016183f0656 100755 (executable)
@@ -45,7 +45,9 @@ namespace MonoTests.System.Xaml
 
                XamlReader GetReader (string filename)
                {
-                       return new XamlXmlReader (XmlReader.Create (Path.Combine ("Test/XmlFiles", filename), new XmlReaderSettings () { CloseInput =true }));
+                       const string ver = "net_4_x";
+                       string xml = File.ReadAllText (Path.Combine ("Test/XmlFiles", filename)).Replace ("net_4_0", ver);
+                       return new XamlXmlReader (XmlReader.Create (new StringReader (xml)));
                }
 
                void ReadTest (string filename)
@@ -55,59 +57,46 @@ namespace MonoTests.System.Xaml
                                r.Read ();
                }
 
-               T LoadTest<T> (string filename)
+               [Test]
+               public void SchemaContext ()
                {
-                       Type type = typeof (T);
-                       var obj = XamlServices.Load (GetReader (filename));
-                       Assert.AreEqual (type, obj.GetType (), "type");
-                       return (T) obj;
+                       Assert.AreNotEqual (XamlLanguage.Type.SchemaContext, new XamlXmlReader (XmlReader.Create (new StringReader ("<root/>"))).SchemaContext, "#1");
                }
 
                [Test]
                public void Read_Int32 ()
                {
                        ReadTest ("Int32.xml");
-                       var ret = LoadTest<int> ("Int32.xml");
-                       Assert.AreEqual (5, ret, "ret");
                }
 
                [Test]
                public void Read_DateTime ()
                {
                        ReadTest ("DateTime.xml");
-                       var ret = LoadTest<DateTime> ("DateTime.xml");
-                       Assert.AreEqual (new DateTime (2010, 4, 14), ret, "ret");
                }
 
                [Test]
                public void Read_TimeSpan ()
                {
                        ReadTest ("TimeSpan.xml");
-                       var ret = LoadTest<TimeSpan> ("TimeSpan.xml");
-                       Assert.AreEqual (TimeSpan.FromMinutes (7), ret, "ret");
                }
 
                [Test]
                public void Read_ArrayInt32 ()
                {
                        ReadTest ("Array_Int32.xml");
-                       var ret = LoadTest<int[]> ("Array_Int32.xml");
-                       Assert.AreEqual (5, ret.Length, "#1");
-                       Assert.AreEqual (2147483647, ret [4], "#2");
                }
 
                [Test]
                public void Read_DictionaryInt32String ()
                {
                        ReadTest ("Dictionary_Int32_String.xml");
-                       //LoadTest<Dictionary<int,string>> ("Dictionary_Int32_String.xml");
                }
 
                [Test]
                public void Read_DictionaryStringType ()
                {
                        ReadTest ("Dictionary_String_Type.xml");
-                       //LoadTest<Dictionary<string,Type>> ("Dictionary_String_Type.xml");
                }
 
                [Test]
@@ -120,16 +109,12 @@ namespace MonoTests.System.Xaml
                public void Read_Guid ()
                {
                        ReadTest ("Guid.xml");
-                       var ret = LoadTest<Guid> ("Guid.xml");
-                       Assert.AreEqual (Guid.Parse ("9c3345ec-8922-4662-8e8d-a4e41f47cf09"), ret, "ret");
                }
 
                [Test]
                public void Read_GuidFactoryMethod ()
                {
                        ReadTest ("GuidFactoryMethod.xml");
-                       //var ret = LoadTest<Guid> ("GuidFactoryMethod.xml");
-                       //Assert.AreEqual (Guid.Parse ("9c3345ec-8922-4662-8e8d-a4e41f47cf09"), ret, "ret");
                }
 
                [Test]
@@ -260,17 +245,72 @@ namespace MonoTests.System.Xaml
                        Assert.IsFalse (r.Read (), "end");
                }
 
+               [Test]
+               public void ReadEventStore ()
+               {
+                       var r = GetReader ("EventStore2.xml");
+
+                       var xt = r.SchemaContext.GetXamlType (typeof (EventStore));
+                       var xm = xt.GetMember ("Event1");
+                       Assert.IsNotNull (xt, "premise#1");
+                       Assert.IsNotNull (xm, "premise#2");
+                       Assert.IsTrue (xm.IsEvent, "premise#3");
+                       while (true) {
+                               r.Read ();
+                               if (r.Member != null && r.Member.IsEvent)
+                                       break;
+                               if (r.IsEof)
+                                       Assert.Fail ("Items did not appear");
+                       }
+
+                       Assert.AreEqual (xm, r.Member, "#x1");
+                       Assert.AreEqual ("Event1", r.Member.Name, "#x2");
+
+                       Assert.IsTrue (r.Read (), "#x11");
+                       Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#x12");
+                       Assert.AreEqual ("Method1", r.Value, "#x13");
+
+                       Assert.IsTrue (r.Read (), "#x21");
+                       Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#x22");
+
+                       xm = xt.GetMember ("Event2");
+                       Assert.IsTrue (r.Read (), "#x31");
+                       Assert.AreEqual (xm, r.Member, "#x32");
+                       Assert.AreEqual ("Event2", r.Member.Name, "#x33");
+
+                       Assert.IsTrue (r.Read (), "#x41");
+                       Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#x42");
+                       Assert.AreEqual ("Method2", r.Value, "#x43");
+
+                       Assert.IsTrue (r.Read (), "#x51");
+                       Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#x52");
+
+                       Assert.IsTrue (r.Read (), "#x61");
+                       Assert.AreEqual ("Event1", r.Member.Name, "#x62");
+
+                       Assert.IsTrue (r.Read (), "#x71");
+                       Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#x72");
+                       Assert.AreEqual ("Method3", r.Value, "#x73"); // nonexistent, but no need to raise an error.
+
+                       Assert.IsTrue (r.Read (), "#x81");
+                       Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#x82");
+
+                       while (!r.IsEof)
+                               r.Read ();
+
+                       r.Close ();
+               }
+
+               // common XamlReader tests.
+
                [Test]
                public void Read_String ()
                {
                        var r = GetReader ("String.xml");
                        Read_String (r);
-                       var ret = LoadTest<string> ("String.xml");
-                       Assert.AreEqual ("foo", ret, "ret");
                }
 
                [Test]
-               [Category ("NotWorking")]
                public void WriteNullMemberAsObject ()
                {
                        var r = GetReader ("TestClass4.xml");
@@ -278,7 +318,6 @@ namespace MonoTests.System.Xaml
                }
                
                [Test]
-               [Category ("NotWorking")]
                public void StaticMember ()
                {
                        var r = GetReader ("TestClass5.xml");
@@ -310,7 +349,6 @@ namespace MonoTests.System.Xaml
                }
 
                [Test]
-               [Category ("NotWorking")]
                public void Read_NonPrimitive ()
                {
                        var r = GetReader ("NonPrimitive.xml");
@@ -318,7 +356,6 @@ namespace MonoTests.System.Xaml
                }
                
                [Test]
-               [Category ("NotWorking")]
                public void Read_TypeExtension ()
                {
                        var r = GetReader ("Type.xml");
@@ -326,7 +363,6 @@ namespace MonoTests.System.Xaml
                }
                
                [Test]
-               [Category ("NotWorking")]
                public void Read_Type2 ()
                {
                        var r = GetReader ("Type2.xml");
@@ -338,8 +374,6 @@ namespace MonoTests.System.Xaml
                {
                        var r = GetReader ("Reference.xml");
                        Read_Reference (r);
-                       var ret = XamlServices.Load (GetReader ("Reference.xml"));
-                       Assert.IsNotNull (ret, "#1"); // the returned value is however not a Reference (in .NET 4.0 it is MS.Internal.Xaml.Context.NameFixupToken).
                }
                
                [Test]
@@ -347,11 +381,9 @@ namespace MonoTests.System.Xaml
                {
                        var r = GetReader ("NullExtension.xml");
                        Read_NullOrNullExtension (r, null);
-                       Assert.IsNull (XamlServices.Load (GetReader ("NullExtension.xml")));
                }
                
                [Test]
-               [Category ("NotWorking")]
                public void Read_StaticExtension ()
                {
                        var r = GetReader ("StaticExtension.xml");
@@ -363,9 +395,6 @@ namespace MonoTests.System.Xaml
                {
                        var r = GetReader ("List_Int32.xml");
                        Read_ListInt32 (r, null, new int [] {5, -3, int.MaxValue, 0}.ToList ());
-                       var ret = LoadTest<List<int>> ("List_Int32.xml");
-                       Assert.AreEqual (4, ret.Count, "#1");
-                       Assert.AreEqual (2147483647, ret [2], "#2");
                }
                
                [Test]
@@ -374,6 +403,20 @@ namespace MonoTests.System.Xaml
                        var r = GetReader ("List_Int32_2.xml");
                        Read_ListInt32 (r, null, new int [0].ToList ());
                }
+               
+               [Test]
+               public void Read_ListType ()
+               {
+                       var r = GetReader ("List_Type.xml");
+                       Read_ListType (r, false);
+               }
+
+               [Test]
+               public void Read_ListArray ()
+               {
+                       var r = GetReader ("List_Array.xml");
+                       Read_ListArray (r);
+               }
 
                [Test]
                public void Read_ArrayList ()
@@ -390,7 +433,6 @@ namespace MonoTests.System.Xaml
                }
                
                [Test]
-               [Category ("NotWorking")]
                public void Read_MyArrayExtension ()
                {
                        var r = GetReader ("MyArrayExtension.xml");
@@ -405,7 +447,6 @@ namespace MonoTests.System.Xaml
                }
 
                [Test]
-               [Category ("NotWorking")]
                public void Read_CustomMarkupExtension ()
                {
                        var r = GetReader ("MyExtension.xml");
@@ -441,7 +482,14 @@ namespace MonoTests.System.Xaml
                }
 
                [Test]
-               [Category ("NotWorking")]
+               public void Read_ArgumentAttributed ()
+               {
+                       var obj = new ArgumentAttributed ("foo", "bar");
+                       var r = GetReader ("ArgumentAttributed.xml");
+                       Read_ArgumentAttributed (r, obj);
+               }
+
+               [Test]
                public void Read_Dictionary ()
                {
                        var obj = new Dictionary<string,object> ();
@@ -452,7 +500,6 @@ namespace MonoTests.System.Xaml
                }
                
                [Test]
-               [Category ("NotWorking")]
                public void Read_Dictionary2 ()
                {
                        var obj = new Dictionary<string,Type> ();
@@ -463,7 +510,6 @@ namespace MonoTests.System.Xaml
                }
                
                [Test]
-               [Category ("NotWorking")]
                public void PositionalParameters2 ()
                {
                        var r = GetReader ("PositionalParametersWrapper.xml");
@@ -504,5 +550,180 @@ namespace MonoTests.System.Xaml
                        var r = GetReader ("PropertyDefinition.xml");
                        Read_PropertyDefinition (r);
                }
+
+               [Test]
+               public void Read_StaticExtensionWrapper ()
+               {
+                       var r = GetReader ("StaticExtensionWrapper.xml");
+                       Read_StaticExtensionWrapper (r);
+               }
+
+               [Test]
+               public void Read_TypeExtensionWrapper ()
+               {
+                       var r = GetReader ("TypeExtensionWrapper.xml");
+                       Read_TypeExtensionWrapper (r);
+               }
+
+               [Test]
+               public void Read_NamedItems ()
+               {
+                       var r = GetReader ("NamedItems.xml");
+                       Read_NamedItems (r, false);
+               }
+
+               [Test]
+               public void Read_NamedItems2 ()
+               {
+                       var r = GetReader ("NamedItems2.xml");
+                       Read_NamedItems2 (r, false);
+               }
+
+               [Test]
+               public void Read_XmlSerializableWrapper ()
+               {
+                       var r = GetReader ("XmlSerializableWrapper.xml");
+                       Read_XmlSerializableWrapper (r, false);
+               }
+
+               [Test]
+               public void Read_XmlSerializable ()
+               {
+                       var r = GetReader ("XmlSerializable.xml");
+                       Read_XmlSerializable (r);
+               }
+
+               [Test]
+               public void Read_ListXmlSerializable ()
+               {
+                       var r = GetReader ("List_XmlSerializable.xml");
+                       Read_ListXmlSerializable (r);
+               }
+
+               [Test]
+               public void Read_AttachedProperty ()
+               {
+                       var r = GetReader ("AttachedProperty.xml");
+                       Read_AttachedProperty (r);
+               }
+
+               [Test]
+               public void Read_AbstractWrapper ()
+               {
+                       var r = GetReader ("AbstractContainer.xml");
+                       while (!r.IsEof)
+                               r.Read ();
+               }
+
+               [Test]
+               public void Read_ReadOnlyPropertyContainer ()
+               {
+                       var r = GetReader ("ReadOnlyPropertyContainer.xml");
+                       while (!r.IsEof)
+                               r.Read ();
+               }
+
+               [Test]
+               public void Read_TypeConverterOnListMember ()
+               {
+                       var r = GetReader ("TypeConverterOnListMember.xml");
+                       Read_TypeConverterOnListMember (r);
+               }
+
+               [Test]
+               public void Read_EnumContainer ()
+               {
+                       var r = GetReader ("EnumContainer.xml");
+                       Read_EnumContainer (r);
+               }
+
+               [Test]
+               public void Read_CollectionContentProperty ()
+               {
+                       var r = GetReader ("CollectionContentProperty.xml");
+                       Read_CollectionContentProperty (r, false);
+               }
+
+               [Test]
+               public void Read_CollectionContentProperty2 ()
+               {
+                       // bug #681835
+                       var r = GetReader ("CollectionContentProperty2.xml");
+                       Read_CollectionContentProperty (r, true);
+               }
+
+               [Test]
+               public void Read_CollectionContentPropertyX ()
+               {
+                       var r = GetReader ("CollectionContentPropertyX.xml");
+                       Read_CollectionContentPropertyX (r, false);
+               }
+
+               [Test]
+               public void Read_CollectionContentPropertyX2 ()
+               {
+                       var r = GetReader ("CollectionContentPropertyX2.xml");
+                       Read_CollectionContentPropertyX (r, true);
+               }
+
+               [Test]
+               public void Read_AmbientPropertyContainer ()
+               {
+                       var r = GetReader ("AmbientPropertyContainer.xml");
+                       Read_AmbientPropertyContainer (r, false);
+               }
+
+               [Test]
+               public void Read_AmbientPropertyContainer2 ()
+               {
+                       var r = GetReader ("AmbientPropertyContainer2.xml");
+                       Read_AmbientPropertyContainer (r, true);
+               }
+
+               [Test]
+               public void Read_NullableContainer ()
+               {
+                       var r = GetReader ("NullableContainer.xml");
+                       Read_NullableContainer (r);
+               }
+
+               // It is not really a common test; it just makes use of base helper methods.
+               [Test]
+               public void Read_DirectListContainer ()
+               {
+                       var r = GetReader ("DirectListContainer.xml");
+                       Read_DirectListContainer (r);
+               }
+
+               // It is not really a common test; it just makes use of base helper methods.
+               [Test]
+               public void Read_DirectDictionaryContainer ()
+               {
+                       var r = GetReader ("DirectDictionaryContainer.xml");
+                       Read_DirectDictionaryContainer (r);
+               }
+
+               // It is not really a common test; it just makes use of base helper methods.
+               [Test]
+               public void Read_DirectDictionaryContainer2 ()
+               {
+                       var r = GetReader ("DirectDictionaryContainer2.xml");
+                       Read_DirectDictionaryContainer2 (r);
+               }
+               
+               [Test]
+               public void Read_ContentPropertyContainer ()
+               {
+                       var r = GetReader ("ContentPropertyContainer.xml");
+                       Read_ContentPropertyContainer (r);
+               }
+
+               #region non-common tests
+               [Test]
+               public void Bug680385 ()
+               {
+                       XamlServices.Load ("Test/XmlFiles/CurrentVersion.xaml");
+               }
+               #endregion
        }
 }