PageRenderTime 55ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 1ms

/mcs/class/System.Web.DynamicData/Test/System.Web.DynamicData/MetaTableTest.cs

https://bitbucket.org/danipen/mono
C# | 955 lines | 710 code | 192 blank | 53 comment | 12 complexity | b5e5f51652a1c6033c6692cdb1c66d48 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
  1. //
  2. // MetaTableTest.cs
  3. //
  4. // Authors:
  5. // Marek Habersack <mhabersack@novell.com>
  6. //
  7. // Copyright (C) 2009 Novell Inc. http://novell.com
  8. //
  9. //
  10. // Permission is hereby granted, free of charge, to any person obtaining
  11. // a copy of this software and associated documentation files (the
  12. // "Software"), to deal in the Software without restriction, including
  13. // without limitation the rights to use, copy, modify, merge, publish,
  14. // distribute, sublicense, and/or sell copies of the Software, and to
  15. // permit persons to whom the Software is furnished to do so, subject to
  16. // the following conditions:
  17. //
  18. // The above copyright notice and this permission notice shall be
  19. // included in all copies or substantial portions of the Software.
  20. //
  21. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  22. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  23. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  24. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  25. // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  26. // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  27. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  28. //
  29. using System;
  30. using System.Collections;
  31. using System.Collections.Generic;
  32. using System.Collections.ObjectModel;
  33. using System.Collections.Specialized;
  34. using System.ComponentModel.DataAnnotations;
  35. using System.Data.SqlClient;
  36. using System.Data.Linq;
  37. using System.Data.Linq.Mapping;
  38. using System.Globalization;
  39. using System.Linq;
  40. using System.Net;
  41. using System.Reflection;
  42. using System.Security.Permissions;
  43. using System.Security.Principal;
  44. using System.Web;
  45. using System.Web.UI;
  46. using System.Web.DynamicData;
  47. using System.Web.DynamicData.ModelProviders;
  48. using System.Web.Routing;
  49. using System.Web.UI.WebControls;
  50. using NUnit.Framework;
  51. using NUnit.Mocks;
  52. using MonoTests.stand_alone.WebHarness;
  53. using MonoTests.SystemWeb.Framework;
  54. using MonoTests.Common;
  55. using MonoTests.DataSource;
  56. using MonoTests.DataObjects;
  57. using MonoTests.ModelProviders;
  58. using MetaModel = System.Web.DynamicData.MetaModel;
  59. using MetaTable = System.Web.DynamicData.MetaTable;
  60. namespace MonoTests.System.Web.DynamicData
  61. {
  62. // IMPORTANT
  63. //
  64. // ALL tests which make use of RouteTable.Routes _MUST_ clear the collection before running
  65. //
  66. [TestFixture]
  67. public class MetaTableTest
  68. {
  69. DynamicDataContainerModelProvider <TestDataContext> dynamicModelProvider;
  70. [TestFixtureSetUp]
  71. public void SetUp ()
  72. {
  73. Type type = GetType ();
  74. WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_10.aspx", "ListView_DynamicControl_10.aspx");
  75. WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_10.aspx.cs", "ListView_DynamicControl_10.aspx.cs");
  76. dynamicModelProvider = new DynamicDataContainerModelProvider <TestDataContext> ();
  77. Utils.RegisterContext (dynamicModelProvider, new ContextConfiguration () { ScaffoldAllTables = true });
  78. }
  79. [Test]
  80. public void Attributes ()
  81. {
  82. MetaModel m = Utils.CommonInitialize ();
  83. MetaTable t = m.Tables[TestDataContext.TableFooEmpty];
  84. Assert.IsNotNull (t.Attributes, "#A1");
  85. Assert.AreEqual (0, t.Attributes.Count, "#A2");
  86. }
  87. [Test]
  88. public void Columns ()
  89. {
  90. MetaModel m = Utils.CommonInitialize ();
  91. MetaTable t = m.Tables[TestDataContext.TableFooEmpty];
  92. Assert.IsNotNull (t.Columns, "#A1");
  93. Assert.AreEqual (0, t.Columns.Count, "#A2");
  94. t = m.Tables[TestDataContext.TableFooWithDefaults];
  95. Assert.IsNotNull (t.Columns, "#B1");
  96. Assert.AreEqual (8, t.Columns.Count, "#B2");
  97. Assert.IsNotNull (t.Columns[0], "#C1");
  98. Assert.AreEqual ("Column1", t.Columns[0].Name, "#C1-1");
  99. Assert.IsNotNull (t.Columns[1], "#D1");
  100. Assert.AreEqual ("Column2", t.Columns[1].Name, "#D1-1");
  101. Assert.IsNotNull (t.Columns[2], "#E1");
  102. Assert.AreEqual ("PrimaryKeyColumn1", t.Columns[2].Name, "#E1-1");
  103. Assert.IsNotNull (t.Columns[3], "#F1");
  104. Assert.AreEqual ("PrimaryKeyColumn2", t.Columns[3].Name, "#F1-1");
  105. Assert.IsNotNull (t.Columns[4], "#G1");
  106. Assert.AreEqual ("PrimaryKeyColumn3", t.Columns[4].Name, "#G1-1");
  107. Assert.IsNotNull (t.Columns[5], "#H1");
  108. Assert.AreEqual ("ForeignKeyColumn1", t.Columns[5].Name, "#H1-1");
  109. Assert.IsNotNull (t.Columns[6], "#I1");
  110. Assert.AreEqual ("ForeignKeyColumn2", t.Columns[6].Name, "#I1-1");
  111. Assert.IsNotNull (t.Columns[7], "#J1");
  112. Assert.AreEqual ("ForeignKeyColumn3", t.Columns[7].Name, "#J1-1");
  113. }
  114. [Test]
  115. public void CreateContext ()
  116. {
  117. MetaTable t = MetaModel.Default.Tables[TestDataContext.TableFooWithDefaults];
  118. object context = t.CreateContext ();
  119. Assert.IsNotNull (context, "#A1");
  120. Assert.AreEqual (typeof (TestDataContext), context.GetType (), "#A2");
  121. }
  122. [Test]
  123. public void DataContextPropertyName ()
  124. {
  125. MetaModel m = Utils.CommonInitialize ();
  126. MetaTable t = m.Tables[TestDataContext.TableFooEmpty];
  127. Assert.AreEqual ("FooEmptyTable", t.DataContextPropertyName, "#A1");
  128. Assert.AreEqual (t.Name, t.DataContextPropertyName, "#A2");
  129. }
  130. [Test]
  131. public void DataContextType ()
  132. {
  133. MetaModel m = Utils.CommonInitialize ();
  134. MetaTable t = m.Tables[TestDataContext.TableFooEmpty];
  135. Assert.IsTrue (t.DataContextType == typeof (TestDataContext), "#A1");
  136. }
  137. [Test]
  138. public void DisplayColumn ()
  139. {
  140. MetaModel m = Utils.CommonInitialize ();
  141. MetaTable t = m.Tables[TestDataContext.TableFooDisplayColumnAttribute];
  142. MetaColumn mc = t.DisplayColumn;
  143. Assert.IsNotNull (mc, "#A1");
  144. Assert.AreEqual ("Column2", mc.Name, "#A2");
  145. t = m.Tables[TestDataContext.TableFooEmpty];
  146. AssertExtensions.Throws<ArgumentOutOfRangeException> (() => mc = t.DisplayColumn, "#B1");
  147. t = m.Tables[TestDataContext.TableFooWithDefaults];
  148. mc = t.DisplayColumn;
  149. Assert.IsNotNull (mc, "#C1");
  150. Assert.AreEqual ("Column1", mc.Name, "C2");
  151. t = m.Tables[TestDataContext.TableBaz];
  152. mc = t.DisplayColumn;
  153. Assert.IsNotNull (mc, "#D1");
  154. Assert.AreEqual ("CustomUIHintColumn", mc.Name, "#D2");
  155. t = m.Tables[TestDataContext.TableBazNoStrings];
  156. mc = t.DisplayColumn;
  157. Assert.IsNotNull (mc, "#E1");
  158. Assert.AreEqual ("PrimaryKeyColumn1", mc.Name, "#E2");
  159. t = m.Tables[TestDataContext.TableBazNoStringsNoPrimary];
  160. mc = t.DisplayColumn;
  161. Assert.IsNotNull (mc, "#F1");
  162. Assert.AreEqual ("Column1", mc.Name, "#F2");
  163. t = m.Tables[TestDataContext.TableFooInvalidDisplayColumnAttribute];
  164. AssertExtensions.Throws<InvalidOperationException> (() => mc = t.DisplayColumn, "#G1");
  165. t = m.Tables[TestDataContext.TableFooEmptyDisplayColumnAttribute];
  166. AssertExtensions.Throws<InvalidOperationException> (() => mc = t.DisplayColumn, "#G2");
  167. t = m.Tables[TestDataContext.TableFooWithMetadataType];
  168. mc = t.DisplayColumn;
  169. Assert.IsNotNull (mc, "#E1");
  170. Assert.AreEqual ("Column2", mc.Name, "#E2");
  171. }
  172. [Test]
  173. public void DisplayName ()
  174. {
  175. MetaModel m = Utils.CommonInitialize ();
  176. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  177. Assert.AreEqual ("FooWithDefaultsTable", t.DisplayName, "#A1");
  178. t = m.Tables[TestDataContext.TableFooDisplayName];
  179. Assert.AreEqual ("My name is FooDisplayName, and I am friendly", t.DisplayName, "#B1");
  180. t = m.Tables[TestDataContext.TableFooDisplayNameEmptyName];
  181. Assert.AreEqual (String.Empty, t.DisplayName, "#C1");
  182. }
  183. [Test]
  184. public void EntityType ()
  185. {
  186. MetaModel m = Utils.CommonInitialize ();
  187. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  188. Assert.IsTrue (t.EntityType == typeof (FooWithDefaults), "#A1");
  189. t = m.Tables[TestDataContext.TableFooDisplayName];
  190. Assert.IsTrue (t.EntityType == typeof (FooDisplayName), "#B1");
  191. t = m.Tables[TestDataContext.TableFooDisplayNameEmptyName];
  192. Assert.IsTrue (t.EntityType == typeof (FooDisplayNameEmptyName), "#C1");
  193. }
  194. [Test]
  195. public void ForeignKeyColumnNames ()
  196. {
  197. MetaModel m = Utils.CommonInitialize ();
  198. MetaTable t = m.Tables[TestDataContext.TableAssociatedFoo];
  199. Assert.IsNotNull (t.ForeignKeyColumnsNames, "#A1");
  200. Assert.IsFalse (t.ForeignKeyColumnsNames.Length == 0, "#A2");
  201. Assert.AreEqual ("ForeignKeyColumn1,ForeignKeyColumn2,PrimaryKeyColumn1", t.ForeignKeyColumnsNames, "#A3");
  202. }
  203. [Test]
  204. public void GetActionPath_Action ()
  205. {
  206. MetaModel m = Utils.CommonInitialize ();
  207. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  208. Assert.AreEqual (String.Empty, t.GetActionPath (null), "#A1");
  209. Assert.AreEqual (String.Empty, t.GetActionPath (String.Empty), "#A2");
  210. Assert.AreEqual (String.Empty, t.GetActionPath ("SomeInvalidValue"), "#A3");
  211. }
  212. [Test]
  213. public void GetActionPath_Action_2 ()
  214. {
  215. MetaModel m = Utils.CommonInitialize ();
  216. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  217. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details), t.GetActionPath (PageAction.Details), "#A1");
  218. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Edit), t.GetActionPath (PageAction.Edit), "#A2");
  219. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Insert), t.GetActionPath (PageAction.Insert), "#A3");
  220. Assert.AreEqual (Utils.BuildActionName (t, PageAction.List), t.GetActionPath (PageAction.List), "#A4");
  221. }
  222. [Test]
  223. public void GetActionPath_Action_3 ()
  224. {
  225. MetaModel m = MetaModel.Default;
  226. var req = new FakeHttpWorkerRequest ();
  227. var ctx = new HttpContext (req);
  228. HttpContext.Current = ctx;
  229. RouteCollection routes = RouteTable.Routes;
  230. routes.Clear ();
  231. routes.Add (new DynamicDataRoute ("{table}/ListDetails.aspx") {
  232. Action = PageAction.List,
  233. ViewName = "ListDetails",
  234. Model = m,
  235. RouteHandler = new MyDynamicDataRouteHandler ()
  236. });
  237. routes.Add (new DynamicDataRoute ("{table}/ListDetails.aspx") {
  238. Action = PageAction.Details,
  239. ViewName = "ListDetails",
  240. Model = m,
  241. RouteHandler = new MyDynamicDataRouteHandler ()
  242. });
  243. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  244. Assert.AreEqual (t.Model, m, "#A0");
  245. Assert.AreEqual (Utils.BuildActionName (t, "ListDetails"), t.GetActionPath (PageAction.Details), "#A1");
  246. Assert.AreEqual (Utils.BuildActionName (t, "ListDetails"), t.GetActionPath (PageAction.List), "#A2");
  247. // Missing routes
  248. Assert.AreEqual (String.Empty, t.GetActionPath (PageAction.Edit), "#A3");
  249. Assert.AreEqual (String.Empty, t.GetActionPath (PageAction.Insert), "#A4");
  250. // Add routes for the two above tests
  251. routes.Add (new DynamicDataRoute ("{table}/EditInsert.aspx") {
  252. Action = PageAction.Edit,
  253. ViewName = "MyEditInsert",
  254. Model = m,
  255. RouteHandler = new MyDynamicDataRouteHandler ()
  256. });
  257. routes.Add (new DynamicDataRoute ("{table}/InsertEdit.aspx") {
  258. Action = PageAction.Insert,
  259. ViewName = "MyEditInsert",
  260. Model = m,
  261. RouteHandler = new MyDynamicDataRouteHandler ()
  262. });
  263. Assert.AreEqual (Utils.BuildActionName (t, "ListDetails"), t.GetActionPath (PageAction.Details), "#B1");
  264. Assert.AreEqual (Utils.BuildActionName (t, "ListDetails"), t.GetActionPath (PageAction.List), "#B2");
  265. Assert.AreEqual (Utils.BuildActionName (t, "EditInsert"), t.GetActionPath (PageAction.Edit), "#B3");
  266. Assert.AreEqual (Utils.BuildActionName (t, "InsertEdit"), t.GetActionPath (PageAction.Insert), "#B4");
  267. }
  268. [Test]
  269. public void GetActionPath_Action_PrimaryKeyValues ()
  270. {
  271. MetaModel m = Utils.CommonInitialize ();
  272. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  273. Assert.AreEqual (String.Empty, t.GetActionPath (null, (IList<object>) null), "#A1");
  274. Assert.AreEqual (String.Empty, t.GetActionPath (String.Empty, (IList<object>) null), "#A2");
  275. Assert.AreEqual (String.Empty, t.GetActionPath ("BogusValue", (IList<object>) null), "#A3");
  276. }
  277. [Test]
  278. public void GetActionPath_Action_PrimaryKeyValues_2 ()
  279. {
  280. MetaModel m = Utils.CommonInitialize (true);
  281. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  282. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  283. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details), t.GetActionPath (PageAction.Details, (IList<object>) null), "#A1");
  284. // check the contents of the passed values dictionary
  285. //
  286. Assert.AreEqual (2, route.GetVirtualPathValues.Count, "#B1");
  287. Assert.IsTrue (route.GetVirtualPathValues.ContainsKey ("Action"), "#B1-1");
  288. Assert.AreEqual (PageAction.Details, route.GetVirtualPathValues["Action"], "#B1-2");
  289. Assert.IsTrue (route.GetVirtualPathValues.ContainsKey ("Table"), "#B1-3");
  290. Assert.AreEqual (t.Name, route.GetVirtualPathValues["Table"], "#B1-4");
  291. }
  292. [Test]
  293. public void GetActionPath_Action_PrimaryKeyValues_3 ()
  294. {
  295. MetaModel m = Utils.CommonInitialize (true);
  296. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  297. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  298. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details), t.GetActionPath (PageAction.Details, (IList<object>) null), "#A1");
  299. var dataList = new List<object> ();
  300. dataList.Add ("first item");
  301. // Yet another lack of parameter checking - the number of items passed in the dataList must be at least equal
  302. // to the number of columns in the PrimaryKeyColumns collection
  303. AssertExtensions.Throws<ArgumentOutOfRangeException> (() => t.GetActionPath (PageAction.Details, dataList), "#A2");
  304. dataList.Add (2);
  305. dataList.Add (false);
  306. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details, "PrimaryKeyColumn1=first%20item&PrimaryKeyColumn2=2&PrimaryKeyColumn3=False"), t.GetActionPath (PageAction.Details, dataList), "#A3");
  307. dataList.Clear ();
  308. dataList.Add (false);
  309. dataList.Add ("item");
  310. dataList.Add (5432);
  311. // Not even close to correct behavior, but that's how it behaves...
  312. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details, "PrimaryKeyColumn1=False&PrimaryKeyColumn2=item&PrimaryKeyColumn3=5432"), t.GetActionPath (PageAction.Details, dataList), "#A4");
  313. // check the contents of the passed values dictionary
  314. //
  315. Assert.AreEqual (5, route.GetVirtualPathValues.Count, "#B1");
  316. Assert.IsTrue (route.GetVirtualPathValues.ContainsKey ("Action"), "#B1-1");
  317. Assert.AreEqual (PageAction.Details, route.GetVirtualPathValues["Action"], "#B1-2");
  318. Assert.IsTrue (route.GetVirtualPathValues.ContainsKey ("Table"), "#B1-3");
  319. Assert.AreEqual (t.Name, route.GetVirtualPathValues["Table"], "#B1-4");
  320. }
  321. [Test]
  322. public void GetActionPath_Action_RouteValues ()
  323. {
  324. MetaModel m = Utils.CommonInitialize (true);
  325. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  326. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  327. var values = new RouteValueDictionary ();
  328. // NO null check for the routeValues parameter _again_!
  329. AssertExtensions.Throws<NullReferenceException> (() => t.GetActionPath (PageAction.Details, (RouteValueDictionary) null), "#A1");
  330. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details), t.GetActionPath (PageAction.Details, values), "#A2");
  331. Assert.AreEqual (2, values.Count, "#A3");
  332. // GetActionPath does not check if the Action and Table keys are present in the dictionary...
  333. values.Clear ();
  334. values.Add ("Action", "something");
  335. AssertExtensions.Throws<ArgumentException> (() => {
  336. t.GetActionPath (PageAction.Details, values);
  337. }, "#B1");
  338. values.Clear ();
  339. values.Add ("Table", "else");
  340. AssertExtensions.Throws<ArgumentException> (() => {
  341. t.GetActionPath (PageAction.Details, values);
  342. }, "#B2");
  343. }
  344. [Test]
  345. public void GetActionPath_Action_Row ()
  346. {
  347. MetaModel m = Utils.CommonInitialize (true);
  348. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  349. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  350. var foo = new FooWithDefaults ();
  351. Assert.AreEqual (String.Empty, t.GetActionPath (null, (object) null), "#A1");
  352. AssertExtensions.Throws<HttpException> (() => t.GetActionPath (PageAction.Details, (object) "test"), "#A2");
  353. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details, "PrimaryKeyColumn1=primary%20key%20value&PrimaryKeyColumn2=456&PrimaryKeyColumn3=True"), t.GetActionPath (PageAction.Details, foo), "#A3");
  354. t = m.Tables[TestDataContext.TableFooNoDefaultsWithPrimaryKey];
  355. var foo2 = new FooNoDefaultsWithPrimaryKey ();
  356. route.GetVirtualPathCalled = false;
  357. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details), t.GetActionPath (PageAction.Details, foo2), "#B1");
  358. Assert.AreEqual (true, route.GetVirtualPathCalled, "#B1-1");
  359. Assert.AreEqual (3, route.GetVirtualPathValues.Count, "#B1-2");
  360. route.GetVirtualPathCalled = false;
  361. foo2.PrimaryKeyColumn1 = String.Empty;
  362. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details), t.GetActionPath (PageAction.Details, foo2), "#C1");
  363. Assert.AreEqual (true, route.GetVirtualPathCalled, "#C1-1");
  364. Assert.AreEqual (3, route.GetVirtualPathValues.Count, "#C1-2");
  365. route.GetVirtualPathCalled = false;
  366. foo2.PrimaryKeyColumn1 = "SomeValue";
  367. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details, "PrimaryKeyColumn1=SomeValue"), t.GetActionPath (PageAction.Details, foo2), "#D1");
  368. Assert.AreEqual (true, route.GetVirtualPathCalled, "#D1-1");
  369. Assert.AreEqual (3, route.GetVirtualPathValues.Count, "#D1-2");
  370. }
  371. [Test]
  372. public void GetActionPath_Action_Row_Path ()
  373. {
  374. MetaModel m = Utils.CommonInitialize (true);
  375. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  376. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  377. var foo = new FooWithDefaults ();
  378. Assert.AreEqual (String.Empty, t.GetActionPath (null, (object) null, null), "#A1");
  379. Assert.AreEqual (String.Empty, t.GetActionPath (null, (object) null, String.Empty), "#A2");
  380. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details, "PrimaryKeyColumn1=primary%20key%20value&PrimaryKeyColumn2=456&PrimaryKeyColumn3=True"), t.GetActionPath (PageAction.Details, foo, null), "#A3");
  381. Assert.AreEqual ("~/SomePath.aspx", t.GetActionPath (null, (object) null, "~/SomePath.aspx"), "#A4");
  382. Assert.AreEqual ("~/SomePath.aspx?PrimaryKeyColumn1=primary%20key%20value&PrimaryKeyColumn2=456&PrimaryKeyColumn3=True", t.GetActionPath (null, foo, "~/SomePath.aspx"), "#A5");
  383. Assert.AreEqual ("~/SomePath.aspx", t.GetActionPath (PageAction.Details, (object) null, "~/SomePath.aspx"), "#A6");
  384. Assert.AreEqual ("~/SomePath.aspx?PrimaryKeyColumn1=primary%20key%20value&PrimaryKeyColumn2=456&PrimaryKeyColumn3=True", t.GetActionPath (PageAction.Details, foo, "~/SomePath.aspx"), "#A7");
  385. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details), t.GetActionPath (PageAction.Details, (object) null, null), "#A8");
  386. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details, "PrimaryKeyColumn1=primary%20key%20value&PrimaryKeyColumn2=456&PrimaryKeyColumn3=True"), t.GetActionPath (PageAction.Details, foo, null), "#A9");
  387. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details), t.GetActionPath (PageAction.Details, (object) null, String.Empty), "#A10");
  388. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details, "PrimaryKeyColumn1=primary%20key%20value&PrimaryKeyColumn2=456&PrimaryKeyColumn3=True"), t.GetActionPath (PageAction.Details, foo, String.Empty), "#A11");
  389. }
  390. [Test]
  391. public void GetActionPath_Action_PrimaryKeyValues_Path ()
  392. {
  393. MetaModel m = Utils.CommonInitialize (true);
  394. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  395. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  396. Assert.AreEqual (String.Empty, t.GetActionPath (null, (IList<object>) null, null), "#A1");
  397. Assert.AreEqual (String.Empty, t.GetActionPath (null, (IList<object>) null, String.Empty), "#A2");
  398. var dataList = new List<object> ();
  399. dataList.Add ("first item");
  400. // Yet another lack of parameter checking - the number of items passed in the dataList must be at least equal
  401. // to the number of columns in the PrimaryKeyColumns collection
  402. AssertExtensions.Throws<ArgumentOutOfRangeException> (() => t.GetActionPath (PageAction.Details, dataList), "#A3");
  403. dataList.Add (2);
  404. dataList.Add (false);
  405. route.GetVirtualPathCalled = false;
  406. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details, "PrimaryKeyColumn1=first%20item&PrimaryKeyColumn2=2&PrimaryKeyColumn3=False"), t.GetActionPath (PageAction.Details, dataList, null), "#A4");
  407. Assert.AreEqual (true, route.GetVirtualPathCalled, "#A4-1");
  408. route.GetVirtualPathCalled = false;
  409. Assert.AreEqual ("~/SomePath.aspx", t.GetActionPath (null, (IList<object>) null, "~/SomePath.aspx"), "#A5");
  410. Assert.AreEqual (false, route.GetVirtualPathCalled, "#A5-1");
  411. route.GetVirtualPathCalled = false;
  412. Assert.AreEqual ("~/SomePath.aspx?PrimaryKeyColumn1=first%20item&PrimaryKeyColumn2=2&PrimaryKeyColumn3=False", t.GetActionPath (null, dataList, "~/SomePath.aspx"), "#A6");
  413. Assert.AreEqual (false, route.GetVirtualPathCalled, "#A6-1");
  414. route.GetVirtualPathCalled = false;
  415. Assert.AreEqual ("~/SomePath.aspx", t.GetActionPath (PageAction.Details, (IList<object>) null, "~/SomePath.aspx"), "#A7");
  416. Assert.AreEqual (false, route.GetVirtualPathCalled, "#A7-1");
  417. route.GetVirtualPathCalled = false;
  418. Assert.AreEqual ("~/SomePath.aspx?PrimaryKeyColumn1=first%20item&PrimaryKeyColumn2=2&PrimaryKeyColumn3=False", t.GetActionPath (PageAction.Details, dataList, "~/SomePath.aspx"), "#A8");
  419. Assert.AreEqual (false, route.GetVirtualPathCalled, "#A8-1");
  420. route.GetVirtualPathCalled = false;
  421. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details), t.GetActionPath (PageAction.Details, (IList<object>) null, null), "#A9");
  422. Assert.AreEqual (true, route.GetVirtualPathCalled, "#A9-1");
  423. route.GetVirtualPathCalled = false;
  424. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details, "PrimaryKeyColumn1=first%20item&PrimaryKeyColumn2=2&PrimaryKeyColumn3=False"), t.GetActionPath (PageAction.Details, dataList, null), "#A10");
  425. Assert.AreEqual (true, route.GetVirtualPathCalled, "#A10-1");
  426. route.GetVirtualPathCalled = false;
  427. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details), t.GetActionPath (PageAction.Details, (IList<object>) null, String.Empty), "#A11");
  428. Assert.AreEqual (true, route.GetVirtualPathCalled, "#A11-1");
  429. route.GetVirtualPathCalled = false;
  430. Assert.AreEqual (Utils.BuildActionName (t, PageAction.Details, "PrimaryKeyColumn1=first%20item&PrimaryKeyColumn2=2&PrimaryKeyColumn3=False"), t.GetActionPath (PageAction.Details, dataList, String.Empty), "#A12");
  431. Assert.AreEqual (true, route.GetVirtualPathCalled, "#A12-1");
  432. }
  433. [Test]
  434. public void GetColumn ()
  435. {
  436. MetaModel m = Utils.CommonInitialize (true);
  437. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  438. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  439. AssertExtensions.Throws<ArgumentNullException> (() => t.GetColumn (null), "#A1");
  440. AssertExtensions.Throws<InvalidOperationException> (() => t.GetColumn (String.Empty), "#A2");
  441. AssertExtensions.Throws<InvalidOperationException> (() => t.GetColumn ("NoSuchColumn"), "#A3");
  442. MetaColumn mc = t.GetColumn ("Column1");
  443. Assert.IsNotNull (mc, "#B1");
  444. Assert.AreEqual ("Column1", mc.Name, "#B1-2");
  445. }
  446. [Test]
  447. public void GetDisplayString ()
  448. {
  449. MetaModel m = Utils.CommonInitialize (true);
  450. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  451. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  452. var foo = new FooWithDefaults ();
  453. Assert.AreEqual (String.Empty, t.GetDisplayString (null), "#A1");
  454. AssertExtensions.Throws<HttpException> (() => t.GetDisplayString (String.Empty), "#A2");
  455. Assert.AreEqual ("hello", t.GetDisplayString (foo), "#A3");
  456. AssertExtensions.Throws<HttpException> (() => t.GetDisplayString ("TestString"), "#A4");
  457. // The method looks at the entity type to see if it has an overriden ToString method,
  458. // it ignores such methods on the passed "row"
  459. var foo2 = new FooWithToString ();
  460. Assert.AreEqual ("hello", t.GetDisplayString (foo2), "#B1");
  461. t = m.Tables[TestDataContext.TableFooWithToString];
  462. Assert.AreEqual ("ValueFrom_ToString", t.GetDisplayString (foo2), "#C1");
  463. // If we pass an object which is not of EntityType,
  464. // the method returns the result of row.ToString ()
  465. Assert.AreEqual (foo.GetType ().ToString (), t.GetDisplayString (foo), "#C2");
  466. var foo3 = new FooNoDefaultsWithPrimaryKey ();
  467. t = m.Tables[TestDataContext.TableFooNoDefaultsWithPrimaryKey];
  468. Assert.AreEqual (String.Empty, t.GetDisplayString (foo3), "#D1");
  469. }
  470. [Test]
  471. public void GetPrimaryKeyString_PrimaryKeyValues ()
  472. {
  473. MetaModel m = Utils.CommonInitialize (true);
  474. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  475. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  476. var values = new List<object> ();
  477. Assert.AreEqual (String.Empty, t.GetPrimaryKeyString ((IList<object>) null), "#A1");
  478. Assert.AreEqual (String.Empty, t.GetPrimaryKeyString (values), "#A2");
  479. values.Add ("string");
  480. Assert.AreEqual ("string", t.GetPrimaryKeyString (values), "#B1");
  481. values.Add (123);
  482. Assert.AreEqual ("string,123", t.GetPrimaryKeyString (values), "#B2");
  483. values.Add (false);
  484. Assert.AreEqual ("string,123,False", t.GetPrimaryKeyString (values), "#B3");
  485. values.Add (true);
  486. Assert.AreEqual ("string,123,False,True", t.GetPrimaryKeyString (values), "#B4");
  487. values.Clear ();
  488. values.Add (false);
  489. values.Add ("string");
  490. values.Add (123);
  491. Assert.AreEqual ("False,string,123", t.GetPrimaryKeyString (values), "#C1");
  492. values.Add (null);
  493. Assert.AreEqual ("False,string,123,", t.GetPrimaryKeyString (values), "#C2");
  494. values.Add (null);
  495. values.Add ("another string");
  496. Assert.AreEqual ("False,string,123,,,another string", t.GetPrimaryKeyString (values), "#C3");
  497. values.Clear ();
  498. values.Add (null);
  499. Assert.AreEqual (String.Empty, t.GetPrimaryKeyString (values), "#D1");
  500. values.Add (null);
  501. Assert.AreEqual (String.Empty, t.GetPrimaryKeyString (values), "#D2");
  502. values.Add (String.Empty);
  503. Assert.AreEqual (",,", t.GetPrimaryKeyString (values), "#D3");
  504. values.Add (null);
  505. Assert.AreEqual (",,,", t.GetPrimaryKeyString (values), "#D4");
  506. }
  507. [Test]
  508. public void GetPrimaryKeyString_Row ()
  509. {
  510. MetaModel m = Utils.CommonInitialize (true);
  511. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  512. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  513. var foo = new FooWithDefaults ();
  514. Assert.AreEqual (String.Empty, t.GetPrimaryKeyString ((object) null), "#A1");
  515. Assert.AreEqual ("primary key value,456,True", t.GetPrimaryKeyString (foo), "#A2");
  516. var foo2 = new FooNoDefaultsWithPrimaryKey ();
  517. AssertExtensions.Throws<HttpException> (() => t.GetPrimaryKeyString (foo2), "#B1");
  518. t = m.Tables[TestDataContext.TableFooSettableDefaults];
  519. var foo3 = new FooSettableDefaults (null, null, null);
  520. Assert.AreEqual (String.Empty, t.GetPrimaryKeyString (foo3), "#C1");
  521. foo3 = new FooSettableDefaults (null, String.Empty, null);
  522. Assert.AreEqual (",,", t.GetPrimaryKeyString (foo3), "#C2");
  523. foo3 = new FooSettableDefaults (String.Empty, null, null);
  524. Assert.AreEqual (",,", t.GetPrimaryKeyString (foo3), "#C2");
  525. }
  526. [Test]
  527. public void GetPrimaryKeyValues ()
  528. {
  529. MetaModel m = Utils.CommonInitialize (true);
  530. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  531. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  532. var foo = new FooWithDefaults ();
  533. Assert.IsNull (t.GetPrimaryKeyValues (null), "#A1");
  534. AssertExtensions.Throws<HttpException> (() => t.GetPrimaryKeyValues ("test"), "#A2");
  535. IList<object> ret = t.GetPrimaryKeyValues (foo);
  536. Assert.IsNotNull (ret, "#B1");
  537. Assert.AreEqual (3, ret.Count, "#B2");
  538. Assert.IsNotNull (ret[0], "#B2-1");
  539. Assert.IsTrue (ret[0] is string, "#B2-2");
  540. Assert.AreEqual ("primary key value", ret[0], "#B2-3");
  541. Assert.IsNotNull (ret[1], "#B2-4");
  542. Assert.IsTrue (ret[1] is int, "#B2-5");
  543. Assert.AreEqual (456, ret[1], "#B2-6");
  544. Assert.IsNotNull (ret[2], "#B2-7");
  545. Assert.IsTrue (ret[2] is bool, "#B2-8");
  546. Assert.AreEqual (true, ret[2], "#B2-9");
  547. t = m.Tables[TestDataContext.TableFooNoPrimaryColumns];
  548. var foo2 = new FooNoPrimaryColumns ();
  549. ret = t.GetPrimaryKeyValues (foo2);
  550. Assert.IsNotNull (ret, "#C1");
  551. Assert.AreEqual (0, ret.Count, "#C2");
  552. }
  553. [Test]
  554. public void GetPrimaryKeyValues_01 ()
  555. {
  556. var test = new WebTest ("ListView_DynamicControl_10.aspx");
  557. test.Invoker = PageInvoker.CreateOnInit (GetPrimaryKeyValues_01_OnInit);
  558. var p = test.Run ();
  559. Assert.IsNotNull (test.Response, "#X1");
  560. Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
  561. Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
  562. Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
  563. }
  564. static void GetPrimaryKeyValues_01_OnInit (Page p)
  565. {
  566. var lc = p.FindControl ("ListView1") as ListView;
  567. Assert.IsNotNull (lc, "#A1");
  568. var page = p as TestsBasePage<TestDataContext3>;
  569. Assert.IsNotNull (p, "#A1-1");
  570. page.ItemDataBinding += new EventHandler (GetPrimaryKeyValues_01_ListControl_OnItemDataBinding);
  571. }
  572. static void GetPrimaryKeyValues_01_ListControl_OnItemDataBinding (object sender, EventArgs e)
  573. {
  574. var dc = sender as DynamicControl;
  575. Assert.IsNotNull (dc, "#B1");
  576. Assert.AreEqual ("PrimaryKeyColumn2", dc.ID, "#B1-1");
  577. Assert.AreEqual (typeof (MetaChildrenColumn), dc.Column.GetType (), "#B1-2");
  578. var field = dc.FieldTemplate as PokerFieldTemplateUserControl;
  579. Assert.IsNotNull (field, "#C1");
  580. var keyValues = dc.Table.GetPrimaryKeyValues (field.Row);
  581. Assert.IsNotNull (keyValues, "#D1");
  582. Assert.AreEqual (2, keyValues.Count, "#D1-1");
  583. Assert.AreEqual (typeof (string), keyValues[0].GetType (), "#D1-2");
  584. Assert.AreEqual ("Marek", (string)keyValues[0], "#D1-3");
  585. Assert.AreEqual (typeof (int), keyValues[1].GetType (), "D1-4");
  586. Assert.AreEqual (2, (int)keyValues[1], "#D1-5");
  587. }
  588. [Test]
  589. public void GetQuery ()
  590. {
  591. MetaModel m = Utils.GetModel<MyDataContext2> ();
  592. var req = new FakeHttpWorkerRequest ();
  593. var ctx = new HttpContext (req);
  594. HttpContext.Current = ctx;
  595. RouteCollection routes = RouteTable.Routes;
  596. routes.Clear ();
  597. var route = new MyDynamicDataRoute ("{table}/{action}.aspx") {
  598. Constraints = new RouteValueDictionary (new { action = "List|Details|Edit|Insert" }),
  599. Model = m,
  600. RouteHandler = new MyDynamicDataRouteHandler ()
  601. };
  602. routes.Add (route);
  603. MetaTable t = m.GetTable ("FooTable"); ;
  604. IQueryable query = t.GetQuery ();
  605. Assert.IsNotNull (query, "#A1");
  606. Assert.IsTrue (query.GetType () == typeof (Table<Foo>), "#A2");
  607. }
  608. [Test]
  609. public void GetQuery_Context ()
  610. {
  611. MetaModel m = Utils.GetModel<MyDataContext2> ();
  612. var req = new FakeHttpWorkerRequest ();
  613. var ctx = new HttpContext (req);
  614. HttpContext.Current = ctx;
  615. RouteCollection routes = RouteTable.Routes;
  616. routes.Clear ();
  617. var route = new MyDynamicDataRoute ("{table}/{action}.aspx") {
  618. Constraints = new RouteValueDictionary (new { action = "List|Details|Edit|Insert" }),
  619. Model = m,
  620. RouteHandler = new MyDynamicDataRouteHandler ()
  621. };
  622. routes.Add (route);
  623. MetaTable t = m.GetTable ("FooTable"); ;
  624. IQueryable query = t.GetQuery (null);
  625. Assert.IsNotNull (query, "#A1");
  626. Assert.IsTrue (query.GetType () == typeof (Table<Foo>), "#A2");
  627. var foo = new Foo (true);
  628. AssertExtensions.Throws (() => t.GetQuery (foo), "#B1");
  629. }
  630. [Test]
  631. public void HasPrimaryKey ()
  632. {
  633. MetaModel m = Utils.CommonInitialize ();
  634. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  635. Assert.IsTrue (t.HasPrimaryKey, "#A1");
  636. t = m.Tables[TestDataContext.TableFooNoPrimaryColumns];
  637. Assert.IsFalse (t.HasPrimaryKey, "#A2");
  638. }
  639. [Test]
  640. public void IsReadOnly ()
  641. {
  642. MetaModel m = Utils.CommonInitialize ();
  643. // According to this thread http://forums.asp.net/t/1388561.aspx IsReadOnly is set
  644. // whenever a table doesn't have a primary key.
  645. MetaTable t = m.Tables[TestDataContext.TableBazNoStringsNoPrimary];
  646. Assert.IsTrue (t.IsReadOnly, "#A1");
  647. // According to the same article above, the ReadOnly attribute does not and will not
  648. // apply to tables, just columns.
  649. t = m.Tables[TestDataContext.TableFooReadOnly];
  650. Assert.IsFalse (t.IsReadOnly, "#A2");
  651. }
  652. [Test]
  653. public void ListActionPath ()
  654. {
  655. MetaModel m = Utils.CommonInitialize ();
  656. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  657. Assert.AreEqual (Utils.BuildActionName (t, PageAction.List), t.ListActionPath, "#A1");
  658. t = m.Tables[TestDataContext.TableAssociatedBar];
  659. Assert.AreEqual (Utils.BuildActionName (t, PageAction.List), t.ListActionPath, "#A2");
  660. }
  661. [Test]
  662. public void Model ()
  663. {
  664. MetaModel m = Utils.CommonInitialize ();
  665. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  666. Assert.IsTrue (t.Model == m, "#A1");
  667. }
  668. [Test]
  669. public void Name ()
  670. {
  671. MetaModel m = Utils.CommonInitialize ();
  672. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  673. Assert.IsNotNull (t.Name, "#A1");
  674. Assert.IsTrue (t.Name.Length > 0, "#A2");
  675. Assert.AreEqual ("FooWithDefaultsTable", t.Name, "#A3");
  676. }
  677. [Test]
  678. public void PrimaryKeyColumns ()
  679. {
  680. MetaModel m = Utils.CommonInitialize (true);
  681. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  682. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  683. Assert.AreEqual (3, t.PrimaryKeyColumns.Count, "#A1");
  684. Assert.AreEqual ("PrimaryKeyColumn1", t.PrimaryKeyColumns[0].Name, "#A2");
  685. Assert.IsTrue (t.PrimaryKeyColumns[0].ColumnType == typeof (string), "#A2-1");
  686. Assert.AreEqual ("PrimaryKeyColumn2", t.PrimaryKeyColumns[1].Name, "#A3");
  687. Assert.IsTrue (t.PrimaryKeyColumns[1].ColumnType == typeof (int), "#A3-1");
  688. Assert.AreEqual ("PrimaryKeyColumn3", t.PrimaryKeyColumns[2].Name, "#A4");
  689. Assert.IsTrue (t.PrimaryKeyColumns[2].ColumnType == typeof (bool), "#A4-1");
  690. t = m.Tables[TestDataContext.TableBazNoStringsNoPrimary];
  691. Assert.AreEqual (0, t.PrimaryKeyColumns.Count, "#B1");
  692. }
  693. [Test]
  694. public void Provider ()
  695. {
  696. MetaModel m = Utils.CommonInitialize (true);
  697. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  698. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  699. Assert.IsTrue (t.Provider != null, "#A1");
  700. Assert.AreEqual ("FooWithDefaultsTable", t.Provider.Name, "#A1");
  701. }
  702. [Test]
  703. public void Scaffold ()
  704. {
  705. MetaModel m = Utils.CommonInitialize (true);
  706. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  707. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  708. Assert.AreEqual (true, t.Scaffold, "#A1");
  709. t = m.Tables[TestDataContext.TableFooNoScaffold];
  710. Assert.AreEqual (false, t.Scaffold, "#A2");
  711. }
  712. [Test]
  713. public void SortColumn ()
  714. {
  715. MetaModel m = Utils.CommonInitialize (true);
  716. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  717. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  718. Assert.IsNull (t.SortColumn, "#A1");
  719. t = m.Tables[TestDataContext.TableFooDisplayColumnAttribute];
  720. Assert.IsNotNull (t.SortColumn, "#B1");
  721. Assert.AreEqual ("Column1", t.SortColumn.Name, "#B2");
  722. MetaColumn mc;
  723. t = m.Tables[TestDataContext.TableFooMisnamedSortColumn];
  724. AssertExtensions.Throws <InvalidOperationException> (() => mc = t.SortColumn, "#C1");
  725. t = m.Tables[TestDataContext.TableFooEmptySortColumn];
  726. Assert.IsNull (t.SortColumn, "#D1");
  727. }
  728. [Test]
  729. public void SortDescending ()
  730. {
  731. MetaModel m = Utils.CommonInitialize (true);
  732. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  733. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  734. Assert.AreEqual (false, t.SortDescending, "#A1");
  735. t = m.Tables[TestDataContext.TableFooDisplayColumnAttribute];
  736. Assert.AreEqual (true, t.SortDescending, "#B1");
  737. }
  738. [Test]
  739. public void ToStringTest ()
  740. {
  741. MetaModel m = Utils.CommonInitialize (true);
  742. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  743. MetaTable t = m.Tables[TestDataContext.TableBar];
  744. Assert.AreEqual (t.Name, t.ToString (), "#A1");
  745. t = m.Tables[TestDataContext.TableFooNoDefaultsWithPrimaryKey];
  746. Assert.AreEqual (t.Name, t.ToString (), "#A2");
  747. }
  748. [Test]
  749. public void TryGetColumn ()
  750. {
  751. MetaModel m = Utils.CommonInitialize (true);
  752. var route = RouteTable.Routes[0] as MyDynamicDataRoute;
  753. MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults];
  754. MetaColumn mc = null;
  755. AssertExtensions.Throws<ArgumentNullException> (() => t.TryGetColumn (null, out mc), "#A1");
  756. Assert.IsFalse (t.TryGetColumn (String.Empty, out mc), "#A2");
  757. Assert.IsNull (mc, "#A2-1");
  758. Assert.IsTrue (t.TryGetColumn ("Column1", out mc), "#A3");
  759. Assert.IsNotNull (mc, "#A3-1");
  760. Assert.AreEqual ("Column1", mc.Name, "#A3-2");
  761. }
  762. }
  763. }