PageRenderTime 65ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 1ms

/mcs/class/System.Xaml/Test/System.Xaml/XamlReaderTestBase.cs

https://bitbucket.org/danipen/mono
C# | 3389 lines | 2446 code | 704 blank | 239 comment | 153 complexity | 47fabac2cc80dcb4c3eeab8e829b35f8 MD5 | raw file
Possible License(s): Unlicense, Apache-2.0, LGPL-2.0, MPL-2.0-no-copyleft-exception, CC-BY-SA-3.0, GPL-2.0

Large files files are truncated, but you can click here to view the full file

  1. //
  2. // Copyright (C) 2010 Novell Inc. http://novell.com
  3. //
  4. // Permission is hereby granted, free of charge, to any person obtaining
  5. // a copy of this software and associated documentation files (the
  6. // "Software"), to deal in the Software without restriction, including
  7. // without limitation the rights to use, copy, modify, merge, publish,
  8. // distribute, sublicense, and/or sell copies of the Software, and to
  9. // permit persons to whom the Software is furnished to do so, subject to
  10. // the following conditions:
  11. //
  12. // The above copyright notice and this permission notice shall be
  13. // included in all copies or substantial portions of the Software.
  14. //
  15. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  16. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  17. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  18. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  19. // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  20. // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  21. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  22. //
  23. using System;
  24. using System.Collections;
  25. using System.Collections.Generic;
  26. using System.ComponentModel;
  27. using System.IO;
  28. using System.Linq;
  29. using System.Reflection;
  30. using System.Windows.Markup;
  31. using System.Xaml;
  32. using System.Xaml.Schema;
  33. using System.Xml;
  34. using NUnit.Framework;
  35. using CategoryAttribute = NUnit.Framework.CategoryAttribute;
  36. // Some test result remarks:
  37. // - TypeExtension: [ConstructorArgument] -> PositionalParameters
  38. // - StaticExtension: almost identical to TypeExtension
  39. // - Reference: [ConstructorArgument], [ContentProperty] -> only ordinal member.
  40. // - ArrayExtension: [ConstrutorArgument], [ContentProperty] -> no PositionalParameters, Items.
  41. // - NullExtension: no member.
  42. // - MyExtension: [ConstructorArgument] -> only ordinal members...hmm?
  43. namespace MonoTests.System.Xaml
  44. {
  45. public partial class XamlReaderTestBase
  46. {
  47. protected void Read_String (XamlReader r)
  48. {
  49. Assert.AreEqual (XamlNodeType.None, r.NodeType, "#1");
  50. Assert.IsNull (r.Member, "#2");
  51. Assert.IsNull (r.Namespace, "#3");
  52. Assert.IsNull (r.Member, "#4");
  53. Assert.IsNull (r.Type, "#5");
  54. Assert.IsNull (r.Value, "#6");
  55. Assert.IsTrue (r.Read (), "#11");
  56. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#12");
  57. Assert.IsNotNull (r.Namespace, "#13");
  58. Assert.AreEqual ("x", r.Namespace.Prefix, "#13-2");
  59. Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "#13-3");
  60. Assert.IsTrue (r.Read (), "#21");
  61. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#22");
  62. Assert.IsNotNull (r.Type, "#23");
  63. Assert.AreEqual (new XamlType (typeof (string), r.SchemaContext), r.Type, "#23-2");
  64. Assert.IsNull (r.Namespace, "#25");
  65. if (r is XamlXmlReader)
  66. ReadBase (r);
  67. Assert.IsTrue (r.Read (), "#31");
  68. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#32");
  69. Assert.IsNotNull (r.Member, "#33");
  70. Assert.AreEqual (XamlLanguage.Initialization, r.Member, "#33-2");
  71. Assert.IsNull (r.Type, "#34");
  72. Assert.IsTrue (r.Read (), "#41");
  73. Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#42");
  74. Assert.AreEqual ("foo", r.Value, "#43");
  75. Assert.IsNull (r.Member, "#44");
  76. Assert.IsTrue (r.Read (), "#51");
  77. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#52");
  78. Assert.IsNull (r.Type, "#53");
  79. Assert.IsNull (r.Member, "#54");
  80. Assert.IsTrue (r.Read (), "#61");
  81. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#62");
  82. Assert.IsNull (r.Type, "#63");
  83. Assert.IsFalse (r.Read (), "#71");
  84. Assert.IsTrue (r.IsEof, "#72");
  85. }
  86. protected void WriteNullMemberAsObject (XamlReader r, Action validateNullInstance)
  87. {
  88. Assert.AreEqual (XamlNodeType.None, r.NodeType, "#1");
  89. Assert.IsTrue (r.Read (), "#6");
  90. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#7");
  91. Assert.AreEqual (String.Empty, r.Namespace.Prefix, "#7-2");
  92. Assert.AreEqual ("clr-namespace:MonoTests.System.Xaml;assembly=" + GetType ().Assembly.GetName ().Name, r.Namespace.Namespace, "#7-3");
  93. Assert.IsTrue (r.Read (), "#11");
  94. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#12");
  95. Assert.AreEqual ("x", r.Namespace.Prefix, "#12-2");
  96. Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "#12-3");
  97. Assert.IsTrue (r.Read (), "#16");
  98. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#17");
  99. var xt = new XamlType (typeof (TestClass4), r.SchemaContext);
  100. Assert.AreEqual (xt, r.Type, "#17-2");
  101. // Assert.IsTrue (r.Instance is TestClass4, "#17-3");
  102. Assert.AreEqual (2, xt.GetAllMembers ().Count, "#17-4");
  103. if (r is XamlXmlReader)
  104. ReadBase (r);
  105. Assert.IsTrue (r.Read (), "#21");
  106. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#22");
  107. Assert.AreEqual (xt.GetMember ("Bar"), r.Member, "#22-2");
  108. Assert.IsTrue (r.Read (), "#26");
  109. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#27");
  110. Assert.AreEqual (XamlLanguage.Null, r.Type, "#27-2");
  111. if (validateNullInstance != null)
  112. validateNullInstance ();
  113. Assert.IsTrue (r.Read (), "#31");
  114. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#32");
  115. Assert.IsTrue (r.Read (), "#36");
  116. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#37");
  117. Assert.IsTrue (r.Read (), "#41");
  118. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#42");
  119. Assert.AreEqual (xt.GetMember ("Foo"), r.Member, "#42-2");
  120. Assert.IsTrue (r.Read (), "#43");
  121. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#43-2");
  122. Assert.AreEqual (XamlLanguage.Null, r.Type, "#43-3");
  123. if (validateNullInstance != null)
  124. validateNullInstance ();
  125. Assert.IsTrue (r.Read (), "#44");
  126. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#44-2");
  127. Assert.IsTrue (r.Read (), "#46");
  128. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#47");
  129. Assert.IsTrue (r.Read (), "#51");
  130. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#52");
  131. Assert.IsFalse (r.Read (), "#56");
  132. Assert.IsTrue (r.IsEof, "#57");
  133. }
  134. protected void StaticMember (XamlReader r)
  135. {
  136. Assert.AreEqual (XamlNodeType.None, r.NodeType, "#1");
  137. Assert.IsTrue (r.Read (), "#6");
  138. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#7");
  139. Assert.AreEqual (String.Empty, r.Namespace.Prefix, "#7-2");
  140. Assert.AreEqual ("clr-namespace:MonoTests.System.Xaml;assembly=" + GetType ().Assembly.GetName ().Name, r.Namespace.Namespace, "#7-3");
  141. Assert.IsTrue (r.Read (), "#11");
  142. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#12");
  143. Assert.AreEqual ("x", r.Namespace.Prefix, "#12-2");
  144. Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "#12-3");
  145. Assert.IsTrue (r.Read (), "#16");
  146. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#17");
  147. var xt = new XamlType (typeof (TestClass5), r.SchemaContext);
  148. Assert.AreEqual (xt, r.Type, "#17-2");
  149. // Assert.IsTrue (r.Instance is TestClass5, "#17-3");
  150. Assert.AreEqual (2, xt.GetAllMembers ().Count, "#17-4");
  151. Assert.IsTrue (xt.GetAllMembers ().Any (xm => xm.Name == "Bar"), "#17-5");
  152. Assert.IsTrue (xt.GetAllMembers ().Any (xm => xm.Name == "Baz"), "#17-6");
  153. if (r is XamlXmlReader)
  154. ReadBase (r);
  155. Assert.IsTrue (r.Read (), "#21");
  156. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#22");
  157. Assert.AreEqual (xt.GetMember ("Bar"), r.Member, "#22-2");
  158. Assert.IsTrue (r.Read (), "#26");
  159. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#27");
  160. Assert.AreEqual (XamlLanguage.Null, r.Type, "#27-2");
  161. // Assert.IsNull (r.Instance, "#27-3");
  162. Assert.IsTrue (r.Read (), "#31");
  163. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#32");
  164. Assert.IsTrue (r.Read (), "#36");
  165. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#37");
  166. // static Foo is not included in GetAllXembers() return value.
  167. // ReadOnly is not included in GetAllMembers() return value neither.
  168. // nonpublic Baz is a member, but does not appear in the reader.
  169. Assert.IsTrue (r.Read (), "#51");
  170. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#52");
  171. Assert.IsFalse (r.Read (), "#56");
  172. Assert.IsTrue (r.IsEof, "#57");
  173. }
  174. protected void Skip (XamlReader r)
  175. {
  176. r.Skip ();
  177. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#1");
  178. r.Skip ();
  179. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#2");
  180. r.Skip ();
  181. Assert.IsTrue (r.IsEof, "#3");
  182. }
  183. protected void Skip2 (XamlReader r)
  184. {
  185. r.Read (); // NamespaceDeclaration
  186. r.Read (); // Type
  187. if (r is XamlXmlReader)
  188. ReadBase (r);
  189. r.Read (); // Member (Initialization)
  190. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#1");
  191. r.Skip ();
  192. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#2");
  193. r.Skip ();
  194. Assert.IsTrue (r.IsEof, "#3");
  195. }
  196. protected void Read_XmlDocument (XamlReader r)
  197. {
  198. for (int i = 0; i < 3; i++) {
  199. r.Read ();
  200. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#1-" + i);
  201. }
  202. r.Read ();
  203. Assert.AreEqual (new XamlType (typeof (XmlDocument), r.SchemaContext), r.Type, "#2");
  204. r.Read ();
  205. var l = new List<XamlMember> ();
  206. while (r.NodeType == XamlNodeType.StartMember) {
  207. // It depends on XmlDocument's implenentation details. It fails on mono only because XmlDocument.SchemaInfo overrides both getter and setter.
  208. //for (int i = 0; i < 5; i++) {
  209. // Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#3-" + i);
  210. l.Add (r.Member);
  211. r.Skip ();
  212. }
  213. Assert.IsNotNull (l.FirstOrDefault (m => m.Name == "Value"), "#4-1");
  214. Assert.IsNotNull (l.FirstOrDefault (m => m.Name == "InnerXml"), "#4-2");
  215. Assert.IsNotNull (l.FirstOrDefault (m => m.Name == "Prefix"), "#4-3");
  216. Assert.IsNotNull (l.FirstOrDefault (m => m.Name == "PreserveWhitespace"), "#4-4");
  217. Assert.IsNotNull (l.FirstOrDefault (m => m.Name == "Schemas"), "#4-5");
  218. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#5");
  219. Assert.IsFalse (r.Read (), "#6");
  220. }
  221. protected void Read_NonPrimitive (XamlReader r)
  222. {
  223. Assert.AreEqual (XamlNodeType.None, r.NodeType, "#1");
  224. Assert.IsTrue (r.Read (), "#6");
  225. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#7");
  226. Assert.AreEqual (String.Empty, r.Namespace.Prefix, "#7-2");
  227. Assert.AreEqual ("clr-namespace:MonoTests.System.Xaml;assembly=" + GetType ().Assembly.GetName ().Name, r.Namespace.Namespace, "#7-3");
  228. Assert.IsTrue (r.Read (), "#11");
  229. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#12");
  230. Assert.AreEqual ("x", r.Namespace.Prefix, "#12-2");
  231. Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "#12-3");
  232. Assert.IsTrue (r.Read (), "#16");
  233. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#17");
  234. var xt = new XamlType (typeof (TestClass3), r.SchemaContext);
  235. Assert.AreEqual (xt, r.Type, "#17-2");
  236. // Assert.IsTrue (r.Instance is TestClass3, "#17-3");
  237. if (r is XamlXmlReader)
  238. ReadBase (r);
  239. Assert.IsTrue (r.Read (), "#21");
  240. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#22");
  241. Assert.AreEqual (xt.GetMember ("Nested"), r.Member, "#22-2");
  242. Assert.IsTrue (r.Read (), "#26");
  243. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#27");
  244. Assert.AreEqual (XamlLanguage.Null, r.Type, "#27-2");
  245. // Assert.IsNull (r.Instance, "#27-3");
  246. Assert.IsTrue (r.Read (), "#31");
  247. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#32");
  248. Assert.IsTrue (r.Read (), "#36");
  249. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#37");
  250. Assert.IsTrue (r.Read (), "#41");
  251. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#42");
  252. Assert.IsFalse (r.Read (), "#46");
  253. Assert.IsTrue (r.IsEof, "#47");
  254. }
  255. protected void Read_TypeOrTypeExtension (XamlReader r, Action validateInstance, XamlMember ctorArgMember)
  256. {
  257. Assert.IsTrue (r.Read (), "#11");
  258. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#12");
  259. Assert.IsNotNull (r.Namespace, "#13");
  260. Assert.AreEqual ("x", r.Namespace.Prefix, "#13-2");
  261. Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "#13-3");
  262. // Assert.IsNull (r.Instance, "#14");
  263. Assert.IsTrue (r.Read (), "#21");
  264. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#22");
  265. Assert.IsNotNull (r.Type, "#23");
  266. Assert.AreEqual (XamlLanguage.Type, r.Type, "#23-2");
  267. Assert.IsNull (r.Namespace, "#25");
  268. if (validateInstance != null)
  269. validateInstance ();
  270. if (r is XamlXmlReader)
  271. ReadBase (r);
  272. Assert.IsTrue (r.Read (), "#31");
  273. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#32");
  274. Assert.IsNotNull (r.Member, "#33");
  275. Assert.AreEqual (ctorArgMember, r.Member, "#33-2");
  276. Assert.IsNull (r.Type, "#34");
  277. // Assert.IsNull (r.Instance, "#35");
  278. Assert.IsTrue (r.Read (), "#41");
  279. Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#42");
  280. Assert.IsNotNull (r.Value, "#43");
  281. Assert.AreEqual ("x:Int32", r.Value, "#43-2");
  282. Assert.IsNull (r.Member, "#44");
  283. // Assert.IsNull (r.Instance, "#45");
  284. Assert.IsTrue (r.Read (), "#51");
  285. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#52");
  286. Assert.IsNull (r.Type, "#53");
  287. Assert.IsNull (r.Member, "#54");
  288. // Assert.IsNull (r.Instance, "#55");
  289. Assert.IsTrue (r.Read (), "#61");
  290. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#62");
  291. Assert.IsNull (r.Type, "#63");
  292. Assert.IsFalse (r.Read (), "#71");
  293. Assert.IsTrue (r.IsEof, "#72");
  294. }
  295. protected void Read_TypeOrTypeExtension2 (XamlReader r, Action validateInstance, XamlMember ctorArgMember)
  296. {
  297. Assert.IsTrue (r.Read (), "#11");
  298. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#12");
  299. var defns = "clr-namespace:MonoTests.System.Xaml;assembly=" + GetType ().Assembly.GetName ().Name;
  300. Assert.AreEqual (String.Empty, r.Namespace.Prefix, "#13-2");
  301. Assert.AreEqual (defns, r.Namespace.Namespace, "#13-3:" + r.Namespace.Prefix);
  302. Assert.IsTrue (r.Read (), "#16");
  303. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#17");
  304. Assert.IsNotNull (r.Namespace, "#18");
  305. Assert.AreEqual ("x", r.Namespace.Prefix, "#18-2");
  306. Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "#18-3:" + r.Namespace.Prefix);
  307. Assert.IsTrue (r.Read (), "#21");
  308. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#22");
  309. Assert.AreEqual (new XamlType (typeof (TypeExtension), r.SchemaContext), r.Type, "#23-2");
  310. if (validateInstance != null)
  311. validateInstance ();
  312. if (r is XamlXmlReader)
  313. ReadBase (r);
  314. Assert.IsTrue (r.Read (), "#31");
  315. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#32");
  316. Assert.AreEqual (ctorArgMember, r.Member, "#33-2");
  317. Assert.IsTrue (r.Read (), "#41");
  318. Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#42");
  319. Assert.AreEqual ("TestClass1", r.Value, "#43-2");
  320. Assert.IsTrue (r.Read (), "#51");
  321. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#52");
  322. Assert.IsTrue (r.Read (), "#61");
  323. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#62");
  324. Assert.IsFalse (r.Read (), "#71");
  325. Assert.IsTrue (r.IsEof, "#72");
  326. }
  327. protected void Read_Reference (XamlReader r)
  328. {
  329. Assert.IsTrue (r.Read (), "#11");
  330. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#12");
  331. Assert.AreEqual ("x", r.Namespace.Prefix, "#13-2");
  332. Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "#13-3");
  333. Assert.IsTrue (r.Read (), "#21");
  334. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#22");
  335. var xt = new XamlType (typeof (Reference), r.SchemaContext);
  336. Assert.AreEqual (xt, r.Type, "#23-2");
  337. // Assert.IsTrue (r.Instance is Reference, "#26");
  338. Assert.IsNotNull (XamlLanguage.Type.SchemaContext, "#23-3");
  339. Assert.IsNotNull (r.SchemaContext, "#23-4");
  340. Assert.AreNotEqual (XamlLanguage.Type.SchemaContext, r.SchemaContext, "#23-5");
  341. Assert.AreNotEqual (XamlLanguage.Reference.SchemaContext, xt.SchemaContext, "#23-6");
  342. Assert.AreEqual (XamlLanguage.Reference, xt, "#23-7");
  343. if (r is XamlXmlReader)
  344. ReadBase (r);
  345. Assert.IsTrue (r.Read (), "#31");
  346. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#32");
  347. // unlike TypeExtension there is no PositionalParameters.
  348. Assert.AreEqual (xt.GetMember ("Name"), r.Member, "#33-2");
  349. // It is a ContentProperty (besides [ConstructorArgument])
  350. Assert.IsTrue (r.Read (), "#41");
  351. Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#42");
  352. Assert.AreEqual ("FooBar", r.Value, "#43-2");
  353. Assert.IsTrue (r.Read (), "#51");
  354. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#52");
  355. Assert.IsTrue (r.Read (), "#61");
  356. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#62");
  357. Assert.IsFalse (r.Read (), "#71");
  358. Assert.IsTrue (r.IsEof, "#72");
  359. }
  360. protected void Read_NullOrNullExtension (XamlReader r, Action validateInstance)
  361. {
  362. Assert.IsTrue (r.Read (), "#11");
  363. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#12");
  364. Assert.IsNotNull (r.Namespace, "#13");
  365. Assert.AreEqual ("x", r.Namespace.Prefix, "#13-2");
  366. Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "#13-3");
  367. // Assert.IsNull (r.Instance, "#14");
  368. Assert.IsTrue (r.Read (), "#21");
  369. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#22");
  370. Assert.AreEqual (new XamlType (typeof (NullExtension), r.SchemaContext), r.Type, "#23-2");
  371. if (validateInstance != null)
  372. validateInstance ();
  373. if (r is XamlXmlReader)
  374. ReadBase (r);
  375. Assert.IsTrue (r.Read (), "#61");
  376. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#62");
  377. Assert.IsFalse (r.Read (), "#71");
  378. Assert.IsTrue (r.IsEof, "#72");
  379. }
  380. // almost identical to TypeExtension (only type/instance difference)
  381. protected void Read_StaticExtension (XamlReader r, XamlMember ctorArgMember)
  382. {
  383. Assert.IsTrue (r.Read (), "#11");
  384. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#12");
  385. Assert.IsNotNull (r.Namespace, "#13");
  386. Assert.AreEqual ("x", r.Namespace.Prefix, "#13-2");
  387. Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "#13-3");
  388. // Assert.IsNull (r.Instance, "#14");
  389. Assert.IsTrue (r.Read (), "#21");
  390. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#22");
  391. Assert.AreEqual (new XamlType (typeof (StaticExtension), r.SchemaContext), r.Type, "#23-2");
  392. // Assert.IsTrue (r.Instance is StaticExtension, "#26");
  393. if (r is XamlXmlReader)
  394. ReadBase (r);
  395. Assert.IsTrue (r.Read (), "#31");
  396. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#32");
  397. Assert.AreEqual (ctorArgMember, r.Member, "#33-2");
  398. Assert.IsTrue (r.Read (), "#41");
  399. Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#42");
  400. Assert.AreEqual ("FooBar", r.Value, "#43-2");
  401. Assert.IsTrue (r.Read (), "#51");
  402. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#52");
  403. Assert.IsTrue (r.Read (), "#61");
  404. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#62");
  405. Assert.IsFalse (r.Read (), "#71");
  406. Assert.IsTrue (r.IsEof, "#72");
  407. }
  408. protected void Read_ListInt32 (XamlReader r, Action validateInstance, List<int> obj)
  409. {
  410. Assert.IsTrue (r.Read (), "ns#1-1");
  411. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#1-2");
  412. var defns = "clr-namespace:System.Collections.Generic;assembly=mscorlib";
  413. Assert.AreEqual (String.Empty, r.Namespace.Prefix, "ns#1-3");
  414. Assert.AreEqual (defns, r.Namespace.Namespace, "ns#1-4");
  415. Assert.IsTrue (r.Read (), "#11");
  416. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#12");
  417. Assert.IsNotNull (r.Namespace, "#13");
  418. Assert.AreEqual ("x", r.Namespace.Prefix, "#13-2");
  419. Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "#13-3");
  420. Assert.IsTrue (r.Read (), "#21");
  421. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#22");
  422. var xt = new XamlType (typeof (List<int>), r.SchemaContext);
  423. Assert.AreEqual (xt, r.Type, "#23");
  424. Assert.IsTrue (xt.IsCollection, "#27");
  425. if (validateInstance != null)
  426. validateInstance ();
  427. // This assumption on member ordering ("Type" then "Items") is somewhat wrong, and we might have to adjust it in the future.
  428. if (r is XamlXmlReader)
  429. ReadBase (r);
  430. Assert.IsTrue (r.Read (), "#31");
  431. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#32");
  432. Assert.AreEqual (xt.GetMember ("Capacity"), r.Member, "#33");
  433. Assert.IsTrue (r.Read (), "#41");
  434. Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#42");
  435. // The value is implementation details, not testable.
  436. //Assert.AreEqual ("3", r.Value, "#43");
  437. Assert.IsTrue (r.Read (), "#51");
  438. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#52");
  439. if (obj.Count > 0) { // only when items exist.
  440. Assert.IsTrue (r.Read (), "#72");
  441. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#72-2");
  442. Assert.AreEqual (XamlLanguage.Items, r.Member, "#72-3");
  443. string [] values = {"5", "-3", "2147483647", "0"};
  444. for (int i = 0; i < 4; i++) {
  445. Assert.IsTrue (r.Read (), i + "#73");
  446. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, i + "#73-2");
  447. Assert.IsTrue (r.Read (), i + "#74");
  448. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, i + "#74-2");
  449. Assert.AreEqual (XamlLanguage.Initialization, r.Member, i + "#74-3");
  450. Assert.IsTrue (r.Read (), i + "#75");
  451. Assert.IsNotNull (r.Value, i + "#75-2");
  452. Assert.AreEqual (values [i], r.Value, i + "#73-3");
  453. Assert.IsTrue (r.Read (), i + "#74");
  454. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, i + "#74-2");
  455. Assert.IsTrue (r.Read (), i + "#75");
  456. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, i + "#75-2");
  457. }
  458. Assert.IsTrue (r.Read (), "#81");
  459. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#82"); // XamlLanguage.Items
  460. } // end of "if count > 0".
  461. Assert.IsTrue (r.Read (), "#87");
  462. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#88");
  463. Assert.IsFalse (r.Read (), "#89");
  464. }
  465. protected void Read_ListType (XamlReader r, bool isObjectReader)
  466. {
  467. Assert.IsTrue (r.Read (), "ns#1-1");
  468. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#1-2");
  469. var defns = "clr-namespace:System.Collections.Generic;assembly=mscorlib";
  470. var defns2 = "clr-namespace:System;assembly=mscorlib";
  471. var defns3 = "clr-namespace:System.Xaml;assembly=System.Xaml";
  472. Assert.AreEqual (String.Empty, r.Namespace.Prefix, "ns#1-3");
  473. Assert.AreEqual (defns, r.Namespace.Namespace, "ns#1-4");
  474. Assert.IsTrue (r.Read (), "ns#2-1");
  475. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2-2");
  476. Assert.IsNotNull (r.Namespace, "ns#2-3");
  477. Assert.AreEqual ("s", r.Namespace.Prefix, "ns#2-3-2");
  478. Assert.AreEqual (defns2, r.Namespace.Namespace, "ns#2-3-3");
  479. Assert.IsTrue (r.Read (), "ns#3-1");
  480. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#3-2");
  481. Assert.IsNotNull (r.Namespace, "ns#3-3");
  482. Assert.AreEqual ("sx", r.Namespace.Prefix, "ns#3-3-2");
  483. Assert.AreEqual (defns3, r.Namespace.Namespace, "ns#3-3-3");
  484. Assert.IsTrue (r.Read (), "#11");
  485. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#12");
  486. Assert.IsNotNull (r.Namespace, "#13");
  487. Assert.AreEqual ("x", r.Namespace.Prefix, "#13-2");
  488. Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "#13-3");
  489. Assert.IsTrue (r.Read (), "#21");
  490. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#22");
  491. var xt = new XamlType (typeof (List<Type>), r.SchemaContext);
  492. Assert.AreEqual (xt, r.Type, "#23");
  493. Assert.IsTrue (xt.IsCollection, "#27");
  494. if (r is XamlXmlReader)
  495. ReadBase (r);
  496. Assert.IsTrue (r.Read (), "#31");
  497. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#32");
  498. Assert.AreEqual (xt.GetMember ("Capacity"), r.Member, "#33");
  499. Assert.IsTrue (r.Read (), "#41");
  500. Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#42");
  501. Assert.AreEqual ("2", r.Value, "#43");
  502. Assert.IsTrue (r.Read (), "#51");
  503. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#52");
  504. Assert.IsTrue (r.Read (), "#72");
  505. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#72-2");
  506. Assert.AreEqual (XamlLanguage.Items, r.Member, "#72-3");
  507. string [] values = {"x:Int32", "Dictionary(s:Type, sx:XamlType)"};
  508. for (int i = 0; i < 2; i++) {
  509. Assert.IsTrue (r.Read (), i + "#73");
  510. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, i + "#73-2");
  511. Assert.IsTrue (r.Read (), i + "#74");
  512. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, i + "#74-2");
  513. // Here XamlObjectReader and XamlXmlReader significantly differs. (Lucky we can make this test conditional so simply)
  514. if (isObjectReader)
  515. Assert.AreEqual (XamlLanguage.PositionalParameters, r.Member, i + "#74-3");
  516. else
  517. Assert.AreEqual (XamlLanguage.Type.GetMember ("Type"), r.Member, i + "#74-3");
  518. Assert.IsTrue (r.Read (), i + "#75");
  519. Assert.IsNotNull (r.Value, i + "#75-2");
  520. Assert.AreEqual (values [i], r.Value, i + "#73-3");
  521. Assert.IsTrue (r.Read (), i + "#74");
  522. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, i + "#74-2");
  523. Assert.IsTrue (r.Read (), i + "#75");
  524. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, i + "#75-2");
  525. }
  526. Assert.IsTrue (r.Read (), "#81");
  527. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#82"); // XamlLanguage.Items
  528. Assert.IsTrue (r.Read (), "#87");
  529. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#88");
  530. Assert.IsFalse (r.Read (), "#89");
  531. }
  532. protected void Read_ListArray (XamlReader r)
  533. {
  534. Assert.IsTrue (r.Read (), "ns#1-1");
  535. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#1-2");
  536. var defns = "clr-namespace:System.Collections.Generic;assembly=mscorlib";
  537. var defns2 = "clr-namespace:System;assembly=mscorlib";
  538. var defns3 = "clr-namespace:System.Xaml;assembly=System.Xaml";
  539. Assert.AreEqual (String.Empty, r.Namespace.Prefix, "ns#1-3");
  540. Assert.AreEqual (defns, r.Namespace.Namespace, "ns#1-4");
  541. Assert.IsTrue (r.Read (), "ns#2-1");
  542. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2-2");
  543. Assert.IsNotNull (r.Namespace, "ns#2-3");
  544. Assert.AreEqual ("s", r.Namespace.Prefix, "ns#2-3-2");
  545. Assert.AreEqual (defns2, r.Namespace.Namespace, "ns#2-3-3");
  546. Assert.IsTrue (r.Read (), "#11");
  547. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#12");
  548. Assert.IsNotNull (r.Namespace, "#13");
  549. Assert.AreEqual ("x", r.Namespace.Prefix, "#13-2");
  550. Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "#13-3");
  551. Assert.IsTrue (r.Read (), "#21");
  552. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#22");
  553. var xt = new XamlType (typeof (List<Array>), r.SchemaContext);
  554. Assert.AreEqual (xt, r.Type, "#23");
  555. Assert.IsTrue (xt.IsCollection, "#27");
  556. if (r is XamlXmlReader)
  557. ReadBase (r);
  558. Assert.IsTrue (r.Read (), "#31");
  559. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#32");
  560. Assert.AreEqual (xt.GetMember ("Capacity"), r.Member, "#33");
  561. Assert.IsTrue (r.Read (), "#41");
  562. Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#42");
  563. Assert.AreEqual ("2", r.Value, "#43");
  564. Assert.IsTrue (r.Read (), "#51");
  565. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#52");
  566. Assert.IsTrue (r.Read (), "#72");
  567. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#72-2");
  568. Assert.AreEqual (XamlLanguage.Items, r.Member, "#72-3");
  569. string [] values = {"x:Int32", "x:String"};
  570. for (int i = 0; i < 2; i++) {
  571. Assert.IsTrue (r.Read (), i + "#73");
  572. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, i + "#73-2");
  573. Assert.AreEqual (XamlLanguage.Array, r.Type, i + "#73-3");
  574. Assert.IsTrue (r.Read (), i + "#74");
  575. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, i + "#74-2");
  576. Assert.AreEqual (XamlLanguage.Array.GetMember ("Type"), r.Member, i + "#74-3");
  577. Assert.IsTrue (r.Read (), i + "#75");
  578. Assert.IsNotNull (r.Value, i + "#75-2");
  579. Assert.AreEqual (values [i], r.Value, i + "#73-3");
  580. Assert.IsTrue (r.Read (), i + "#74");
  581. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, i + "#74-2");
  582. Assert.IsTrue (r.Read (), i + "#75");
  583. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, i + "#75-2");
  584. Assert.AreEqual (XamlLanguage.Array.GetMember ("Items"), r.Member, i + "#75-3");
  585. Assert.IsTrue (r.Read (), i + "#75-4");
  586. Assert.AreEqual (XamlNodeType.GetObject, r.NodeType, i + "#75-5");
  587. Assert.IsTrue (r.Read (), i + "#75-7");
  588. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, i + "#75-8");
  589. Assert.AreEqual (XamlLanguage.Items, r.Member, i + "#75-9");
  590. for (int j = 0; j < 3; j++) {
  591. Assert.IsTrue (r.Read (), i + "#76-" + j);
  592. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, i + "#76-2"+ "-" + j);
  593. Assert.IsTrue (r.Read (), i + "#76-3"+ "-" + j);
  594. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, i + "#76-4"+ "-" + j);
  595. Assert.IsTrue (r.Read (), i + "#76-5"+ "-" + j);
  596. Assert.AreEqual (XamlNodeType.Value, r.NodeType, i + "#76-6"+ "-" + j);
  597. Assert.IsTrue (r.Read (), i + "#76-7"+ "-" + j);
  598. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, i + "#76-8"+ "-" + j);
  599. Assert.IsTrue (r.Read (), i + "#76-9"+ "-" + j);
  600. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, i + "#76-10"+ "-" + j);
  601. }
  602. Assert.IsTrue (r.Read (), i + "#77");
  603. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, i + "#77-2");
  604. Assert.IsTrue (r.Read (), i + "#78");
  605. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, i + "#78-2");
  606. Assert.IsTrue (r.Read (), i + "#79");
  607. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, i + "#79-2");
  608. Assert.IsTrue (r.Read (), i + "#80");
  609. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, i + "#80-2");
  610. }
  611. Assert.IsTrue (r.Read (), "#81");
  612. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#82"); // XamlLanguage.Items
  613. Assert.IsTrue (r.Read (), "#87");
  614. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#88");
  615. Assert.IsFalse (r.Read (), "#89");
  616. }
  617. protected void Read_ArrayList (XamlReader r)
  618. {
  619. Assert.IsTrue (r.Read (), "ns#1-1");
  620. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#1-2");
  621. var defns = "clr-namespace:System.Collections;assembly=mscorlib";
  622. Assert.AreEqual (String.Empty, r.Namespace.Prefix, "ns#1-3");
  623. Assert.AreEqual (defns, r.Namespace.Namespace, "ns#1-4");
  624. Assert.IsTrue (r.Read (), "#11");
  625. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#12");
  626. Assert.IsNotNull (r.Namespace, "#13");
  627. Assert.AreEqual ("x", r.Namespace.Prefix, "#13-2");
  628. Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "#13-3");
  629. Assert.IsTrue (r.Read (), "#21");
  630. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#22");
  631. var xt = new XamlType (typeof (ArrayList), r.SchemaContext);
  632. Assert.AreEqual (xt, r.Type, "#23");
  633. // Assert.AreEqual (obj, r.Instance, "#26");
  634. Assert.IsTrue (xt.IsCollection, "#27");
  635. if (r is XamlXmlReader)
  636. ReadBase (r);
  637. // This assumption on member ordering ("Type" then "Items") is somewhat wrong, and we might have to adjust it in the future.
  638. Assert.IsTrue (r.Read (), "#31");
  639. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#32");
  640. Assert.AreEqual (xt.GetMember ("Capacity"), r.Member, "#33");
  641. Assert.IsTrue (r.Read (), "#41");
  642. Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#42");
  643. // The value is implementation details, not testable.
  644. //Assert.AreEqual ("3", r.Value, "#43");
  645. Assert.IsTrue (r.Read (), "#51");
  646. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#52");
  647. Assert.IsTrue (r.Read (), "#72");
  648. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#72-2");
  649. Assert.AreEqual (XamlLanguage.Items, r.Member, "#72-3");
  650. string [] values = {"5", "-3", "0"};
  651. for (int i = 0; i < 3; i++) {
  652. Assert.IsTrue (r.Read (), i + "#73");
  653. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, i + "#73-2");
  654. Assert.IsTrue (r.Read (), i + "#74");
  655. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, i + "#74-2");
  656. Assert.AreEqual (XamlLanguage.Initialization, r.Member, i + "#74-3");
  657. Assert.IsTrue (r.Read (), i + "#75");
  658. Assert.IsNotNull (r.Value, i + "#75-2");
  659. Assert.AreEqual (values [i], r.Value, i + "#73-3");
  660. Assert.IsTrue (r.Read (), i + "#74");
  661. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, i + "#74-2");
  662. Assert.IsTrue (r.Read (), i + "#75");
  663. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, i + "#75-2");
  664. }
  665. Assert.IsTrue (r.Read (), "#81");
  666. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#82"); // XamlLanguage.Items
  667. Assert.IsTrue (r.Read (), "#87");
  668. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#88");
  669. Assert.IsFalse (r.Read (), "#89");
  670. }
  671. protected void Read_ArrayOrArrayExtensionOrMyArrayExtension (XamlReader r, Action validateInstance, Type extType)
  672. {
  673. if (extType == typeof (MyArrayExtension)) {
  674. Assert.IsTrue (r.Read (), "#1");
  675. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#2");
  676. Assert.IsNotNull (r.Namespace, "#3");
  677. Assert.AreEqual (String.Empty, r.Namespace.Prefix, "#3-2");
  678. }
  679. Assert.IsTrue (r.Read (), "#11");
  680. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#12");
  681. Assert.IsNotNull (r.Namespace, "#13");
  682. Assert.AreEqual ("x", r.Namespace.Prefix, "#13-2");
  683. Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "#13-3");
  684. Assert.IsTrue (r.Read (), "#21");
  685. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#22");
  686. var xt = new XamlType (extType, r.SchemaContext);
  687. Assert.AreEqual (xt, r.Type, "#23");
  688. if (validateInstance != null)
  689. validateInstance ();
  690. if (r is XamlXmlReader)
  691. ReadBase (r);
  692. // This assumption on member ordering ("Type" then "Items") is somewhat wrong, and we might have to adjust it in the future.
  693. Assert.IsTrue (r.Read (), "#31");
  694. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#32");
  695. Assert.AreEqual (xt.GetMember ("Type"), r.Member, "#33");
  696. Assert.IsTrue (r.Read (), "#41");
  697. Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#42");
  698. Assert.AreEqual ("x:Int32", r.Value, "#43");
  699. Assert.IsTrue (r.Read (), "#51");
  700. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#52");
  701. Assert.IsTrue (r.Read (), "#61");
  702. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#62");
  703. Assert.AreEqual (xt.GetMember ("Items"), r.Member, "#63");
  704. Assert.IsTrue (r.Read (), "#71");
  705. Assert.AreEqual (XamlNodeType.GetObject, r.NodeType, "#71-2");
  706. Assert.IsNull (r.Type, "#71-3");
  707. Assert.IsNull (r.Member, "#71-4");
  708. Assert.IsNull (r.Value, "#71-5");
  709. Assert.IsTrue (r.Read (), "#72");
  710. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#72-2");
  711. Assert.AreEqual (XamlLanguage.Items, r.Member, "#72-3");
  712. string [] values = {"5", "-3", "0"};
  713. for (int i = 0; i < 3; i++) {
  714. Assert.IsTrue (r.Read (), i + "#73");
  715. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, i + "#73-2");
  716. Assert.IsTrue (r.Read (), i + "#74");
  717. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, i + "#74-2");
  718. Assert.AreEqual (XamlLanguage.Initialization, r.Member, i + "#74-3");
  719. Assert.IsTrue (r.Read (), i + "#75");
  720. Assert.IsNotNull (r.Value, i + "#75-2");
  721. Assert.AreEqual (values [i], r.Value, i + "#73-3");
  722. Assert.IsTrue (r.Read (), i + "#74");
  723. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, i + "#74-2");
  724. Assert.IsTrue (r.Read (), i + "#75");
  725. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, i + "#75-2");
  726. }
  727. Assert.IsTrue (r.Read (), "#81");
  728. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#82"); // XamlLanguage.Items
  729. Assert.IsTrue (r.Read (), "#83");
  730. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#84"); // GetObject
  731. Assert.IsTrue (r.Read (), "#85");
  732. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#86"); // ArrayExtension.Items
  733. Assert.IsTrue (r.Read (), "#87");
  734. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#88"); // ArrayExtension
  735. Assert.IsFalse (r.Read (), "#89");
  736. }
  737. // It gives Type member, not PositionalParameters... and no Items member here.
  738. protected void Read_ArrayExtension2 (XamlReader r)
  739. {
  740. Assert.IsTrue (r.Read (), "#11");
  741. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#12");
  742. Assert.IsNotNull (r.Namespace, "#13");
  743. Assert.AreEqual ("x", r.Namespace.Prefix, "#13-2");
  744. Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "#13-3");
  745. // Assert.IsNull (r.Instance, "#14");
  746. Assert.IsTrue (r.Read (), "#21");
  747. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#22");
  748. var xt = new XamlType (typeof (ArrayExtension), r.SchemaContext);
  749. Assert.AreEqual (xt, r.Type, "#23-2");
  750. // Assert.IsTrue (r.Instance is ArrayExtension, "#26");
  751. if (r is XamlXmlReader)
  752. ReadBase (r);
  753. Assert.IsTrue (r.Read (), "#31");
  754. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#32");
  755. Assert.AreEqual (xt.GetMember ("Type"), r.Member, "#33-2");
  756. Assert.IsTrue (r.Read (), "#41");
  757. Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#42");
  758. Assert.AreEqual ("x:Int32", r.Value, "#43-2");
  759. Assert.IsTrue (r.Read (), "#51");
  760. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#52");
  761. Assert.IsTrue (r.Read (), "#61");
  762. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#62");
  763. Assert.IsFalse (r.Read (), "#71");
  764. Assert.IsTrue (r.IsEof, "#72");
  765. }
  766. protected void Read_CustomMarkupExtension (XamlReader r)
  767. {
  768. r.Read (); // ns
  769. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#1");
  770. r.Read (); // ns
  771. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#1-2");
  772. r.Read ();
  773. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#2-0");
  774. Assert.IsFalse (r.IsEof, "#1");
  775. var xt = r.Type;
  776. if (r is XamlXmlReader)
  777. ReadBase (r);
  778. r.Read ();
  779. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#2-1");
  780. Assert.IsFalse (r.IsEof, "#2-2");
  781. Assert.AreEqual (xt.GetMember ("Bar"), r.Member, "#2-3");
  782. Assert.IsTrue (r.Read (), "#2-4");
  783. Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#2-5");
  784. Assert.AreEqual ("v2", r.Value, "#2-6");
  785. Assert.IsTrue (r.Read (), "#2-7");
  786. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#2-8");
  787. r.Read ();
  788. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#3-1");
  789. Assert.IsFalse (r.IsEof, "#3-2");
  790. Assert.AreEqual (xt.GetMember ("Baz"), r.Member, "#3-3");
  791. Assert.IsTrue (r.Read (), "#3-4");
  792. Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#3-5");
  793. Assert.AreEqual ("v7", r.Value, "#3-6");
  794. Assert.IsTrue (r.Read (), "#3-7");
  795. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#3-8");
  796. r.Read ();
  797. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#4-1");
  798. Assert.IsFalse (r.IsEof, "#4-2");
  799. Assert.AreEqual (xt.GetMember ("Foo"), r.Member, "#4-3");
  800. Assert.IsTrue (r.Read (), "#4-4");
  801. Assert.AreEqual (XamlNodeType.Value, r.NodeType, "#4-5");
  802. Assert.AreEqual ("x:Int32", r.Value, "#4-6");
  803. Assert.IsTrue (r.Read (), "#4-7");
  804. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#4-8");
  805. Assert.IsTrue (r.Read (), "#5");
  806. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#5-2");
  807. Assert.IsFalse (r.Read (), "#6");
  808. }
  809. protected void Read_CustomMarkupExtension2 (XamlReader r)
  810. {
  811. r.Read (); // ns
  812. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#1");
  813. r.Read (); // note that there wasn't another NamespaceDeclaration.
  814. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#2-0");
  815. var xt = r.Type;
  816. Assert.AreEqual (r.SchemaContext.GetXamlType (typeof (MyExtension2)), xt, "#2");
  817. if (r is XamlXmlReader)
  818. ReadBase (r);
  819. Assert.IsTrue (r.Read (), "#3");
  820. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#3-2");
  821. Assert.AreEqual (XamlLanguage.Initialization, r.Member, "#4");
  822. Assert.IsTrue (r.Read (), "#5");
  823. Assert.AreEqual ("MonoTests.System.Xaml.MyExtension2", r.Value, "#6");
  824. Assert.IsTrue (r.Read (), "#7"); // EndMember
  825. Assert.IsTrue (r.Read (), "#8"); // EndObject
  826. Assert.IsFalse (r.Read (), "#9");
  827. }
  828. protected void Read_CustomMarkupExtension3 (XamlReader r)
  829. {
  830. r.Read (); // ns
  831. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#1");
  832. r.Read (); // note that there wasn't another NamespaceDeclaration.
  833. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#2-0");
  834. var xt = r.Type;
  835. Assert.AreEqual (r.SchemaContext.GetXamlType (typeof (MyExtension3)), xt, "#2");
  836. if (r is XamlXmlReader)
  837. ReadBase (r);
  838. Assert.IsTrue (r.Read (), "#3");
  839. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#3-2");
  840. Assert.AreEqual (XamlLanguage.Initialization, r.Member, "#4");
  841. Assert.IsTrue (r.Read (), "#5");
  842. Assert.AreEqual ("MonoTests.System.Xaml.MyExtension3", r.Value, "#6");
  843. Assert.IsTrue (r.Read (), "#7"); // EndMember
  844. Assert.IsTrue (r.Read (), "#8"); // EndObject
  845. Assert.IsFalse (r.Read (), "#9");
  846. }
  847. protected void Read_CustomMarkupExtension4 (XamlReader r)
  848. {
  849. r.Read (); // ns
  850. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#1");
  851. r.Read (); // note that there wasn't another NamespaceDeclaration.
  852. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#2-0");
  853. var xt = r.Type;
  854. Assert.AreEqual (r.SchemaContext.GetXamlType (typeof (MyExtension4)), xt, "#2");
  855. if (r is XamlXmlReader)
  856. ReadBase (r);
  857. Assert.IsTrue (r.Read (), "#3");
  858. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#3-2");
  859. Assert.AreEqual (XamlLanguage.Initialization, r.Member, "#4");
  860. Assert.IsTrue (r.Read (), "#5");
  861. Assert.AreEqual ("MonoTests.System.Xaml.MyExtension4", r.Value, "#6");
  862. Assert.IsTrue (r.Read (), "#7"); // EndMember
  863. Assert.IsTrue (r.Read (), "#8"); // EndObject
  864. Assert.IsFalse (r.Read (), "#9");
  865. }
  866. protected void Read_CustomMarkupExtension5 (XamlReader r)
  867. {
  868. r.Read (); // ns
  869. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#1");
  870. r.Read (); // note that there wasn't another NamespaceDeclaration.
  871. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#2-0");
  872. var xt = r.Type;
  873. Assert.AreEqual (r.SchemaContext.GetXamlType (typeof (MyExtension5)), xt, "#2");
  874. if (r is XamlXmlReader)
  875. ReadBase (r);
  876. Assert.IsTrue (r.Read (), "#3");
  877. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#3-2");
  878. Assert.AreEqual (XamlLanguage.PositionalParameters, r.Member, "#4");
  879. Assert.IsTrue (r.Read (), "#5");
  880. Assert.AreEqual ("foo", r.Value, "#6");
  881. Assert.IsTrue (r.Read (), "#7");
  882. Assert.AreEqual ("bar", r.Value, "#8");
  883. Assert.IsTrue (r.Read (), "#9");
  884. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "#10");
  885. Assert.IsTrue (r.Read (), "#11");
  886. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "#12");
  887. Assert.IsFalse (r.Read (), "#13");
  888. }
  889. protected void Read_CustomMarkupExtension6 (XamlReader r)
  890. {
  891. r.Read (); // ns
  892. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "#1");
  893. r.Read (); // note that there wasn't another NamespaceDeclaration.
  894. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "#2-0");
  895. var xt = r.Type;
  896. Assert.AreEqual (r.SchemaContext.GetXamlType (typeof (MyExtension6)), xt, "#2");
  897. if (r is XamlXmlReader)
  898. ReadBase (r);
  899. Assert.IsTrue (r.Read (), "#3");
  900. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "#3-2");
  901. Assert.AreEqual (xt.GetMember ("Foo"), r.Member, "#4"); // this is the difference between MyExtension5 and MyExtension6: it outputs constructor arguments as normal members
  902. Assert.IsTrue (r.Read (), "#5");
  903. Assert.AreEqual ("foo", r.Value, "#6");
  904. Assert.IsTrue (r.Read (), "#7"); // EndMember
  905. Assert.IsTrue (r.Read (), "#8"); // EndObject
  906. Assert.IsFalse (r.Read (), "#9");
  907. }
  908. protected void Read_ArgumentAttributed (XamlReader r, object obj)
  909. {
  910. Read_CommonClrType (r, obj, new KeyValuePair<string,string> ("x", XamlLanguage.Xaml2006Namespace));
  911. if (r is XamlXmlReader)
  912. ReadBase (r);
  913. var args = Read_AttributedArguments_String (r, new string [] {"arg1", "arg2"});
  914. Assert.AreEqual ("foo", args [0], "#1");
  915. Assert.AreEqual ("bar", args [1], "#2");
  916. }
  917. protected void Read_Dictionary (XamlReader r)
  918. {
  919. Assert.IsTrue (r.Read (), "ns#1-1");
  920. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#1-2");
  921. Assert.IsNotNull (r.Namespace, "ns#1-3");
  922. Assert.AreEqual (String.Empty, r.Namespace.Prefix, "ns#1-4");
  923. Assert.AreEqual ("clr-namespace:System.Collections.Generic;assembly=mscorlib", r.Namespace.Namespace, "ns#1-5");
  924. Assert.IsTrue (r.Read (), "ns#2-1");
  925. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2-2");
  926. Assert.IsNotNull (r.Namespace, "ns#2-3");
  927. Assert.AreEqual ("x", r.Namespace.Prefix, "ns#2-4");
  928. Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#2-5");
  929. Assert.IsTrue (r.Read (), "so#1-1");
  930. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#1-2");
  931. var xt = new XamlType (typeof (Dictionary<string,object>), r.SchemaContext);
  932. Assert.AreEqual (xt, r.Type, "so#1-3");
  933. // Assert.AreEqual (obj, r.Instance, "so#1-4");
  934. if (r is XamlXmlReader)
  935. ReadBase (r);
  936. Assert.IsTrue (r.Read (), "smitems#1");
  937. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "smitems#2");
  938. Assert.AreEqual (XamlLanguage.Items, r.Member, "smitems#3");
  939. for (int i = 0; i < 2; i++) {
  940. // start of an item
  941. Assert.IsTrue (r.Read (), "soi#1-1." + i);
  942. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "soi#1-2." + i);
  943. var xt2 = new XamlType (typeof (double), r.SchemaContext);
  944. Assert.AreEqual (xt2, r.Type, "soi#1-3." + i);
  945. Assert.IsTrue (r.Read (), "smi#1-1." + i);
  946. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "smi#1-2." + i);
  947. Assert.AreEqual (XamlLanguage.Key, r.Member, "smi#1-3." + i);
  948. Assert.IsTrue (r.Read (), "svi#1-1." + i);
  949. Assert.AreEqual (XamlNodeType.Value, r.NodeType, "svi#1-2." + i);
  950. Assert.AreEqual (i == 0 ? "Foo" : "Bar", r.Value, "svi#1-3." + i);
  951. Assert.IsTrue (r.Read (), "emi#1-1." + i);
  952. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "emi#1-2." + i);
  953. Assert.IsTrue (r.Read (), "smi#2-1." + i);
  954. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "smi#2-2." + i);
  955. Assert.AreEqual (XamlLanguage.Initialization, r.Member, "smi#2-3." + i);
  956. Assert.IsTrue (r.Read (), "svi#2-1." + i);
  957. Assert.AreEqual (XamlNodeType.Value, r.NodeType, "svi#2-2." + i);
  958. Assert.AreEqual (i == 0 ? "5" : "-6.5", r.Value, "svi#2-3." + i); // converted to string(!)
  959. Assert.IsTrue (r.Read (), "emi#2-1." + i);
  960. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "emi#2-2." + i);
  961. Assert.IsTrue (r.Read (), "eoi#1-1." + i);
  962. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eoi#1-2." + i);
  963. // end of an item
  964. }
  965. Assert.IsTrue (r.Read (), "emitems#1");
  966. Assert.AreEqual (XamlNodeType.EndMember, r.NodeType, "emitems#2"); // XamlLanguage.Items
  967. Assert.IsTrue (r.Read (), "eo#1-1");
  968. Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#1-2"); // Dictionary
  969. Assert.IsFalse (r.Read (), "end");
  970. }
  971. protected void Read_Dictionary2 (XamlReader r, XamlMember ctorArgMember)
  972. {
  973. Assert.IsTrue (r.Read (), "ns#1-1");
  974. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#1-2");
  975. Assert.IsNotNull (r.Namespace, "ns#1-3");
  976. Assert.AreEqual (String.Empty, r.Namespace.Prefix, "ns#1-4");
  977. Assert.AreEqual ("clr-namespace:System.Collections.Generic;assembly=mscorlib", r.Namespace.Namespace, "ns#1-5");
  978. Assert.IsTrue (r.Read (), "ns#2-1");
  979. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#2-2");
  980. Assert.IsNotNull (r.Namespace, "ns#2-3");
  981. Assert.AreEqual ("s", r.Namespace.Prefix, "ns#2-4");
  982. Assert.AreEqual ("clr-namespace:System;assembly=mscorlib", r.Namespace.Namespace, "ns#2-5");
  983. Assert.IsTrue (r.Read (), "ns#3-1");
  984. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#3-2");
  985. Assert.IsNotNull (r.Namespace, "ns#3-3");
  986. Assert.AreEqual ("sx", r.Namespace.Prefix, "ns#3-4");
  987. Assert.AreEqual ("clr-namespace:System.Xaml;assembly=System.Xaml", r.Namespace.Namespace, "ns#3-5");
  988. Assert.IsTrue (r.Read (), "ns#4-1");
  989. Assert.AreEqual (XamlNodeType.NamespaceDeclaration, r.NodeType, "ns#4-2");
  990. Assert.IsNotNull (r.Namespace, "ns#4-3");
  991. Assert.AreEqual ("x", r.Namespace.Prefix, "ns#4-4");
  992. Assert.AreEqual (XamlLanguage.Xaml2006Namespace, r.Namespace.Namespace, "ns#4-5");
  993. Assert.IsTrue (r.Read (), "so#1-1");
  994. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#1-2");
  995. var xt = new XamlType (typeof (Dictionary<string,Type>), r.SchemaContext);
  996. Assert.AreEqual (xt, r.Type, "so#1-3");
  997. // Assert.AreEqual (obj, r.Instance, "so#1-4");
  998. if (r is XamlXmlReader)
  999. ReadBase (r);
  1000. Assert.IsTrue (r.Read (), "smitems#1");
  1001. Assert.AreEqual (XamlNodeType.StartMember, r.NodeType, "smitems#2");
  1002. Assert.AreEqual (XamlLanguage.Items, r.Member, "smitems#3");
  1003. for (int i = 0; i < 2; i++) {
  1004. // start of an item
  1005. Assert.IsTrue (r.Read (), "soi#1-1." + i);
  1006. Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "soi#1-2." + i);
  1007. var xt2 = XamlLanguage.Type;
  1008. Assert.AreEqual (xt2, r.Type, "soi#1-3." + i);
  1009. if (r is XamlObjectReader) {
  1010. Read_Dictionary2_ConstructorArgument (r, ctorArgMember

Large files files are truncated, but you can click here to view the full file