DataRowTest.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433
  1. // DataRowTest.cs - NUnit Test Cases for System.DataRow
  2. //
  3. // Authors:
  4. // Franklin Wise ([email protected])
  5. // Daniel Morgan <[email protected]>
  6. //
  7. // (C) Copyright 2002 Franklin Wise
  8. // (C) Copyright 2003 Daniel Morgan
  9. // (C) Copyright 2003 Martin Willemoes Hansen
  10. //
  11. using NUnit.Framework;
  12. using System;
  13. using System.Data;
  14. namespace MonoTests.System.Data
  15. {
  16. [TestFixture]
  17. public class DataRowTest : Assertion {
  18. private DataTable _tbl;
  19. [SetUp]
  20. public void GetReady() {
  21. _tbl = new DataTable();
  22. }
  23. // tests item at row, column in table to be DBNull.Value
  24. private void DBNullTest (string message, DataTable dt, int row, int column)
  25. {
  26. object val = dt.Rows[row].ItemArray[column];
  27. AssertEquals(message, DBNull.Value, val);
  28. }
  29. // tests item at row, column in table to be null
  30. private void NullTest (string message, DataTable dt, int row, int column)
  31. {
  32. object val = dt.Rows[row].ItemArray[column];
  33. AssertEquals(message, null, val);
  34. }
  35. // tests item at row, column in table to be
  36. private void ValueTest (string message, DataTable dt, int row, int column, object value)
  37. {
  38. object val = dt.Rows[row].ItemArray[column];
  39. AssertEquals(message, value, val);
  40. }
  41. // test set null, DBNull.Value, and ItemArray short count
  42. [Test]
  43. public void NullInItemArray ()
  44. {
  45. string zero = "zero";
  46. string one = "one";
  47. string two = "two";
  48. DataTable table = new DataTable();
  49. table.Columns.Add(new DataColumn(zero, typeof(string)));
  50. table.Columns.Add(new DataColumn(one, typeof(string)));
  51. table.Columns.Add(new DataColumn(two, typeof(string)));
  52. object[] obj = new object[3];
  53. // -- normal -----------------
  54. obj[0] = zero;
  55. obj[1] = one;
  56. obj[2] = two;
  57. // results:
  58. // table.Rows[0].ItemArray.ItemArray[0] = "zero"
  59. // table.Rows[0].ItemArray.ItemArray[1] = "one"
  60. // table.Rows[0].ItemArray.ItemArray[2] = "two"
  61. DataRow row = table.NewRow();
  62. try {
  63. row.ItemArray = obj;
  64. }
  65. catch(Exception e1) {
  66. Fail("DR1: Exception Caught: " + e1);
  67. }
  68. table.Rows.Add(row);
  69. // -- null ----------
  70. obj[1] = null;
  71. // results:
  72. // table.Rows[1].ItemArray.ItemArray[0] = "zero"
  73. // table.Rows[1].ItemArray.ItemArray[1] = DBNull.Value
  74. // table.Rows[1].ItemArray.ItemArray[2] = "two"
  75. row = table.NewRow();
  76. try {
  77. row.ItemArray = obj;
  78. }
  79. catch(Exception e2) {
  80. Fail("DR2: Exception Caught: " + e2);
  81. }
  82. table.Rows.Add(row);
  83. // -- DBNull.Value -------------
  84. obj[1] = DBNull.Value;
  85. // results:
  86. // table.Rows[2].ItemArray.ItemArray[0] = "zero"
  87. // table.Rows[2].ItemArray.ItemArray[1] = DBNull.Value
  88. // table.Rows[2].ItemArray.ItemArray[2] = "two"
  89. row = table.NewRow();
  90. try {
  91. row.ItemArray = obj;
  92. }
  93. catch(Exception e3) {
  94. Fail("DR3: Exception Caught: " + e3);
  95. }
  96. table.Rows.Add(row);
  97. // -- object array smaller than number of columns -----
  98. string abc = "abc";
  99. string def = "def";
  100. obj = new object[2];
  101. obj[0] = abc;
  102. obj[1] = def;
  103. // results:
  104. // table.Rows[3].ItemArray.ItemArray[0] = "abc"
  105. // table.Rows[3].ItemArray.ItemArray[1] = "def"
  106. // table.Rows[3].ItemArray.ItemArray[2] = DBNull.Value;
  107. row = table.NewRow();
  108. try {
  109. row.ItemArray = obj;
  110. }
  111. catch(Exception e3) {
  112. Fail("DR4: Exception Caught: " + e3);
  113. }
  114. table.Rows.Add(row);
  115. // -- normal -----------------
  116. ValueTest("DR5: normal value test", table, 0, 0, zero);
  117. ValueTest("DR6: normal value test", table, 0, 1, one);
  118. ValueTest("DR7: normal value test", table, 0, 2, two);
  119. // -- null ----------
  120. ValueTest("DR8: null value test", table, 1, 0, zero);
  121. ValueTest("DR9: null value test", table, 1, 1, DBNull.Value);
  122. ValueTest("DR10: null value test", table, 1, 2, two);
  123. // -- DBNull.Value -------------
  124. ValueTest("DR11: DBNull.Value value test", table, 2, 0, zero);
  125. ValueTest("DR12: DBNull.Value value test", table, 2, 1, DBNull.Value);
  126. ValueTest("DR13: DBNull.Value value test", table, 2, 2, two);
  127. // -- object array smaller than number of columns -----
  128. ValueTest("DR14: array smaller value test", table, 3, 0, abc);
  129. ValueTest("DR15: array smaller value test", table, 3, 1, def);
  130. ValueTest("DR16: array smaller value test", table, 3, 2, DBNull.Value);
  131. }
  132. // test DefaultValue when setting ItemArray
  133. [Test]
  134. public void DefaultValueInItemArray () {
  135. string zero = "zero";
  136. DataTable table = new DataTable();
  137. table.Columns.Add(new DataColumn("zero", typeof(string)));
  138. DataColumn column = new DataColumn("num", typeof(int));
  139. column.DefaultValue = 15;
  140. table.Columns.Add(column);
  141. object[] obj = new object[2];
  142. // -- normal -----------------
  143. obj[0] = "zero";
  144. obj[1] = 8;
  145. // results:
  146. // table.Rows[0].ItemArray.ItemArray[0] = "zero"
  147. // table.Rows[0].ItemArray.ItemArray[1] = 8
  148. DataRow row = table.NewRow();
  149. try {
  150. row.ItemArray = obj;
  151. }
  152. catch(Exception e1) {
  153. Fail("DR17: Exception Caught: " + e1);
  154. }
  155. table.Rows.Add(row);
  156. // -- null ----------
  157. obj[1] = null;
  158. // results:
  159. // table.Rows[1].ItemArray.ItemArray[0] = "zero"
  160. // table.Rows[1].ItemArray.ItemArray[1] = 15
  161. row = table.NewRow();
  162. try {
  163. row.ItemArray = obj;
  164. }
  165. catch(Exception e2) {
  166. Fail("DR18: Exception Caught: " + e2);
  167. }
  168. table.Rows.Add(row);
  169. // -- DBNull.Value -------------
  170. obj[1] = DBNull.Value;
  171. // results:
  172. // table.Rows[2].ItemArray.ItemArray[0] = "zero"
  173. // table.Rows[2].ItemArray.ItemArray[1] = DBNull.Value
  174. // even though internally, the v
  175. row = table.NewRow();
  176. try {
  177. row.ItemArray = obj;
  178. }
  179. catch(Exception e3) {
  180. Fail("DR19: Exception Caught: " + e3);
  181. }
  182. table.Rows.Add(row);
  183. // -- object array smaller than number of columns -----
  184. string abc = "abc";
  185. string def = "def";
  186. obj = new object[2];
  187. obj[0] = abc;
  188. // results:
  189. // table.Rows[3].ItemArray.ItemArray[0] = "abc"
  190. // table.Rows[3].ItemArray.ItemArray[1] = DBNull.Value
  191. row = table.NewRow();
  192. try {
  193. row.ItemArray = obj;
  194. }
  195. catch(Exception e3) {
  196. Fail("DR20: Exception Caught: " + e3);
  197. }
  198. table.Rows.Add(row);
  199. // -- normal -----------------
  200. ValueTest("DR20: normal value test", table, 0, 0, zero);
  201. ValueTest("DR21: normal value test", table, 0, 1, 8);
  202. // -- null ----------
  203. ValueTest("DR22: null value test", table, 1, 0, zero);
  204. ValueTest("DR23: null value test", table, 1, 1, 15);
  205. // -- DBNull.Value -------------
  206. ValueTest("DR24: DBNull.Value value test", table, 2, 0, zero);
  207. DBNullTest("DR25: DBNull.Value value test", table, 2, 1);
  208. // -- object array smaller than number of columns -----
  209. ValueTest("DR26: array smaller value test", table, 3, 0, abc);
  210. ValueTest("DR27: array smaller value test", table, 3, 1, 15);
  211. }
  212. // test AutoIncrement when setting ItemArray
  213. [Test]
  214. public void AutoIncrementInItemArray () {
  215. string zero = "zero";
  216. string num = "num";
  217. DataTable table = new DataTable();
  218. table.Columns.Add(new DataColumn(zero, typeof(string)));
  219. DataColumn column = new DataColumn("num", typeof(int));
  220. column.AutoIncrement = true;
  221. table.Columns.Add(column);
  222. object[] obj = new object[2];
  223. // -- normal -----------------
  224. obj[0] = "zero";
  225. obj[1] = 8;
  226. // results:
  227. // table.Rows[0].ItemArray.ItemArray[0] = "zero"
  228. // table.Rows[0].ItemArray.ItemArray[1] = 8
  229. DataRow row = table.NewRow();
  230. try {
  231. row.ItemArray = obj;
  232. }
  233. catch(Exception e1) {
  234. Fail("DR28: Exception Caught: " + e1);
  235. }
  236. table.Rows.Add(row);
  237. // -- null 1----------
  238. obj[1] = null;
  239. // results:
  240. // table.Rows[1].ItemArray.ItemArray[0] = "zero"
  241. // table.Rows[1].ItemArray.ItemArray[1] = 9
  242. row = table.NewRow();
  243. try {
  244. row.ItemArray = obj;
  245. }
  246. catch(Exception e2) {
  247. Fail("DR29: Exception Caught: " + e2);
  248. }
  249. table.Rows.Add(row);
  250. // -- null 2----------
  251. obj[1] = null;
  252. // results:
  253. // table.Rows[1].ItemArray.ItemArray[0] = "zero"
  254. // table.Rows[1].ItemArray.ItemArray[1] = 10
  255. row = table.NewRow();
  256. try {
  257. row.ItemArray = obj;
  258. }
  259. catch(Exception e2) {
  260. Fail("DR30: Exception Caught: " + e2);
  261. }
  262. table.Rows.Add(row);
  263. // -- null 3----------
  264. obj[1] = null;
  265. // results:
  266. // table.Rows[1].ItemArray.ItemArray[0] = "zero"
  267. // table.Rows[1].ItemArray.ItemArray[1] = 11
  268. row = table.NewRow();
  269. try {
  270. row.ItemArray = obj;
  271. }
  272. catch(Exception e2) {
  273. Fail("DR31: Exception Caught: " + e2);
  274. }
  275. table.Rows.Add(row);
  276. // -- DBNull.Value -------------
  277. obj[1] = DBNull.Value;
  278. // results:
  279. // table.Rows[2].ItemArray.ItemArray[0] = "zero"
  280. // table.Rows[2].ItemArray.ItemArray[1] = DBNull.Value
  281. // even though internally, the AutoIncrement value
  282. // is incremented
  283. row = table.NewRow();
  284. try {
  285. row.ItemArray = obj;
  286. }
  287. catch(Exception e3) {
  288. Fail("DR32: Exception Caught: " + e3);
  289. }
  290. table.Rows.Add(row);
  291. // -- null 4----------
  292. obj[1] = null;
  293. // results:
  294. // table.Rows[1].ItemArray.ItemArray[0] = "zero"
  295. // table.Rows[1].ItemArray.ItemArray[1] = 13
  296. row = table.NewRow();
  297. try {
  298. row.ItemArray = obj;
  299. }
  300. catch(Exception e2) {
  301. Fail("DR48: Exception Caught: " + e2);
  302. }
  303. table.Rows.Add(row);
  304. // -- object array smaller than number of columns -----
  305. string abc = "abc";
  306. string def = "def";
  307. obj = new object[2];
  308. obj[0] = abc;
  309. // results:
  310. // table.Rows[3].ItemArray.ItemArray[0] = "abc"
  311. // table.Rows[3].ItemArray.ItemArray[1] = 14
  312. row = table.NewRow();
  313. try {
  314. row.ItemArray = obj;
  315. }
  316. catch(Exception e3) {
  317. Fail("DR33: Exception Caught: " + e3);
  318. }
  319. table.Rows.Add(row);
  320. // -- normal -----------------
  321. ValueTest("DR34: normal value test", table, 0, 0, zero);
  322. ValueTest("DR35: normal value test", table, 0, 1, 8);
  323. // -- null 1----------
  324. ValueTest("DR36: null value test", table, 1, 0, zero);
  325. ValueTest("DR37: null value test", table, 1, 1, 9);
  326. // -- null 2----------
  327. ValueTest("DR38: null value test", table, 2, 0, zero);
  328. ValueTest("DR39: null value test", table, 2, 1, 10);
  329. // -- null 3----------
  330. ValueTest("DR40: null value test", table, 3, 0, zero);
  331. ValueTest("DR41: null value test", table, 3, 1, 11);
  332. // -- DBNull.Value -------------
  333. ValueTest("DR42: DBNull.Value value test", table, 4, 0, zero);
  334. ValueTest("DR43: DBNull.Value value test", table, 4, 1, DBNull.Value);
  335. // -- null 4----------
  336. ValueTest("DR44: null value test", table, 5, 0, zero);
  337. ValueTest("DR45: null value test", table, 5, 1, 13);
  338. // -- object array smaller than number of columns -----
  339. ValueTest("DR46: array smaller value test", table, 6, 0, abc);
  340. ValueTest("DR47: array smaller value test", table, 6, 1, 14);
  341. }
  342. }
  343. }