public void CaseTransform_OriginalCaseReturnsCorrectly() { var propertyName = "MyPropertyName"; var result = ExpressionHelpers.CaseTransform(propertyName, CaseTransformType.OriginalCase); Assert.Equal("MyPropertyName", result); }
public void CaseTransform_SingleCharacterCamelCaseReturnsCorrectly() { var propertyName = "M"; var result = ExpressionHelpers.CaseTransform(propertyName, CaseTransformType.CamelCase); Assert.Equal("m", result); }
public void CaseTransform_UpperCaseReturnsCorrectly() { var propertyName = "MyPropertyName"; var result = ExpressionHelpers.CaseTransform(propertyName, CaseTransformType.UpperCase); Assert.Equal("MYPROPERTYNAME", result); }
public void CaseTransform_AllCaseTransformTypesAreImplemented() { var propertyName = "MyPropertyName"; foreach (var value in Enum.GetValues(typeof(CaseTransformType)).Cast <CaseTransformType>()) { ExpressionHelpers.CaseTransform(propertyName, value); } //assert no exception is thrown }
private List <string> GetPathSegments(Expression expr) { var listOfSegments = new List <string>(); switch (expr.NodeType) { case ExpressionType.ArrayIndex: var binaryExpression = (BinaryExpression)expr; listOfSegments.AddRange(GetPathSegments(binaryExpression.Left)); listOfSegments.Add(ExpressionHelpers.CaseTransform(binaryExpression.Right.ToString(), CaseTransformType)); return(listOfSegments); case ExpressionType.Call: var methodCallExpression = (MethodCallExpression)expr; listOfSegments.AddRange(GetPathSegments(methodCallExpression.Object)); listOfSegments.Add(ExpressionHelpers.CaseTransform(EvaluateExpression(methodCallExpression.Arguments[0]), CaseTransformType)); return(listOfSegments); case ExpressionType.Convert: listOfSegments.AddRange(GetPathSegments(((UnaryExpression)expr).Operand)); return(listOfSegments); case ExpressionType.MemberAccess: var memberExpression = expr as MemberExpression; listOfSegments.AddRange(GetPathSegments(memberExpression.Expression)); // Get property name, respecting JsonProperty attribute listOfSegments.Add(ExpressionHelpers.CaseTransform(GetPropertyNameFromMemberExpression(memberExpression), CaseTransformType)); return(listOfSegments); case ExpressionType.Parameter: // Fits "x => x" (the whole document which is "" as JSON pointer) return(listOfSegments); default: throw new InvalidOperationException(Resources.FormatExpressionTypeNotSupported(expr)); } }