public override bool Equals(object obj) { MethodCallExpressionFingerprint other = obj as MethodCallExpressionFingerprint; return((other != null) && Equals(this.Method, other.Method) && this.Equals(other)); }
public void Comparison_Inequality_Type() { // Arrange ExpressionType nodeType = ExpressionType.Call; Type type = typeof(string); MethodInfo method = typeof(string).GetMethod("Intern"); // Act MethodCallExpressionFingerprint fingerprint1 = new MethodCallExpressionFingerprint(nodeType, type, method); MethodCallExpressionFingerprint fingerprint2 = new MethodCallExpressionFingerprint(nodeType, typeof(object), method); // Assert Assert.AreNotEqual(fingerprint1, fingerprint2, "Fingerprints should not have been equal (differ by Type)."); }
public void Create_UnknownTarget() { // Arrange ParserContext context = new ParserContext(); MethodInfo method = typeof(string).GetMethod("Clone"); MethodCallExpression expression = Expression.Call(ExpressionHelper.GetUnknownExpression(typeof(string)), method); // Act MethodCallExpressionFingerprint fingerprint = MethodCallExpressionFingerprint.Create(expression, context); // Assert Assert.IsNull(fingerprint, "Unknown target cannot be parsed."); }
public void Create_UnknownArguments() { // Arrange ParserContext context = new ParserContext(); MethodInfo method = typeof(object).GetMethod("Equals", BindingFlags.Static | BindingFlags.Public); MethodCallExpression expression = Expression.Call(null, method, Expression.Constant(new object()), ExpressionHelper.GetUnknownExpression(typeof(object))); // Act MethodCallExpressionFingerprint fingerprint = MethodCallExpressionFingerprint.Create(expression, context); // Assert Assert.IsNull(fingerprint, "Unknown arguments cannot be parsed."); }
public void Comparison_Inequality_Method() { // Arrange ExpressionType nodeType = ExpressionType.Call; Type type = typeof(string); MethodInfo method = typeof(string).GetMethod("Intern"); // Act MethodCallExpressionFingerprint fingerprint1 = new MethodCallExpressionFingerprint(nodeType, type, method); MethodCallExpressionFingerprint fingerprint2 = new MethodCallExpressionFingerprint(nodeType, type, null /* method */); // Assert Assert.NotEqual(fingerprint1, fingerprint2); }
public void Comparison_Inequality_Type() { // Arrange ExpressionType nodeType = ExpressionType.Call; Type type = typeof(string); MethodInfo method = typeof(string).GetMethod("Intern"); // Act MethodCallExpressionFingerprint fingerprint1 = new MethodCallExpressionFingerprint(nodeType, type, method); MethodCallExpressionFingerprint fingerprint2 = new MethodCallExpressionFingerprint(nodeType, typeof(object), method); // Assert Assert.NotEqual(fingerprint1, fingerprint2); }
public void Comparison_Inequality_FingerprintType() { // Arrange ExpressionType nodeType = ExpressionType.Call; Type type = typeof(string); MethodInfo method = typeof(string).GetMethod("Intern"); // Act MethodCallExpressionFingerprint fingerprint1 = new MethodCallExpressionFingerprint(nodeType, type, method); DummyExpressionFingerprint fingerprint2 = new DummyExpressionFingerprint(nodeType, type); // Assert Assert.AreNotEqual(fingerprint1, fingerprint2, "Fingerprints should not have been equal ('other' is wrong type)."); }
public void Comparison_Inequality_Method() { // Arrange ExpressionType nodeType = ExpressionType.Call; Type type = typeof(string); MethodInfo method = typeof(string).GetMethod("Intern"); // Act MethodCallExpressionFingerprint fingerprint1 = new MethodCallExpressionFingerprint(nodeType, type, method); MethodCallExpressionFingerprint fingerprint2 = new MethodCallExpressionFingerprint(nodeType, type, null /* method */); // Assert Assert.AreNotEqual(fingerprint1, fingerprint2, "Fingerprints should not have been equal (differ by Method)."); }
public void Comparison_Equality() { // Arrange ExpressionType nodeType = ExpressionType.Call; Type type = typeof(string); MethodInfo method = typeof(string).GetMethod("Intern"); // Act MethodCallExpressionFingerprint fingerprint1 = new MethodCallExpressionFingerprint(nodeType, type, method); MethodCallExpressionFingerprint fingerprint2 = new MethodCallExpressionFingerprint(nodeType, type, method); // Assert Assert.AreEqual(fingerprint1, fingerprint2, "Fingerprints should have been equal."); Assert.AreEqual(fingerprint1.GetHashCode(), fingerprint2.GetHashCode(), "Fingerprints should have been different."); }
public void Properties() { // Arrange ExpressionType expectedNodeType = ExpressionType.Call; Type expectedType = typeof(string); MethodInfo expectedMethod = typeof(string).GetMethod("Intern"); // Act MethodCallExpressionFingerprint fingerprint = new MethodCallExpressionFingerprint(expectedNodeType, expectedType, expectedMethod); // Assert Assert.AreEqual(expectedNodeType, fingerprint.NodeType); Assert.AreEqual(expectedType, fingerprint.Type); Assert.AreEqual(expectedMethod, fingerprint.Method); }
public void Comparison_Equality() { // Arrange ExpressionType nodeType = ExpressionType.Call; Type type = typeof(string); MethodInfo method = typeof(string).GetMethod("Intern"); // Act MethodCallExpressionFingerprint fingerprint1 = new MethodCallExpressionFingerprint(nodeType, type, method); MethodCallExpressionFingerprint fingerprint2 = new MethodCallExpressionFingerprint(nodeType, type, method); // Assert Assert.Equal(fingerprint1, fingerprint2); Assert.Equal(fingerprint1.GetHashCode(), fingerprint2.GetHashCode()); }
public void Properties() { // Arrange ExpressionType expectedNodeType = ExpressionType.Call; Type expectedType = typeof(string); MethodInfo expectedMethod = typeof(string).GetMethod("Intern"); // Act MethodCallExpressionFingerprint fingerprint = new MethodCallExpressionFingerprint(expectedNodeType, expectedType, expectedMethod); // Assert Assert.Equal(expectedNodeType, fingerprint.NodeType); Assert.Equal(expectedType, fingerprint.Type); Assert.Equal(expectedMethod, fingerprint.Method); }
public void Create_StaticMethod() { // Arrange ParserContext context = new ParserContext(); MethodInfo method = typeof(object).GetMethod("Equals", BindingFlags.Static | BindingFlags.Public); MethodCallExpression expression = Expression.Call(null, method, Expression.Constant(new object()), Expression.Constant(new object())); // Act MethodCallExpressionFingerprint fingerprint = MethodCallExpressionFingerprint.Create(expression, context); // Assert Assert.AreEqual(method, fingerprint.Method); Assert.IsNull(fingerprint.Target); Assert.AreEqual(2, fingerprint.Arguments.Count); }
public void Create_InstanceMethod() { // Arrange ParserContext context = new ParserContext() { ModelParameter = Expression.Parameter(typeof(string), "model") }; MethodInfo method = typeof(string).GetMethod("Clone"); MethodCallExpression expression = Expression.Call(context.ModelParameter, method); // Act MethodCallExpressionFingerprint fingerprint = MethodCallExpressionFingerprint.Create(expression, context); // Assert Assert.AreEqual(method, fingerprint.Method); Assert.AreEqual(ExpressionType.Parameter, fingerprint.Target.NodeType); Assert.AreEqual(0, fingerprint.Arguments.Count); }
public void ToExpression() { // Arrange ParserContext context = new ParserContext() { ModelParameter = Expression.Parameter(typeof(string), "model") }; MethodInfo method = typeof(string).GetMethod("Intern"); MethodCallExpression expression = Expression.Call(null, method, context.ModelParameter); MethodCallExpressionFingerprint fingerprint = MethodCallExpressionFingerprint.Create(expression, context); // Act MethodCallExpression result = (MethodCallExpression)fingerprint.ToExpression(context); // Assert Assert.AreEqual(method, result.Method); Assert.IsNull(result.Object); Assert.AreEqual(1, result.Arguments.Count); Assert.AreEqual(context.ModelParameter, result.Arguments[0]); }
public void Comparison_DifferByTarget() { // fingerprint1 is CALL(String.Clone, PARAM:string):object // fingerprint2 is CALL(String.Clone, CONST:string):object, so not equivalent // Arrange ParserContext context = new ParserContext() { ModelParameter = Expression.Parameter(typeof(string), "model") }; MethodInfo method = typeof(string).GetMethod("Clone"); ExpressionFingerprint fingerprint1 = MethodCallExpressionFingerprint.Create(Expression.Call(context.ModelParameter, method), context); ExpressionFingerprint fingerprint2 = MethodCallExpressionFingerprint.Create(Expression.Call(Expression.Constant(""), method), context); // Act bool areEqual = Object.Equals(fingerprint1, fingerprint2); // Assert Assert.IsFalse(areEqual, "Fingerprints should not have been equivalent - differ by MethodCallExpressionFingerprint.Target."); }
public void Comparison_DifferByMethod() { // fingerprint1 is CALL(String.ToLower, PARAM:string):string // fingerprint1 is CALL(String.ToUpper, PARAM:string):string, so not equivalent // Arrange ParserContext context = new ParserContext() { ModelParameter = Expression.Parameter(typeof(string), "model") }; MethodInfo toLower = typeof(string).GetMethod("ToLower", Type.EmptyTypes); MethodInfo toUpper = typeof(string).GetMethod("ToUpper", Type.EmptyTypes); ExpressionFingerprint fingerprint1 = MethodCallExpressionFingerprint.Create(Expression.Call(context.ModelParameter, toLower), context); ExpressionFingerprint fingerprint2 = MethodCallExpressionFingerprint.Create(Expression.Call(context.ModelParameter, toUpper), context); // Act bool areEqual = Object.Equals(fingerprint1, fingerprint2); // Assert Assert.IsFalse(areEqual, "Fingerprints should not have been equivalent - differ by MethodCallExpressionFingerprint.Method."); }
public void Comparison_EquivalentExpressions() { // both fingerprints are CALL(String.Clone, PARAM:string):object, so are equivalent // Arrange ParserContext context = new ParserContext() { ModelParameter = Expression.Parameter(typeof(string), "model") }; MethodInfo method = typeof(string).GetMethod("Clone"); ExpressionFingerprint fingerprint1 = MethodCallExpressionFingerprint.Create(Expression.Call(context.ModelParameter, method), context); ExpressionFingerprint fingerprint2 = MethodCallExpressionFingerprint.Create(Expression.Call(context.ModelParameter, method), context); // Act HashSet <ExpressionFingerprint> set = new HashSet <ExpressionFingerprint>() { fingerprint1, fingerprint2 }; // Assert Assert.AreEqual(1, set.Count, "Fingerprints should have been equivalent."); }