[bcl] Add NUnitHelper.cs with API not in nunit-lite
[mono.git] / mcs / class / System.Data.Linq / src / DbLinq / Test / Providers / Table.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Linq;\r
4 using System.Text;\r
5 using Test_NUnit;\r
6 using NUnit.Framework;\r
7 using Test_NUnit.Linq_101_Samples;\r
8 using System.Data.Linq;\r
9 \r
10 using nwind;\r
11 \r
12 // test ns \r
13 #if MYSQL\r
14     namespace Test_NUnit_MySql\r
15 #elif ORACLE && ODP\r
16     namespace Test_NUnit_OracleODP\r
17 #elif ORACLE\r
18     namespace Test_NUnit_Oracle\r
19 #elif POSTGRES\r
20     namespace Test_NUnit_PostgreSql\r
21 #elif SQLITE\r
22     namespace Test_NUnit_Sqlite\r
23 #elif INGRES\r
24     namespace Test_NUnit_Ingres\r
25 #elif MSSQL && L2SQL\r
26     namespace Test_NUnit_MsSql_Strict\r
27 #elif MSSQL\r
28     namespace Test_NUnit_MsSql\r
29 #elif FIREBIRD\r
30     namespace Test_NUnit_Firebird\r
31 #endif\r
32 {\r
33     [TestFixture]\r
34     public class Table : TestBase\r
35     {\r
36         [Test]\r
37         public void BasicAccess()\r
38         {\r
39             var db = CreateDB();\r
40             var customers = db.Customers.ToArray();\r
41         }\r
42 \r
43 #if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL))\r
44         [Explicit]\r
45 #endif\r
46         [Test]\r
47         public void GetModifiedMembers()\r
48         {\r
49             var db = CreateDB();\r
50             var customer = db.Customers.First();\r
51 \r
52             string beforeCountry = customer.Country;\r
53             string afterCountry = "Spain";\r
54             customer.Country = afterCountry;\r
55 \r
56             string beforeFax = customer.Fax;\r
57             string afterFax = "4823-435-6456";\r
58             customer.Fax = afterFax;\r
59 \r
60             ModifiedMemberInfo[] modifiedInfoList = db.Customers.GetModifiedMembers(customer);\r
61             Assert.AreEqual(modifiedInfoList.Count(), 2);\r
62 \r
63             ModifiedMemberInfo modInfo = modifiedInfoList.First();\r
64             Assert.AreEqual(modInfo.Member, typeof(Customer).GetProperty("Country"));\r
65             Assert.AreEqual(modInfo.CurrentValue, afterCountry);\r
66             Assert.AreEqual(modInfo.OriginalValue, beforeCountry);\r
67 \r
68             modInfo = modifiedInfoList.ElementAt(1);\r
69             Assert.AreEqual(modInfo.Member, typeof(Customer).GetProperty("Fax"));\r
70             Assert.AreEqual(modInfo.CurrentValue, afterFax);\r
71             Assert.AreEqual(modInfo.OriginalValue, beforeFax);\r
72         }\r
73 \r
74 #if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL))\r
75         [Explicit]\r
76 #endif\r
77         [Test]\r
78         public void GetOriginalEntityState()\r
79         {\r
80             var db = CreateDB();\r
81             var customer = db.Customers.First();\r
82 \r
83             string beforeCountry = customer.Country;\r
84             string afterCountry = "Spain";\r
85             customer.Country = afterCountry;\r
86 \r
87             string beforeFax = customer.Fax;\r
88             string afterFax = "4823-435-6456";\r
89             customer.Fax = afterFax;\r
90 \r
91             var originalCustomer = db.Customers.GetOriginalEntityState(customer);\r
92             Assert.AreEqual(originalCustomer.Fax, beforeFax);\r
93             Assert.AreEqual(originalCustomer.Country, beforeCountry);\r
94 \r
95         }\r
96 \r
97         //[Test]\r
98         //public void IsReadOnly()\r
99         //{\r
100         //    var db = CreateDB();\r
101         //    db.ObjectTrackingEnabled=false;\r
102         //    db.Customers.ToArray();\r
103         //    Assert.IsFalse(db.Customers.IsReadOnly);\r
104 \r
105         //    var db2 = CreateDB();\r
106         //    db2.ObjectTrackingEnabled = true;\r
107         //    db2.Customers.ToArray();\r
108         //    Assert.IsTrue(db2.Customers.IsReadOnly);\r
109         //}\r
110 \r
111 #if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL))\r
112         [Explicit]\r
113 #endif\r
114         [Test]\r
115         public void Attach01()\r
116         {\r
117             var db = CreateDB();\r
118             var customer = new Customer();\r
119             db.Customers.Attach(customer);\r
120 \r
121             Assert.IsFalse(db.Customers.Contains(customer));\r
122         }\r
123 \r
124 #if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL))\r
125         [Explicit]\r
126 #endif\r
127         [Test]\r
128         [ExpectedException(typeof(NotSupportedException))]\r
129         public void Attach02()\r
130         {\r
131             var db = CreateDB();\r
132             var customer = new Customer();\r
133             db.Customers.Attach(customer);\r
134 \r
135             Assert.IsFalse(db.Customers.Contains(customer));\r
136             var db2 = CreateDB();\r
137             db2.Customers.Attach(customer);\r
138         }\r
139 \r
140 #if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL))\r
141         [Explicit]\r
142 #endif\r
143         [Test]\r
144         [ExpectedException(typeof(InvalidOperationException))]\r
145         public void Attach03()\r
146         {\r
147             var db = CreateDB();\r
148             db.ObjectTrackingEnabled = false;\r
149             var customer = new Customer();\r
150             db.Customers.Attach(customer);\r
151         }\r
152 \r
153 #if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL))\r
154         [Explicit]\r
155 #endif\r
156         [Test]\r
157         public void Attach04()\r
158         {\r
159             var db = CreateDB();\r
160             var originalCustomer = db.Customers.First();\r
161             var customer = new Customer();\r
162             db.Customers.Attach(customer, originalCustomer);\r
163 \r
164             AssertHelper.Greater(db.Customers.GetModifiedMembers(customer).Count(), 0);\r
165         }\r
166 \r
167 #if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL))\r
168         [Explicit]\r
169 #endif\r
170         [Test]\r
171         [ExpectedException(typeof(InvalidOperationException))]\r
172         public void Attach05()\r
173         {\r
174             var db = CreateDB();\r
175             var customer = new Customer();\r
176             db.Customers.Attach(customer, true);\r
177         }\r
178 \r
179 #if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL))\r
180         [Explicit]\r
181 #endif\r
182         [Test]\r
183         public void Attach06()\r
184         {\r
185             var db = CreateDB();\r
186             var customer = new Customer();\r
187             //http://geekswithblogs.net/michelotti/archive/2007/12/17/117791.aspx\r
188             //we have to do a test related with that stuff, but we need to change all of datacontexts\r
189 \r
190             Assert.Ignore();\r
191         }\r
192 \r
193 \r
194 #if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL))\r
195         [Explicit]\r
196 #endif\r
197         [Test]\r
198         public void AttachAll()\r
199         {\r
200             var db = CreateDB();\r
201             var customers = new Customer[] { new Customer { CustomerID = "ID1" }, new Customer { CustomerID = "ID2" } };\r
202             db.Customers.AttachAll(customers);\r
203 \r
204             Assert.IsFalse(customers.Any(c => db.Customers.Contains(c)));\r
205 \r
206         }\r
207 \r
208 #if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL))\r
209         [Explicit]\r
210 #endif\r
211         [Test]\r
212         public void GetBindingList()\r
213         {\r
214             var db = CreateDB();\r
215             var customers = db.Customers.GetNewBindingList();\r
216 \r
217             Assert.AreEqual(customers.Count, db.Customers.Count());\r
218         }\r
219 \r
220         [Description("Check direct use of DataContext instead of typed DataContext")]\r
221         [Test]\r
222         public void T1_DirectDataContext()\r
223         {\r
224             var db = CreateDB();\r
225 \r
226             var dc = new \r
227 #if MONO_STRICT\r
228             System.Data.Linq.DataContext(db.Connection);\r
229 #else\r
230             DbLinq.Data.Linq.DataContext(db.Connection, CreateVendor());\r
231 #endif\r
232 \r
233             var dbq = from p in db.Products where p.ProductName == "Chai" select p.ProductID;\r
234             var dbc = dbq.ToList().Count;\r
235             Assert.AreEqual(dbc, 1);\r
236 \r
237             var dcq = from p in dc.GetTable<Product>() where p.ProductName == "Chai" select p.ProductID;\r
238             var dcc = dcq.ToList().Count;\r
239             Assert.AreEqual(dbc, 1);\r
240         }\r
241     }\r
242 }\r