Просмотр исходного кода

Add name reference tests to all readers/writers.

Atsushi Eno 15 лет назад
Родитель
Сommit
2dbfcf82b3

+ 18 - 1
mcs/class/System.Xaml/Test/System.Xaml/TestedTypes.cs

@@ -458,7 +458,6 @@ namespace MonoTests.System.Xaml
 		public event Action Run;
 	}
 	
-	// FIXME: test it with XamlXmlWriter, XamlXmlReader and XamlObjectWriter.
 	public class NamedItem
 	{
 		public NamedItem ()
@@ -475,4 +474,22 @@ namespace MonoTests.System.Xaml
 		public string ItemName { get; set; }
 		public IList<NamedItem> References { get; private set; }
 	}
+	
+	[RuntimeNameProperty ("ItemName")]
+	public class NamedItem2
+	{
+		public NamedItem2 ()
+		{
+			References = new List<NamedItem2> ();
+		}
+		
+		public NamedItem2 (string name)
+			: this ()
+		{
+			ItemName = name;
+		}
+		
+		public string ItemName { get; set; }
+		public IList<NamedItem2> References { get; private set; }
+	}
 }

+ 27 - 1
mcs/class/System.Xaml/Test/System.Xaml/XamlObjectReaderTest.cs

@@ -556,6 +556,10 @@ namespace MonoTests.System.Xaml
 		[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 +567,29 @@ namespace MonoTests.System.Xaml
 			obj2.References.Add (obj);
 
 			var xr = new XamlObjectReader (obj);
-			Read_NamedItems (xr);
+			Read_NamedItems (xr, true);
+		}
+
+		[Test]
+		[Category ("NotWorking")]
+		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);
 		}
 	}
 }

+ 54 - 0
mcs/class/System.Xaml/Test/System.Xaml/XamlObjectWriterTest.cs

@@ -1124,5 +1124,59 @@ namespace MonoTests.System.Xaml
 				Assert.AreEqual (String.Empty, des.Param.TypeName, "#2");
 			}
 		}
+		
+		[Test]
+		[Category ("NotWorking")]
+		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]
+		[Category ("NotWorking")]
+		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");
+			}
+		}
 	}
 }

+ 181 - 2
mcs/class/System.Xaml/Test/System.Xaml/XamlReaderTestBase.cs

@@ -1833,7 +1833,7 @@ namespace MonoTests.System.Xaml
 			Assert.IsFalse (r.Read (), "end");
 		}
 
-		protected void Read_NamedItems (XamlReader r)
+		protected void Read_NamedItems (XamlReader r, bool isObjectReader)
 		{
 			Assert.IsTrue (r.Read (), "ns#1-1");
 			Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#1-2");
@@ -1923,7 +1923,10 @@ namespace MonoTests.System.Xaml
 
 			Assert.IsTrue (r.Read (), "smbrd#1");
 			Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "smbrd#2");
-			Assert.AreEqual (XamlLanguage.PositionalParameters, r.Member, "smbrd#3");
+			if (isObjectReader)
+				Assert.AreEqual (XamlLanguage.PositionalParameters, r.Member, "smbrd#3");
+			else
+				Assert.AreEqual (XamlLanguage.Reference.GetMember ("Name"), r.Member, "smbrd#3");
 
 			Assert.IsTrue (r.Read (), "vmbrd#1");
 			Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vmbrd#2");
@@ -1980,6 +1983,182 @@ namespace MonoTests.System.Xaml
 			Assert.IsFalse (r.Read (), "end");
 		}
 
+		protected void Read_NamedItems2 (XamlReader r, bool isObjectReader)
+		{
+			Assert.IsTrue (r.Read (), "ns#1-1");
+			Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#1-2");
+			Assert.IsNotNull (r.Namespace, "ns#1-3");
+			Assert.AreEqual ("", r.Namespace.Prefix, "ns#1-4");
+			Assert.AreEqual ("clr-namespace:MonoTests.System.Xaml;assembly=" + GetType ().Assembly.GetName ().Name, r.Namespace.Namespace, "ns#1-5");
+
+			Assert.IsTrue (r.Read (), "ns#2-1");
+			Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2-2");
+			Assert.IsNotNull (r.Namespace, "ns#2-3");
+			Assert.AreEqual ("x", r.Namespace.Prefix, "ns#2-4");
+			Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#2-5");
+
+			var xt = new XamlType (typeof (NamedItem2), r.SchemaContext);
+
+			// i1
+			Assert.IsTrue (r.Read (), "so1#1");
+			Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so1#2");
+			Assert.AreEqual (xt, r.Type, "so1#3");
+
+			if (r is XamlXmlReader)
+				ReadBase (r);
+
+			Assert.IsTrue (r.Read (), "sm1#1");
+			Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sm1#2");
+			Assert.AreEqual (xt.GetMember ("ItemName"), r.Member, "sm1#3");
+
+			Assert.IsTrue (r.Read (), "v1#1");
+			Assert.AreEqual (XamlNodeType.Value, r.NodeType, "v1#2");
+			Assert.AreEqual ("i1", r.Value, "v1#3");
+
+			Assert.IsTrue (r.Read (), "em1#1");
+			Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "em1#2");
+
+			Assert.IsTrue (r.Read (), "srefs1#1");
+			Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "srefs1#2");
+			Assert.AreEqual (xt.GetMember ("References"), r.Member, "srefs1#3");
+
+			Assert.IsTrue (r.Read (), "go1#1");
+			Assert.AreEqual (XamlNodeType.GetObject, r.NodeType, "go1#2");
+
+			Assert.IsTrue (r.Read (), "sitems1#1");
+			Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sitems1#2");
+			Assert.AreEqual (XamlLanguage.Items, r.Member, "sitems1#3");
+
+			// i2
+			Assert.IsTrue (r.Read (), "so2#1-1");
+			Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so2#1-2");
+			Assert.AreEqual (xt, r.Type, "so2#1-3");
+			Assert.IsTrue (r.Read (), "sm2#1");
+			Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sm2#2");
+			Assert.AreEqual (xt.GetMember ("ItemName"), r.Member, "sm2#3");
+
+			Assert.IsTrue (r.Read (), "v2#1");
+			Assert.AreEqual (XamlNodeType.Value, r.NodeType, "v2#2");
+			Assert.AreEqual ("i2", r.Value, "v2#3");
+
+			Assert.IsTrue (r.Read (), "em2#1");
+			Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "em2#2");
+
+			Assert.IsTrue (r.Read (), "srefs2#1");
+			Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "srefs2#2");
+			Assert.AreEqual (xt.GetMember ("References"), r.Member, "srefs2#3");
+
+			Assert.IsTrue (r.Read (), "go2#1");
+			Assert.AreEqual (XamlNodeType.GetObject, r.NodeType, "go2#2");
+
+			Assert.IsTrue (r.Read (), "sItems1#1");
+			Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sItems1#2");
+			Assert.AreEqual (XamlLanguage.Items, r.Member, "sItems1#3");
+
+			Assert.IsTrue (r.Read (), "so3#1");
+			Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so3#2");
+			Assert.AreEqual (xt, r.Type, "so3#3");
+			Assert.IsTrue (r.Read (), "sm3#1");
+			Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sm3#2");
+			Assert.AreEqual (xt.GetMember ("ItemName"), r.Member, "sm3#3");
+
+			Assert.IsTrue (r.Read (), "v3#1");
+			Assert.AreEqual (XamlNodeType.Value, r.NodeType, "v3#2");
+			Assert.AreEqual ("i3", r.Value, "v3#3");
+
+			Assert.IsTrue (r.Read (), "em3#1");
+			Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "em3#2");
+
+			Assert.IsTrue (r.Read (), "eo3#1");
+			Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo3#2");
+
+			Assert.IsTrue (r.Read (), "eitems2#1");
+			Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eitems2#2");
+
+			Assert.IsTrue (r.Read (), "ego2#1");
+			Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "ego2#2");
+
+			Assert.IsTrue (r.Read (), "erefs2#1");
+			Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "erefs2#2");
+
+			Assert.IsTrue (r.Read (), "eo2#1");
+			Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo2#2");
+
+			// i4
+			Assert.IsTrue (r.Read (), "so4#1");
+			Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so4#2");
+			Assert.AreEqual (xt, r.Type, "so4#3");
+
+			Assert.IsTrue (r.Read (), "sm4#1");
+			Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sm4#2");
+			Assert.AreEqual (xt.GetMember ("ItemName"), r.Member, "sm4#3");
+
+			Assert.IsTrue (r.Read (), "v4#1");
+			Assert.AreEqual (XamlNodeType.Value, r.NodeType, "v4#2");
+			Assert.AreEqual ("i4", r.Value, "v4#3");
+
+			Assert.IsTrue (r.Read (), "em4#1");
+			Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "em4#2");
+
+			Assert.IsTrue (r.Read (), "srefs4#1");
+			Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "srefs4#2");
+			Assert.AreEqual (xt.GetMember ("References"), r.Member, "srefs4#3");
+
+			Assert.IsTrue (r.Read (), "go4#1");
+			Assert.AreEqual (XamlNodeType.GetObject, r.NodeType, "go4#2");
+
+			Assert.IsTrue (r.Read (), "sitems4#1");
+			Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "sitems4#2");
+			Assert.AreEqual (XamlLanguage.Items, r.Member, "sitems4#3");
+
+			Assert.IsTrue (r.Read (), "sor1#1");
+			Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "sor1#2");
+			Assert.AreEqual (XamlLanguage.Reference, r.Type, "sor1#3");
+
+			Assert.IsTrue (r.Read (), "smr1#1");
+			Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "smr1#2");
+			if (isObjectReader)
+				Assert.AreEqual (XamlLanguage.PositionalParameters, r.Member, "smr1#3");
+			else
+				Assert.AreEqual (XamlLanguage.Reference.GetMember ("Name"), r.Member, "smr1#3");
+
+			Assert.IsTrue (r.Read (), "vr1#1");
+			Assert.AreEqual (XamlNodeType.Value, r.NodeType, "vr1#2");
+			Assert.AreEqual ("i3", r.Value, "vr1#3");
+
+			Assert.IsTrue (r.Read (), "emr1#1");
+			Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "emr1#2");
+
+			Assert.IsTrue (r.Read (), "eor#1");
+			Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eor#2");
+
+			Assert.IsTrue (r.Read (), "eitems4#1");
+			Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eitems4#2");
+
+			Assert.IsTrue (r.Read (), "ego4#1");
+			Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "ego4#2");
+
+			Assert.IsTrue (r.Read (), "erefs4#1");
+			Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "erefs4#2");
+
+			Assert.IsTrue (r.Read (), "eo4#1-1");
+			Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo4#1-2");
+
+			Assert.IsTrue (r.Read (), "eitems1#1");
+			Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "eitems1#2");
+
+			Assert.IsTrue (r.Read (), "ego1#1");
+			Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "ego1#2");
+
+			Assert.IsTrue (r.Read (), "erefs1#1");
+			Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "erefs1#2");
+
+			Assert.IsTrue (r.Read (), "eo1#1");
+			Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo1#2");
+
+			Assert.IsFalse (r.Read (), "end");
+		}
+
 		protected void Read_CommonXamlPrimitive (object obj)
 		{
 			var r = new XamlObjectReader (obj);

+ 14 - 0
mcs/class/System.Xaml/Test/System.Xaml/XamlXmlReaderTest.cs

@@ -504,5 +504,19 @@ namespace MonoTests.System.Xaml
 			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);
+		}
 	}
 }

+ 38 - 0
mcs/class/System.Xaml/Test/System.Xaml/XamlXmlWriterTest.cs

@@ -908,6 +908,44 @@ namespace MonoTests.System.Xaml
 			var obj = new TypeExtensionWrapper () { Param = new TypeExtension ("Foo") };
 			Assert.AreEqual (ReadXml ("TypeExtensionWrapper.xml").Trim (), XamlServices.Save (obj), "#1");
 		}
+
+		[Test]
+		[Category ("NotWorking")]
+		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);
+
+			Assert.AreEqual (ReadXml ("NamedItems.xml").Trim (), XamlServices.Save (obj), "#1");
+		}
+
+		[Test]
+		[Category ("NotWorking")]
+		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);
+
+			Assert.AreEqual (ReadXml ("NamedItems2.xml").Trim (), XamlServices.Save (obj), "#1");
+		}
 	}
 
 	public class TestXmlWriterClass1