PageRenderTime 42ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/MongoDB.Driver.Tests/Linq/Processors/PartialEvaluatorTests.cs

http://github.com/mongodb/mongo-csharp-driver
C# | 136 lines | 99 code | 23 blank | 14 comment | 8 complexity | cf97defdc8c6f8fe42c9f609266f4892 MD5 | raw file
Possible License(s): Apache-2.0
  1. /* Copyright 2010-present MongoDB Inc.
  2. *
  3. * Licensed under the Apache License, Version 2.0 (the "License");
  4. * you may not use this file except in compliance with the License.
  5. * You may obtain a copy of the License at
  6. *
  7. * http://www.apache.org/licenses/LICENSE-2.0
  8. *
  9. * Unless required by applicable law or agreed to in writing, software
  10. * distributed under the License is distributed on an "AS IS" BASIS,
  11. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. * See the License for the specific language governing permissions and
  13. * limitations under the License.
  14. */
  15. using System;
  16. using System.Linq.Expressions;
  17. using FluentAssertions;
  18. using MongoDB.Driver.Linq.Processors;
  19. using Xunit;
  20. namespace MongoDB.Driver.Tests.Linq.Processors
  21. {
  22. public class PartialEvaluatorTests
  23. {
  24. [Fact]
  25. public void Indexed_local_capture()
  26. {
  27. var captured = new[] { "Jack", "John" };
  28. Expression<Func<Person, bool>> predicate = x => x.Name == captured[0];
  29. var evaluated = (BinaryExpression)PartialEvaluator.Evaluate(predicate.Body);
  30. evaluated.Right.NodeType.Should().Be(ExpressionType.Constant);
  31. ((ConstantExpression)evaluated.Right).Value.Should().Be("Jack");
  32. }
  33. [Fact]
  34. public void Named_local_capture()
  35. {
  36. var captured = "Jack";
  37. Expression<Func<Person, bool>> predicate = x => x.Name == captured;
  38. var evaluated = (BinaryExpression)PartialEvaluator.Evaluate(predicate.Body);
  39. evaluated.Right.NodeType.Should().Be(ExpressionType.Constant);
  40. ((ConstantExpression)evaluated.Right).Value.Should().Be("Jack");
  41. }
  42. [Fact]
  43. public void Instance_method_call_with_no_arguments()
  44. {
  45. Expression<Func<Person, bool>> predicate = x => x.Name == InstanceGetName();
  46. var evaluated = (BinaryExpression)PartialEvaluator.Evaluate(predicate.Body);
  47. evaluated.Right.NodeType.Should().Be(ExpressionType.Constant);
  48. ((ConstantExpression)evaluated.Right).Value.Should().Be("Jack");
  49. }
  50. [Fact]
  51. public void Instance_method_call_with_a_constant_argument()
  52. {
  53. Expression<Func<Person, bool>> predicate = x => x.Name == InstanceGetName("ck");
  54. var evaluated = (BinaryExpression)PartialEvaluator.Evaluate(predicate.Body);
  55. evaluated.Right.NodeType.Should().Be(ExpressionType.Constant);
  56. ((ConstantExpression)evaluated.Right).Value.Should().Be("Jack");
  57. }
  58. [Fact]
  59. public void Instance_method_call_with_a_captured_argument()
  60. {
  61. var captured = "ck";
  62. Expression<Func<Person, bool>> predicate = x => x.Name == InstanceGetName(captured);
  63. var evaluated = (BinaryExpression)PartialEvaluator.Evaluate(predicate.Body);
  64. evaluated.Right.NodeType.Should().Be(ExpressionType.Constant);
  65. ((ConstantExpression)evaluated.Right).Value.Should().Be("Jack");
  66. }
  67. [Fact]
  68. public void Static_method_call_with_no_arguments()
  69. {
  70. Expression<Func<Person, bool>> predicate = x => x.Name == StaticGetName();
  71. var evaluated = (BinaryExpression)PartialEvaluator.Evaluate(predicate.Body);
  72. evaluated.Right.NodeType.Should().Be(ExpressionType.Constant);
  73. ((ConstantExpression)evaluated.Right).Value.Should().Be("Jack");
  74. }
  75. [Fact]
  76. public void Static_method_call_with_a_constant_argument()
  77. {
  78. Expression<Func<Person, bool>> predicate = x => x.Name == StaticGetName("ck");
  79. var evaluated = (BinaryExpression)PartialEvaluator.Evaluate(predicate.Body);
  80. evaluated.Right.NodeType.Should().Be(ExpressionType.Constant);
  81. ((ConstantExpression)evaluated.Right).Value.Should().Be("Jack");
  82. }
  83. [Fact]
  84. public void Static_method_call_with_a_captured_argument()
  85. {
  86. var captured = "ck";
  87. Expression<Func<Person, bool>> predicate = x => x.Name == StaticGetName(captured);
  88. var evaluated = (BinaryExpression)PartialEvaluator.Evaluate(predicate.Body);
  89. evaluated.Right.NodeType.Should().Be(ExpressionType.Constant);
  90. ((ConstantExpression)evaluated.Right).Value.Should().Be("Jack");
  91. }
  92. private string InstanceGetName()
  93. {
  94. return "Jack";
  95. }
  96. private string InstanceGetName(string suffix)
  97. {
  98. return "Ja" + suffix;
  99. }
  100. private static string StaticGetName()
  101. {
  102. return "Jack";
  103. }
  104. private static string StaticGetName(string suffix)
  105. {
  106. return "Ja" + suffix;
  107. }
  108. private class Person
  109. {
  110. public string Name { get; set; }
  111. }
  112. }
  113. }