コード例 #1
0
ファイル: MilvaAssert.cs プロジェクト: Milvasoft/Milvasoft
    /// <summary>
    ///
    /// Performs a check for all members in the collection.
    ///
    /// <para> Here you can send properties that need to be checked. See <paramref name="expressions"/> </para>
    ///
    /// <para> Here you can send the rule to be made during the check. See <paramref name="customAssertEnum"/> </para>
    ///
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="collection"></param>
    /// <param name="customAssertEnum"></param>
    /// <param name="expressions"></param>
    public static void CheckAllItems <T>(IEnumerable <T> collection, CheckPropertyEnum customAssertEnum, List <Expression <Func <T, object> > > expressions = null)
    {
        List <string> checkedProps = new();

        if (expressions != null)
        {
            foreach (var expression in expressions)
            {
                checkedProps.Add(expression.GetPropertyName());
            }
        }
        else
        {
            foreach (var item in typeof(T).GetProperties())
            {
                checkedProps.Add(item.Name);
            }
        }

        foreach (var item in collection)
        {
            foreach (var propertyName in checkedProps)
            {
                var predicate = GetPredicate <T>(propertyName, customAssertEnum);

                var result = predicate.Compile().Invoke(item);

                if (!result)
                {
                    throw new MilvaTestException($"Not all items match to predicate. Mismatched property : {propertyName}, Predicate : {customAssertEnum}");
                }
            }
        }
    }
コード例 #2
0
ファイル: MilvaAssert.cs プロジェクト: Milvasoft/Milvasoft
    /// <summary>
    /// creates a predicate according to <paramref name="customAssertEnum"/> and <paramref name="propName"/>.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="propName"></param>
    /// <param name="customAssertEnum"></param>
    /// <returns></returns>
    private static Expression <Func <T, bool> > GetPredicate <T>(string propName, CheckPropertyEnum customAssertEnum)
    {
        ParameterExpression argParam     = Expression.Parameter(typeof(T), "p");
        Expression          nameProperty = Expression.Property(argParam, propName);

        var defaultExpression = Expression.Default(typeof(T).GetProperty(propName).PropertyType);

        BinaryExpression notEqualOrEqual;

        if (customAssertEnum == CheckPropertyEnum.NotDefault)
        {
            notEqualOrEqual = Expression.NotEqual(nameProperty, defaultExpression);
        }
        else
        {
            notEqualOrEqual = Expression.Equal(nameProperty, defaultExpression);
        }

        return(Expression.Lambda <Func <T, bool> >(notEqualOrEqual, argParam));
    }