/src/NHibernate.Test/Linq/AggregateTests.cs

https://github.com/whut/nhibernate-core
C# | 137 lines | 104 code | 23 blank | 10 comment | 6 complexity | fa3fda20edf4f4562fcd00357dfab08c MD5 | raw file
  1. using System;
  2. using System.Linq;
  3. using System.Text;
  4. using NUnit.Framework;
  5. namespace NHibernate.Test.Linq
  6. {
  7. [TestFixture]
  8. public class AggregateTests : LinqTestCase
  9. {
  10. [Test]
  11. public void AggregateWithStartsWith()
  12. {
  13. var query = (from c in db.Customers where c.CustomerId.StartsWith("A") select c.CustomerId)
  14. .Aggregate(new StringBuilder(), (sb, id) => sb.Append(id).Append(","));
  15. Console.WriteLine(query);
  16. Assert.AreEqual("ALFKI,ANATR,ANTON,AROUT,", query.ToString());
  17. }
  18. [Test]
  19. public void AggregateWithEndsWith()
  20. {
  21. var query = (from c in db.Customers where c.CustomerId.EndsWith("TH") select c.CustomerId)
  22. .Aggregate(new StringBuilder(), (sb, id) => sb.Append(id).Append(","));
  23. Console.WriteLine(query);
  24. Assert.AreEqual("WARTH,", query.ToString());
  25. }
  26. [Test]
  27. public void AggregateWithContains()
  28. {
  29. var query = (from c in db.Customers where c.CustomerId.Contains("CH") select c.CustomerId)
  30. .Aggregate(new StringBuilder(), (sb, id) => sb.Append(id).Append(","));
  31. Console.WriteLine(query);
  32. Assert.AreEqual("CHOPS,RANCH,", query.ToString());
  33. }
  34. [Test]
  35. public void AggregateWithEquals()
  36. {
  37. var query = (from c in db.Customers
  38. where c.CustomerId.Equals("ALFKI") || c.CustomerId.Equals("ANATR") || c.CustomerId.Equals("ANTON")
  39. select c.CustomerId)
  40. .Aggregate((prev, next) => (prev + "," + next));
  41. Console.WriteLine(query);
  42. Assert.AreEqual("ALFKI,ANATR,ANTON", query);
  43. }
  44. [Test]
  45. public void AggregateWithNotStartsWith()
  46. {
  47. var query = (from c in db.Customers
  48. where c.CustomerId.StartsWith("A") && !c.CustomerId.StartsWith("AN")
  49. select c.CustomerId)
  50. .Aggregate(new StringBuilder(), (sb, id) => sb.Append(id).Append(","));
  51. Console.WriteLine(query);
  52. Assert.AreEqual("ALFKI,AROUT,", query.ToString());
  53. }
  54. [Test]
  55. public void AggregateWithMonthFunction()
  56. {
  57. var date = new DateTime(2007, 1, 1);
  58. var query = (from e in db.Employees
  59. where e.BirthDate.Value.Month == date.Month
  60. select e.FirstName)
  61. .Aggregate(new StringBuilder(), (sb, name) => sb.Length > 0 ? sb.Append(", ").Append(name) : sb.Append(name));
  62. Console.WriteLine("{0} Birthdays:", date.ToString("MMMM"));
  63. Console.WriteLine(query);
  64. }
  65. [Test]
  66. public void AggregateWithBeforeYearFunction()
  67. {
  68. var date = new DateTime(1960, 1, 1);
  69. var query = (from e in db.Employees
  70. where e.BirthDate.Value.Year < date.Year
  71. select e.FirstName.ToUpper())
  72. .Aggregate(new StringBuilder(), (sb, name) => sb.Length > 0 ? sb.Append(", ").Append(name) : sb.Append(name));
  73. Console.WriteLine("Birthdays before {0}:", date.ToString("yyyy"));
  74. Console.WriteLine(query);
  75. }
  76. [Test]
  77. public void AggregateWithOnOrAfterYearFunction()
  78. {
  79. var date = new DateTime(1960, 1, 1);
  80. var query = (from e in db.Employees
  81. where e.BirthDate.Value.Year >= date.Year && e.FirstName.Length > 4
  82. select e.FirstName)
  83. .Aggregate(new StringBuilder(), (sb, name) => sb.Length > 0 ? sb.Append(", ").Append(name) : sb.Append(name));
  84. Console.WriteLine("Birthdays after {0}:", date.ToString("yyyy"));
  85. Console.WriteLine(query);
  86. }
  87. [Test]
  88. public void AggregateWithUpperAndLowerFunctions()
  89. {
  90. var date = new DateTime(2007, 1, 1);
  91. var query = (from e in db.Employees
  92. where e.BirthDate.Value.Month == date.Month
  93. select new { First = e.FirstName.ToUpper(), Last = e.LastName.ToLower() })
  94. .Aggregate(new StringBuilder(), (sb, name) => sb.Length > 0 ? sb.Append(", ").Append(name) : sb.Append(name));
  95. Console.WriteLine("{0} Birthdays:", date.ToString("MMMM"));
  96. Console.WriteLine(query);
  97. }
  98. [Test]
  99. [Ignore("TODO: Custom functions")]
  100. public void AggregateWithCustomFunction()
  101. {
  102. /*
  103. var date = new DateTime(1960, 1, 1);
  104. var query = (from e in db.Employees
  105. where e.BirthDate.Value.Year < date.Year
  106. select db.Methods.fnEncrypt(e.FirstName))
  107. .Aggregate(new StringBuilder(), (sb, name) => sb.AppendLine(BitConverter.ToString(name)));
  108. Console.WriteLine(query);
  109. */
  110. }
  111. }
  112. }