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
        }
Example #5
0
        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));
            }
        }