diff UnitTests/Linq/StringFunctions.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UnitTests/Linq/StringFunctions.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,788 @@
+using System;
+using System.Data.Linq.SqlClient;
+using System.Linq;
+
+using NUnit.Framework;
+
+using BLToolkit.Data.DataProvider;
+using BLToolkit.Data.Linq;
+using BLToolkit.DataAccess;
+
+namespace Data.Linq
+{
+	using Model;
+
+	[TestFixture]
+	public class StringFunctions : TestBase
+	{
+		[Test]
+		public void Length()
+		{
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where p.FirstName.Length == "John".Length && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void ContainsConstant()
+		{
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where p.FirstName.Contains("oh") && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void ContainsConstant2()
+		{
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where !p.FirstName.Contains("o%h") && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void ContainsConstant3([DataContexts] string context)
+		{
+			using (var db = GetDataContext(context))
+			{
+				var arr = new[] { "oh", "oh'", "oh\\" };
+
+				var q = from p in db.Person where  arr.Contains(p.FirstName) select p;
+				Assert.AreEqual(0, q.Count());
+			}
+		}
+
+		[Test]
+		public void ContainsParameter1()
+		{
+			var str = "oh";
+
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where p.FirstName.Contains(str) && p.ID == 1 select new { p, str };
+				var r = q.ToList().First();
+				Assert.AreEqual(1,   r.p.ID);
+				Assert.AreEqual(str, r.str);
+			});
+		}
+
+		[Test]
+		public void ContainsParameter2()
+		{
+			var str = "o%h";
+
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where !p.FirstName.Contains(str) && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void ContainsParameter3()
+		{
+			var str = "o";
+
+			using (var db = new TestDbManager())
+			{
+				var q =
+					from d in db.Doctor
+					join p in db.Person.Where(p => p.FirstName.Contains(str))
+					on d.PersonID equals p.ID
+					select p;
+
+				Assert.AreEqual(1, q.ToList().First().ID);
+			}
+		}
+
+		[Test]
+		public void ContainsParameter4()
+		{
+			ForEachProvider(db =>
+				AreEqual(
+					from p in Person
+					select new
+					{
+						p,
+						Field1 = p.FirstName.Contains("Jo")
+					} into p
+					where p.Field1
+					orderby p.Field1
+					select p,
+					from p in db.Person
+					select new
+					{
+						p,
+						Field1 = p.FirstName.Contains("Jo")
+					} into p
+					where p.Field1
+					orderby p.Field1
+					select p));
+		}
+
+		[Test]
+		public void StartsWith1()
+		{
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where p.FirstName.StartsWith("Jo") && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void StartsWith2()
+		{
+			ForEachProvider(
+				new[] { ProviderName.DB2, ProviderName.Access },
+				db => AreEqual(
+					from p in    Person where "John123".StartsWith(p.FirstName) select p,
+					from p in db.Person where "John123".StartsWith(p.FirstName) select p));
+		}
+
+		[Test]
+		public void StartsWith3()
+		{
+			var str = "John123";
+
+			ForEachProvider(
+				new[] { ProviderName.DB2, ProviderName.Access },
+				db => AreEqual(
+					from p in    Person where str.StartsWith(p.FirstName) select p,
+					from p in db.Person where str.StartsWith(p.FirstName) select p));
+		}
+
+		[Test]
+		public void StartsWith4()
+		{
+			ForEachProvider(
+				new[] { ProviderName.DB2, ProviderName.Access },
+				db => AreEqual(
+					from p1 in    Person
+					from p2 in    Person
+					where p1.ID == p2.ID && p1.FirstName.StartsWith(p2.FirstName)
+					select p1,
+					from p1 in db.Person
+					from p2 in db.Person
+					where p1.ID == p2.ID && 
+						Sql.Like(p1.FirstName, p2.FirstName.Replace("%", "~%"), '~')
+					select p1));
+		}
+
+		[Test]
+		public void StartsWith5()
+		{
+			ForEachProvider(
+				new[] { ProviderName.DB2, ProviderName.Access },
+				db => AreEqual(
+					from p1 in    Person
+					from p2 in    Person
+					where p1.ID == p2.ID && p1.FirstName.Replace("J", "%").StartsWith(p2.FirstName.Replace("J", "%"))
+					select p1,
+					from p1 in db.Person
+					from p2 in db.Person
+					where p1.ID == p2.ID && p1.FirstName.Replace("J", "%").StartsWith(p2.FirstName.Replace("J", "%"))
+					select p1));
+		}
+
+		[Test]
+		public void EndsWith()
+		{
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where p.FirstName.EndsWith("hn") && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Like11()
+		{
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where SqlMethods.Like(p.FirstName, "%hn%") && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Like12()
+		{
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where !SqlMethods.Like(p.FirstName, @"%h~%n%", '~') && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Like21()
+		{
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where Sql.Like(p.FirstName, "%hn%") && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Like22()
+		{
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where !Sql.Like(p.FirstName, @"%h~%n%", '~') && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void IndexOf11()
+		{
+			ForEachProvider(new[] { ProviderName.Firebird, ProviderName.Informix }, db => 
+			{
+				var q = from p in db.Person where p.FirstName.IndexOf("oh") == 1 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void IndexOf12()
+		{
+			ForEachProvider(new[] { ProviderName.Firebird, ProviderName.Informix }, db => 
+			{
+				var q = from p in db.Person where p.FirstName.IndexOf("") == 0 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void IndexOf2()
+		{
+			ForEachProvider(new[] { ProviderName.Firebird, ProviderName.Informix }, db => 
+			{
+				var q = from p in db.Person where p.LastName.IndexOf("e", 2) == 4 && p.ID == 2 select p;
+				Assert.AreEqual(2, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void IndexOf3([DataContexts(
+			ProviderName.DB2, ProviderName.Firebird, ProviderName.Informix, ProviderName.SqlCe, ProviderName.Sybase, ProviderName.Access)] string context)
+		{
+			var s = "e";
+			var n1 = 2;
+			var n2 = 5;
+
+			using (var db = GetDataContext(context))
+			{
+				var q = from p in db.Person where p.LastName.IndexOf(s, n1, n2) == 1 && p.ID == 2 select p;
+				Assert.AreEqual(2, q.ToList().First().ID);
+			}
+		}
+
+		static readonly string[] _lastIndexExcludeList = new[]
+		{
+			ProviderName.DB2, ProviderName.Firebird, ProviderName.Informix, ProviderName.SqlCe, ProviderName.Access
+		};
+
+		[Test]
+		public void LastIndexOf1()
+		{
+			ForEachProvider(_lastIndexExcludeList, db =>
+			{
+				var q = from p in db.Person where p.LastName.LastIndexOf("p") == 2 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void LastIndexOf2()
+		{
+			ForEachProvider(_lastIndexExcludeList, db => 
+			{
+				var q = from p in db.Person where p.ID == 1 select new { p.ID, FirstName = "123" + p.FirstName + "012345" };
+				q = q.Where(p => p.FirstName.LastIndexOf("123", 5) == 8);
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void LastIndexOf3()
+		{
+			ForEachProvider(_lastIndexExcludeList, db => 
+			{
+				var q = from p in db.Person where p.ID == 1 select new { p.ID, FirstName = "123" + p.FirstName + "0123451234" };
+				q = q.Where(p => p.FirstName.LastIndexOf("123", 5, 6) == 8);
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void CharIndex1()
+		{
+			ForEachProvider(new[] { ProviderName.Firebird, ProviderName.Informix }, db => 
+			{
+				var q = from p in db.Person where Sql.CharIndex("oh", p.FirstName) == 2 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void CharIndex2()
+		{
+			ForEachProvider(new[] { ProviderName.Firebird, ProviderName.Informix }, db => 
+			{
+				var q = from p in db.Person where Sql.CharIndex("p", p.LastName, 2) == 3 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Left()
+		{
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where Sql.Left(p.FirstName, 2) == "Jo" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Right()
+		{
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where Sql.Right(p.FirstName, 3) == "ohn" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Substring1()
+		{
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where p.FirstName.Substring(1) == "ohn" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Substring2()
+		{
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where p.FirstName.Substring(1, 2) == "oh" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Reverse()
+		{
+			ForEachProvider(new[] { ProviderName.DB2, ProviderName.Informix, ProviderName.SqlCe, ProviderName.Access }, db =>
+			{
+				var q = from p in db.Person where Sql.Reverse(p.FirstName) == "nhoJ" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Stuff()
+		{
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where Sql.Stuff(p.FirstName, 3, 1, "123") == "Jo123n" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Insert()
+		{
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where p.FirstName.Insert(2, "123") == "Jo123hn" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Remove1()
+		{
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where p.FirstName.Remove(2) == "Jo" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Remove2()
+		{
+			ForEachProvider(db => 
+			{
+				var q = from p in db.Person where p.FirstName.Remove(1, 2) == "Jn" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Space()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where p.FirstName + Sql.Space(p.ID + 1) + "123" == "John  123" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void PadRight()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where Sql.PadRight(p.FirstName, 6, ' ') + "123" == "John  123" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void PadRight1()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where p.FirstName.PadRight(6) + "123" == "John  123" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void PadRight2()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where p.FirstName.PadRight(6, '*') + "123" == "John**123" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void PadLeft()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where "123" + Sql.PadLeft(p.FirstName, 6, ' ') == "123  John" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void PadLeft1()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where "123" + p.FirstName.PadLeft(6) == "123  John" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void PadLeft2()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where "123" + p.FirstName.PadLeft(6, '*') == "123**John" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+        [Test]
+		public void Replace()
+		{
+			ForEachProvider(new[] { ProviderName.Access }, db =>
+			{
+				var q = from p in db.Person where p.FirstName.Replace("hn", "lie") == "Jolie" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Trim()
+		{
+			ForEachProvider(db =>
+			{
+				var q = 
+					from p in db.Person where p.ID == 1 select new { p.ID, Name = "  " + p.FirstName + " " } into pp
+					where pp.Name.Trim() == "John" select pp;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void TrimLeft()
+		{
+			ForEachProvider(db =>
+			{
+				var q = 
+					from p in db.Person where p.ID == 1 select new { p.ID, Name = "  " + p.FirstName + " " } into pp
+					where pp.Name.TrimStart() == "John " select pp;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void TrimRight()
+		{
+			ForEachProvider(db =>
+			{
+				var q = 
+					from p in db.Person where p.ID == 1 select new { p.ID, Name = "  " + p.FirstName + " " } into pp
+					where pp.Name.TrimEnd() == "  John" select pp;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void ToLower()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where p.FirstName.ToLower() == "john" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void ToUpper()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where p.FirstName.ToUpper() == "JOHN" && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void CompareTo()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where p.FirstName.CompareTo("John") == 0 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void CompareToNotEqual1()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where p.FirstName.CompareTo("Jo") != 0 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void CompareToNotEqual2()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where 0 != p.FirstName.CompareTo("Jo") && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void CompareTo1()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where p.FirstName.CompareTo("Joh") > 0 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void CompareTo2()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where p.FirstName.CompareTo("Johnn") < 0 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void CompareTo21()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where p.FirstName.CompareTo("Johnn") <= 0 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void CompareTo22()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where 0 >= p.FirstName.CompareTo("Johnn") && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void CompareTo3()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where p.FirstName.CompareTo(55) > 0 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void CompareTo31()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where p.FirstName.CompareTo(55) >= 0 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void CompareTo32()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where 0 <= p.FirstName.CompareTo(55) && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void CompareOrdinal1()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where string.CompareOrdinal(p.FirstName, "Joh") > 0 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void CompareOrdinal2()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where string.CompareOrdinal(p.FirstName, 1, "Joh", 1, 2) == 0 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Compare1()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where string.Compare(p.FirstName, "Joh") > 0 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Compare2()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where string.Compare(p.FirstName, "joh", true) > 0 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Compare3()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where string.Compare(p.FirstName, 1, "Joh", 1, 2) == 0 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void Compare4()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where string.Compare(p.FirstName, 1, "Joh", 1, 2, true) == 0 && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void IsNullOrEmpty1()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where !string.IsNullOrEmpty(p.FirstName) && p.ID == 1 select p;
+				Assert.AreEqual(1, q.ToList().First().ID);
+			});
+		}
+
+		[Test]
+		public void IsNullOrEmpty2()
+		{
+			ForEachProvider(db =>
+			{
+				var q = from p in db.Person where p.ID == 1 select string.IsNullOrEmpty(p.FirstName);
+				Assert.AreEqual(false, q.ToList().First());
+			});
+		}
+
+		//[Test]
+		public void Test()
+		{
+			using (var db = new TestDbManager(ProviderName.Firebird))
+			{
+				var p = db
+					.SetCommand(@"
+						SELECT
+							t1.ParentID,
+							t1.Value1
+						FROM
+							Parent t1
+								LEFT JOIN (
+									SELECT
+										t3.ParentID as ParentID1,
+										Coalesce(t3.ParentID, 1) as c1
+									FROM
+										Child t3
+								) t2 ON t1.ParentID = t2.ParentID1
+						WHERE
+							t2.c1 IS NULL")
+					.ExecuteList<Parent>();
+
+				var p1 = p.First();
+				Assert.AreEqual(1, p1.ParentID);
+
+
+				var da = new SqlQuery();
+				var pr  = (Person)da.SelectByKey(typeof(Person), 1);
+
+				Assert.AreEqual("Pupkin", pr.LastName);
+
+
+				//Assert.AreEqual(1, p.ID);
+			}
+		}
+	}
+}