public void GivenConstructorWhenCtorExprCreatedThenShouldSetProperties(
            ConstructorInfo info,
            Expression arg,
            MemberInfo member)
        {
            NewExpression expr;

            if (arg == null)
            {
                expr = Expression.New(info);
            }
            else if (member == null)
            {
                expr = Expression.New(info, new[] { arg });
            }
            else
            {
                expr = Expression.New(info, new[] { arg }, new[] { member });
            }
            var ctor = new CtorExpr(expr);

            Assert.NotNull(ctor.CtorInfo);
            if (member != null)
            {
                Assert.Contains(member.Name, ctor.MemberKeys[0]);
            }
        }
        public void WhenCtorExprCreatedThenShouldInitializeLists()
        {
            var target = new CtorExpr();

            Assert.NotNull(target.Arguments);
            Assert.NotNull(target.MemberKeys);
        }
        public void GivenMixedFieldsAndPropertiesWhenCtorExprCreatedThenShouldMapAppropriately()
        {
            var expr = Expression.New(
                typeof(FieldsAndProps).GetConstructors().Single(),
                new[]
            {
                1.AsConstantExpression(),
                nameof(SerializableExpressionTests).AsConstantExpression(),
                2.AsConstantExpression(),
                nameof(GivenMixedFieldsAndPropertiesWhenCtorExprCreatedThenShouldMapAppropriately)
                .AsConstantExpression()
            },
                new MemberInfo[]
            {
                typeof(FieldsAndProps).GetField(nameof(FieldsAndProps.field)),
                typeof(FieldsAndProps).GetProperty(nameof(FieldsAndProps.ValueStr)),
                typeof(FieldsAndProps).GetProperty(nameof(FieldsAndProps.Value)),
                typeof(FieldsAndProps).GetField(nameof(FieldsAndProps.fieldStr)),
            });
            var ctor = new CtorExpr(expr);

            Assert.Equal(2, ctor.MemberKeys.Count(m => m.StartsWith("P:")));
            Assert.Equal(2, ctor.MemberKeys.Count(m => m.StartsWith("F:")));
        }