2009-06-12 Bill Holmes <billholmes54@gmail.com>
[mono.git] / mcs / class / System.Data.Linq / src / DbLinq / Test / Providers / ReadTests_StringFunctions.cs
1 #region MIT license\r
2 // \r
3 // MIT license\r
4 //\r
5 // Copyright (c) 2007-2008 Jiri Moudry, Pascal Craponne\r
6 // \r
7 // Permission is hereby granted, free of charge, to any person obtaining a copy\r
8 // of this software and associated documentation files (the "Software"), to deal\r
9 // in the Software without restriction, including without limitation the rights\r
10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
11 // copies of the Software, and to permit persons to whom the Software is\r
12 // furnished to do so, subject to the following conditions:\r
13 // \r
14 // The above copyright notice and this permission notice shall be included in\r
15 // all copies or substantial portions of the Software.\r
16 // \r
17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
23 // THE SOFTWARE.\r
24 // \r
25 #endregion\r
26 using System;\r
27 using System.Globalization;\r
28 using System.Collections.Generic;\r
29 using System.Text;\r
30 using System.Linq;\r
31 using System.Linq.Expressions;\r
32 using NUnit.Framework;\r
33 using Test_NUnit;\r
34 \r
35 \r
36 using nwind;\r
37 \r
38 // test ns \r
39 #if MYSQL\r
40     namespace Test_NUnit_MySql\r
41 #elif ORACLE && ODP\r
42     namespace Test_NUnit_OracleODP\r
43 #elif ORACLE\r
44     namespace Test_NUnit_Oracle\r
45 #elif POSTGRES\r
46     namespace Test_NUnit_PostgreSql\r
47 #elif SQLITE\r
48     namespace Test_NUnit_Sqlite\r
49 #elif INGRES\r
50     namespace Test_NUnit_Ingres\r
51 #elif MSSQL && MONO_STRICT\r
52     namespace Test_NUnit_MsSql_Strict\r
53 #elif MSSQL\r
54     namespace Test_NUnit_MsSql\r
55 #elif FIREBIRD\r
56     namespace Test_NUnit_Firebird\r
57 #endif\r
58 {\r
59     [TestFixture]\r
60     public class ReadTests_StringFunctions : TestBase\r
61     {\r
62         [Test]\r
63         public void Insert01()\r
64         {\r
65             Northwind db = CreateDB();\r
66 \r
67             var q = from e in db.Employees\r
68                     select e.LastName.Insert(3, ":");\r
69 \r
70 \r
71             var list = q.ToList();\r
72             Assert.IsTrue(list.All(lastname => lastname.Contains(":")));\r
73         }\r
74 \r
75         [Test]\r
76         public void Insert02()\r
77         {\r
78             Northwind db = CreateDB();\r
79 \r
80             var q = from e in db.Employees\r
81                     where e.LastName.Insert(3, ":").Contains(":")\r
82                     select e.LastName.Insert(3, ":");\r
83 \r
84 \r
85             var list = q.ToList();\r
86             Assert.IsTrue(list.All(lastname => lastname.Contains(":")));\r
87         }\r
88 \r
89         [Test]\r
90         public void Replace01()\r
91         {\r
92             Northwind db = CreateDB();\r
93 \r
94             var q = from e in db.Employees\r
95                     where " .".Replace('.', 'a') == " a"\r
96                     select e;\r
97 \r
98             var list = q.ToList();\r
99             Assert.AreEqual(list.Count, db.Employees.Count());\r
100 \r
101         }\r
102 \r
103         [Test]\r
104         public void Replace02()\r
105         {\r
106             Northwind db = CreateDB();\r
107 \r
108             var q = from e in db.Employees\r
109                     where e.LastName.Replace('A', 'B').Contains("B")\r
110                     select e;\r
111 \r
112             var list = q.ToList();\r
113             Assert.IsTrue(list.Count > 0);\r
114 \r
115         }\r
116 \r
117         [Test]\r
118         public void Replace03()\r
119         {\r
120             //white-box test: Testing preevalutation of the where predicate (SpecialExpression.Execute method) before of building the sql query\r
121             Northwind db = CreateDB();\r
122 \r
123             var q = from e in db.Employees\r
124                     where " .".Replace(" ", "f") == "f."\r
125                     select e;\r
126 \r
127             var list = q.ToList();\r
128             Assert.IsTrue(list.Count > 0);\r
129         }\r
130 \r
131         [Test]\r
132         public void Replace04()\r
133         {\r
134             //white-box test: Testing the select's projection field execution in clr.\r
135             Northwind db = CreateDB();\r
136 \r
137             var q = from e in db.Employees\r
138                     select e.LastName + " .".Replace('.', 'a');\r
139 \r
140             var list = q.ToList();\r
141             Assert.AreEqual(list.Count, db.Employees.Count());\r
142         }\r
143 \r
144         [Test]\r
145         public void Replace05()\r
146         {\r
147             Northwind db = CreateDB();\r
148 \r
149             var q = from e in db.Employees\r
150                     select " .".Replace(" ", "f");\r
151             var list = q.ToList();\r
152             Assert.AreEqual(list.Count, db.Employees.Count());\r
153         }\r
154 \r
155         [Test]\r
156         public void IndexOf01()\r
157         {\r
158             Northwind db = CreateDB();\r
159 \r
160             var q = from e in db.Employees\r
161                     where " fu".IndexOf("fu") == 1\r
162                     select e;\r
163 \r
164             var list = q.ToList();\r
165             Assert.IsTrue(list.Count > 0);\r
166 \r
167         }\r
168 \r
169         [Test]\r
170         public void IndexOf02()\r
171         {\r
172             Northwind db = CreateDB();\r
173 \r
174             var q = from e in db.Employees\r
175                     where e.LastName.IndexOf("Fu") == 0\r
176                     select e;\r
177 \r
178             var list = q.ToList();\r
179             Assert.IsTrue(list.Count > 0);\r
180         }\r
181 \r
182         [Test]\r
183         public void IndexOf03()\r
184         {\r
185             Northwind db = CreateDB();\r
186 \r
187             var q = from e in db.Employees\r
188                     where " fu".IndexOf('f') == 1\r
189                     select e;\r
190 \r
191             var list = q.ToList();\r
192             Assert.IsTrue(list.Count > 0);\r
193 \r
194         }\r
195 \r
196         [Test]\r
197         public void IndexOf04()\r
198         {\r
199             Northwind db = CreateDB();\r
200 \r
201             var q = from e in db.Employees\r
202                     where e.LastName.IndexOf('F') == 0\r
203                     select e;\r
204 \r
205             var list = q.ToList();\r
206             Assert.IsTrue(list.Count > 0);\r
207         }\r
208 \r
209 \r
210 \r
211         [Test]\r
212         public void IndexOf05()\r
213         {\r
214             Northwind db = CreateDB();\r
215 \r
216             var q = from e in db.Employees\r
217                     where e.LastName.IndexOf("u", 1) == 1\r
218                     select e;\r
219 \r
220             var list = q.ToList();\r
221             Assert.IsTrue(list.Count > 0);\r
222         }\r
223 \r
224 \r
225 \r
226         [Test]\r
227         public void IndexOf06()\r
228         {\r
229             Northwind db = CreateDB();\r
230 \r
231             var q = from e in db.Employees\r
232                     where e.LastName.IndexOf('u', 1, 1) == 1\r
233                     select e;\r
234 \r
235             var list = q.ToList();\r
236             Assert.IsTrue(list.Count > 0);\r
237         }\r
238 \r
239         [Test]\r
240         public void IndexOf08()\r
241         {\r
242             Northwind db = CreateDB();\r
243 \r
244             var q = from e in db.Employees\r
245                     where e.LastName.IndexOf("u", 1, 1) == 1\r
246                     select e;\r
247 \r
248             var list = q.ToList();\r
249             Assert.IsTrue(list.Count > 0);\r
250         }\r
251 \r
252 \r
253         [Test]\r
254         public void IndexOf09()\r
255         {\r
256             Northwind db = CreateDB();\r
257 \r
258             var q = from e in db.Employees\r
259                     select e.LastName.IndexOf("Fu") == 0;\r
260 \r
261             var list = q.ToList();\r
262             Assert.AreEqual(list.Count, db.Employees.Count());\r
263         }\r
264 \r
265         [Test]\r
266         public void IndexOf10()\r
267         {\r
268             Northwind db = CreateDB();\r
269 \r
270             var q = from e in db.Employees\r
271                     select " fu".IndexOf('f') == 1;\r
272 \r
273 \r
274             var list = q.ToList();\r
275             Assert.AreEqual(list.Count, db.Employees.Count());\r
276         }\r
277 \r
278         [Test]\r
279         public void IndexOf11()\r
280         {\r
281             Northwind db = CreateDB();\r
282 \r
283             var q = from e in db.Employees\r
284                     select e.LastName.IndexOf('F') == 0;\r
285 \r
286             var list = q.ToList();\r
287             Assert.AreEqual(list.Count, db.Employees.Count());\r
288         }\r
289 \r
290 \r
291 \r
292         [Test]\r
293         public void IndexOf12()\r
294         {\r
295             Northwind db = CreateDB();\r
296 \r
297             var q = from e in db.Employees\r
298                     select e.LastName.IndexOf("u", 1) == 1;\r
299 \r
300             var list = q.ToList();\r
301             Assert.AreEqual(list.Count, db.Employees.Count());\r
302         }\r
303 \r
304 \r
305 \r
306         [Test]\r
307         public void IndexOf13()\r
308         {\r
309             Northwind db = CreateDB();\r
310 \r
311             var q = from e in db.Employees\r
312                     select e.LastName.IndexOf('u', 1, 1) == 1;\r
313 \r
314             var list = q.ToList();\r
315             Assert.AreEqual(list.Count, db.Employees.Count());\r
316         }\r
317 \r
318         [Test]\r
319         public void IndexOf14()\r
320         {\r
321             Northwind db = CreateDB();\r
322 \r
323             var q = from e in db.Employees\r
324                     select e.LastName.IndexOf("u", 1, 1) == 1;\r
325 \r
326             var list = q.ToList();\r
327             Assert.AreEqual(list.Count, db.Employees.Count());\r
328         }\r
329 \r
330 \r
331         [Test]\r
332         public void Remove01()\r
333         {\r
334             Northwind db = CreateDB();\r
335 \r
336             var q = from e in db.Employees\r
337                     where " .".Remove(1) == " "\r
338                     select e;\r
339 \r
340             var list = q.ToList();\r
341             Assert.IsTrue(list.Count > 0);\r
342 \r
343         }\r
344 \r
345         [Test]\r
346         public void Remove02()\r
347         {\r
348             Northwind db = CreateDB();\r
349 \r
350             var q = from e in db.Employees\r
351                     where e.LastName.Remove(1).Length > 0\r
352                     select e;\r
353 \r
354             var list = q.ToList();\r
355             Assert.IsTrue(list.Count > 0);\r
356 \r
357         }\r
358 \r
359         [Test]\r
360         public void Remove03()\r
361         {\r
362             Northwind db = CreateDB();\r
363 \r
364             var q = from e in db.Employees\r
365                     where " ..".Remove(1, 2) == " "\r
366                     select e;\r
367 \r
368             var list = q.ToList();\r
369             Assert.IsTrue(list.Count > 0);\r
370         }\r
371 \r
372         [Test]\r
373         public void Remove04()\r
374         {\r
375             Northwind db = CreateDB();\r
376 \r
377             var q = from e in db.Employees\r
378                     where e.LastName.Remove(1, 2).Length > 0\r
379                     select e;\r
380 \r
381             var list = q.ToList();\r
382             Assert.IsTrue(list.Count > 0);\r
383         }\r
384 \r
385         [Test]\r
386         public void Remove05()\r
387         {\r
388             Northwind db = CreateDB();\r
389 \r
390             var q = from e in db.Employees\r
391                     select " .".Remove(1) == " ";\r
392 \r
393             var list = q.ToList();\r
394             Assert.AreEqual(list.Count, db.Employees.Count());\r
395         }\r
396 \r
397         [Test]\r
398         public void Remove06()\r
399         {\r
400             Northwind db = CreateDB();\r
401 \r
402             var q = from e in db.Employees\r
403                     select e.LastName.Remove(1).Length > 0;\r
404 \r
405             var list = q.ToList();\r
406             Assert.AreEqual(list.Count, db.Employees.Count());\r
407 \r
408         }\r
409 \r
410         [Test]\r
411         public void Remove07()\r
412         {\r
413             Northwind db = CreateDB();\r
414 \r
415             var q = from e in db.Employees\r
416                     select " ..".Remove(1, 2) == " ";\r
417 \r
418             var list = q.ToList();\r
419             Assert.AreEqual(list.Count, db.Employees.Count());\r
420         }\r
421 \r
422         [Test]\r
423         public void Remove08()\r
424         {\r
425             Northwind db = CreateDB();\r
426 \r
427             var q = from e in db.Employees\r
428                     select e.LastName.Remove(1, 2).Length > 0;\r
429 \r
430             var list = q.ToList();\r
431             Assert.AreEqual(list.Count, db.Employees.Count());\r
432         }\r
433 \r
434         [Test]\r
435         public void StartsWith01()\r
436         {\r
437             Northwind db = CreateDB();\r
438 \r
439             var q = from c in db.Customers\r
440                     where c.CustomerID.StartsWith("ALF")\r
441                     select c.CustomerID;\r
442 \r
443             string custID = q.Single();\r
444             Assert.IsTrue(custID == "ALFKI");\r
445         }\r
446 \r
447         [Test]\r
448         public void StartsWith02()\r
449         {\r
450             Northwind db = CreateDB();\r
451 \r
452             var q = from c in db.Customers\r
453                     where c.CustomerID == "ALFKI"\r
454                     select c.CustomerID.StartsWith("ALF");\r
455 \r
456             bool matchStart = q.Single();\r
457             Assert.IsTrue(matchStart);\r
458         }\r
459 \r
460         [Test]\r
461         public void EndsWith01()\r
462         {\r
463             Northwind db = CreateDB();\r
464 \r
465             var q = from c in db.Customers\r
466                     where c.CustomerID.EndsWith("LFKI")\r
467                     select c.CustomerID;\r
468 \r
469             string custID = q.Single();\r
470             Assert.IsTrue(custID == "ALFKI");\r
471         }\r
472 \r
473         [Test]\r
474         public void EndsWith02()\r
475         {\r
476             string param = "LFKI";\r
477             Northwind db = CreateDB();\r
478 \r
479             var q = from c in db.Customers\r
480                     where c.CustomerID.EndsWith(param)\r
481                     select c.CustomerID;\r
482 \r
483             string custID = q.Single();\r
484             Assert.IsTrue(custID == "ALFKI");\r
485         }\r
486 \r
487         [Test]\r
488         public void EndsWith03()\r
489         {\r
490             Northwind db = CreateDB();\r
491 \r
492             var q = from c in db.Customers\r
493                     where "ALFKI".EndsWith("LFKI")\r
494                     select c.CustomerID;\r
495 \r
496             string custID = q.Single();\r
497             Assert.IsTrue(custID == "ALFKI");\r
498         }\r
499 \r
500         [Test]\r
501         public void EndsWith04()\r
502         {\r
503             Northwind db = CreateDB();\r
504 \r
505             var q = from c in db.Customers\r
506                     select c.CustomerID.EndsWith("LFKI");\r
507 \r
508             Assert.IsTrue(q.Any(r => r == true));\r
509         }\r
510 \r
511         [Test]\r
512         public void StartsWithPercent01()\r
513         {\r
514             string param = "%";\r
515             Northwind db = CreateDB();\r
516 \r
517             var q = from c in db.Customers\r
518                     where c.CustomerID.StartsWith(param)\r
519                     select c.CustomerID;\r
520 \r
521             int cnt = q.Count();\r
522             Assert.AreEqual(0, cnt);\r
523         }\r
524 \r
525         [Test]\r
526         public void LTrim01()\r
527         {\r
528             Northwind db = CreateDB();\r
529 \r
530             var q = from e in db.Employees\r
531                     where !((e.LastName)).TrimStart().Contains(" ")\r
532                     select e.LastName;\r
533 \r
534             var list = q.ToList();\r
535             Assert.IsTrue(list.Count > 0);\r
536         }\r
537 \r
538         [Test]\r
539         public void LTrim02()\r
540         {\r
541             Northwind db = CreateDB();\r
542 \r
543             var q = from e in db.Employees\r
544                     select !((e.LastName)).TrimStart().Contains(" ");\r
545 \r
546             var list = q.ToList();\r
547             Assert.IsTrue(list.Count > 0);\r
548         }\r
549 \r
550         [Test]\r
551         public void RTrim01()\r
552         {\r
553             Northwind db = CreateDB();\r
554 \r
555             var q = from e in db.Employees\r
556                     where !((e.LastName)).TrimEnd().Contains(" ")\r
557                     select e.LastName;\r
558 \r
559             var list = q.ToList();\r
560             Assert.IsTrue(list.Count > 0);\r
561         }\r
562 \r
563         [Test]\r
564         public void RTrim02()\r
565         {\r
566             Northwind db = CreateDB();\r
567 \r
568             var q = from e in db.Employees\r
569                     select !((e.LastName)).TrimEnd().Contains(" ");\r
570 \r
571             var list = q.ToList();\r
572             Assert.IsTrue(list.Count > 0);\r
573         }\r
574 \r
575         [Test]\r
576         public void Substring01()\r
577         {\r
578             Northwind db = CreateDB();\r
579 \r
580             int index = 0;\r
581             var q = (from e in db.Customers\r
582                      where e.CustomerID == "WARTH"\r
583                      select new { name = e.CustomerID.Substring(index) }).First();\r
584 \r
585             Assert.AreEqual(q.name, "WARTH".Substring(index));\r
586         }\r
587 \r
588         [Test]\r
589         public void Substring02()\r
590         {\r
591             Northwind db = CreateDB();\r
592 \r
593             var q = (from e in db.Customers\r
594                      where e.CustomerID.Substring(2) == "RTH"\r
595                      select e);\r
596 \r
597             Assert.IsTrue(q.Any());\r
598         }\r
599 \r
600         [Test]\r
601         public void Substring03()\r
602         {\r
603             Northwind db = CreateDB();\r
604 \r
605             var q = from e in db.Employees\r
606                     where e.HomePhone.Substring(4, 1) == ")"\r
607                     select new { A = e.HomePhone.Remove(0, 6), B = e.HomePhone.Substring(4, 1) };\r
608 \r
609             var list = q.ToList();\r
610             Assert.IsTrue(list.Count > 0);\r
611 \r
612             var Employees = db.Employees.ToArray();\r
613 \r
614             var q2 = (from e in Employees\r
615                       where e.HomePhone != null && e.HomePhone.Substring(4, 1) == ")"\r
616                       select new { A = e.HomePhone.Remove(0, 6), B = e.HomePhone.Substring(4, 1) }).ToArray();\r
617 \r
618             Assert.AreEqual(list.Count, q2.Count());\r
619 \r
620             for (int i = 0; i < list.Count; i++)\r
621                 Assert.AreEqual(list[i], q2[i]);\r
622 \r
623         }\r
624 \r
625     }\r
626 }\r