Esempio n. 1
0
        public static string GenerateTestFilename(IAssertionTool tool, int stackDepth = 1)
        {
            var frame = new StackFrame(stackDepth, false);
            var mi    = frame.GetMethod();
            var name  = mi.Name;

            // For local methods and anonymous types, the C# compiler creates a name that includes the enclosing method name
            // a type like Action ex = ()=>true;
            // <GenerateTestFilename>b_0001
            // so we want to just pull the enclosing method name (enclosed in < and >) and not worry about any of the compiler
            // generated stuff that can change unpredictably during development
            if (name.StartsWith("<"))
            {
                int idx = 1;
                while (name.IndexOf('<', idx) == idx)
                {
                    idx++;
                }
                name = name.Substring(1, name.IndexOf('>') - 1);
            }

            var declaringType = frame.GetMethod().DeclaringType;

            if (Attribute.IsDefined(declaringType, typeof(CompilerGeneratedAttribute)))
            {
                var type2 = declaringType.DeclaringType;
                declaringType = type2 ?? declaringType;
            }
            var fullName  = declaringType.FullName + "." + name;
            var sanitized = SanitizeFilename(tool, fullName);

            return(sanitized);
        }
Esempio n. 2
0
        public virtual void Init()
        {
            _assert = ExpressiveAssertions.Tooling.AssertionRendererTool.Create(
                CompositeAssertionTool.Create(
                    ExpressiveAssertions.Tooling.AssertionRendererTool.Create(
                        TraceLoggingAssertionTool.Create()
                        ),
                    _introspective = new IntrospectiveAssertionTool(
                        ExpressiveAssertions.Tooling.AssertionRendererTool.Create(
                            CompositeAssertionTool.Create(
                                TraceLoggingAssertionTool.Create(),
                                ExpressiveAssertions.MSTest.MSTestAssertionTool.Create()
                                )
                            )
                        )
                    )
                );

            FilesystemAssertionRepository.SetFilesystemFilenameRemovePrefix(_assert, "ExpressiveAssertions.Tests.");
            var assertPath = System.IO.Path.Combine("..", "..", "..", "assertions",
                                                    FilesystemAssertionRepository.SanitizeFilename(_assert, TestContext.FullyQualifiedTestClassName),
                                                    FilesystemAssertionRepository.SanitizeFilename(_assert, TestContext.TestName)
                                                    );

            FilesystemAssertionRepository.SetFilesystemAssertionRepositoryPath(_assert, assertPath);
        }
        public static void EachSorted <T>(this IAssertionTool assertTool, Expression <Func <IEnumerable <T> > > expectedExp, Expression <Func <IEnumerable <T> > > actualExp, Expression <Action <IAssertionTool, T, T> > action, string msg, params object[] fmt)
        {
            if (string.IsNullOrWhiteSpace(msg))
            {
                msg = string.Empty;
                fmt = fmt ?? new object[] { };
            }
            else if (fmt == null)
            {
                fmt = new object[] { msg };
                msg = "{0}";
            }

            var evaluator = assertTool.GetExpressionEvaluator();
            var context   = assertTool.ContextGet();

            var expected = evaluator.Eval(expectedExp);
            var actual   = evaluator.Eval(actualExp);

            using (var eenum = expected.GetEnumerator())
                using (var aenum = actual.GetEnumerator())
                {
                    int  i;
                    bool enext = false, anext = false;
                    using (context.Push())
                    {
                        if (!string.IsNullOrWhiteSpace(msg))
                        {
                            context.Set("Message", string.Format(msg, fmt));
                        }

                        for (i = 0; (enext = eenum.MoveNext()) && (anext = aenum.MoveNext()); i++)
                        {
                            context.Set("Element Index", i.ToString());

                            evaluator.Eval(action, assertTool, eenum.Current, aenum.Current);
                        }
                    }
                    if (enext != anext)
                    {
                        int c = i;
                        if (enext)
                        {
                            while (eenum.MoveNext())
                            {
                                c++;
                            }
                            assertTool.AreEqual(c, i, "Element Count Doesn't Match. " + msg, fmt);
                        }
                        else
                        {
                            while (aenum.MoveNext())
                            {
                                c++;
                            }
                            assertTool.AreEqual(i, c, "Element Count Doesn't Match. " + msg, fmt);
                        }
                    }
                }
        }
Esempio n. 4
0
        public static void Each <T>(this IAssertionTool assertTool, Expression <Func <IEnumerable <T> > > collectionExp, Expression <Action <IAssertionTool, T> > action, string msg, params object[] fmt)
        {
            if (string.IsNullOrWhiteSpace(msg))
            {
                msg = string.Empty;
                fmt = fmt ?? new object[] { };
            }
            else if (fmt == null)
            {
                fmt = new object[] { msg };
                msg = "{0}";
            }

            var evaluator = assertTool.GetExpressionEvaluator();
            var context   = assertTool.ContextGet();

            using (context.Push())
            {
                context.Set("Message", string.Format(msg, fmt));

                var collection = evaluator.Eval(collectionExp);
                foreach (var ele in collection.Select((e, i) => new { e, i }))
                {
                    context.Set("Element Index", ele.i.ToString());

                    evaluator.Eval(action, assertTool, ele.e);
                }
            }
        }
Esempio n. 5
0
        public static void Throws <T>(this IAssertionTool assertTool, Expression <Func <object> > test, Exception exc, string message, params object[] fmt)
        {
            if (fmt == null)
            {
                fmt = new object[] { };
            }
            if (fmt.Length <= 0)
            {
                fmt     = new object[] { message };
                message = "{0}";
            }

            Exception internalError = null;

            try
            {
                assertTool.GetExpressionEvaluator().Eval(test);
            }
            catch (Exception eError)
            {
                internalError = eError;
            }

            if (internalError is T)
            {
                assertTool.Accept(new AssertionSuccess(test.Body, null, null, null, null, message, fmt, exc, internalError, assertTool.ContextGetData()));
            }
            else
            {
                assertTool.Accept(new AssertionFailure(test.Body, null, null, null, null, message, fmt, exc, internalError, assertTool.ContextGetData()));
            }
        }
Esempio n. 6
0
 public static string GetFilesystemAssertionExpectedSuffix(IAssertionTool tool)
 {
     if (!TryGetContext <string>(tool, EXPECTED_SUFFIX_CTX, out var suffix))
     {
         return(".expected");
     }
     return(suffix);
 }
Esempio n. 7
0
        public static void IsEmpty <T>(this IAssertionTool assertTool, Expression <Func <IEnumerable <T> > > collection, string msg, params object[] fmt)
        {
            var xgr  = new ExpressionGenerator();
            var eval = assertTool.GetExpressionEvaluator();
            var exp  = xgr.FromFunc(collection, c => c.Count());

            assertTool.AreEqual(0, exp, msg, fmt);
        }
Esempio n. 8
0
 public static int GetFilesystemFilenameMaxLength(IAssertionTool tool)
 {
     if (!TryGetContext <int>(tool, ASSERT_FILENAME_MAXLEN, out var maxlen))
     {
         return(80);
     }
     return(maxlen);
 }
Esempio n. 9
0
 public static string GetFilesystemAssertionActualSuffix(IAssertionTool tool)
 {
     if (!TryGetContext <string>(tool, ACTUAL_SUFFIX_CTX, out var suffix))
     {
         return(".actual");
     }
     return(suffix);
 }
Esempio n. 10
0
 public static byte[][] GetFilesystemAssertionActualFilters(IAssertionTool tool)
 {
     if (!TryGetContext <byte[][]>(tool, ACTUAL_FILTERS, out var filters))
     {
         return(new byte[0][]);
     }
     return(filters);
 }
Esempio n. 11
0
 public static string GetFilesystemFilenameRemovePrefix(IAssertionTool tool)
 {
     if (!TryGetContext <string>(tool, ASSERT_FILENAME_REMOVE_PREFIX, out var prefix))
     {
         return(string.Empty);
     }
     return(prefix);
 }
Esempio n. 12
0
        public static void AddFilesystemAssertionActualFilter(IAssertionTool tool, byte[] filter)
        {
            var current = GetFilesystemAssertionActualFilters(tool);

            Array.Resize(ref current, current.Length + 1);
            current[current.Length - 1] = filter;
            SetFilesystemAssertionActualFilters(tool, current);
        }
Esempio n. 13
0
 public static string GetFilesystemAssertionRepositoryPath(IAssertionTool tool)
 {
     if (!TryGetContext <string>(tool, PATH_CTX, out var path))
     {
         return(string.Empty);
     }
     return(path);
 }
Esempio n. 14
0
 public static int GetFilesystemAssertionCount(IAssertionTool tool)
 {
     if (!TryGetContext <int>(tool, ASSERT_COUNT_CTX, out var count))
     {
         return(0);
     }
     return(count);
 }
Esempio n. 15
0
        public static int AdvanceFilesystemAssertionCount(IAssertionTool tool)
        {
            int count = GetFilesystemAssertionCount(tool);

            count += 1;
            SetContext(tool, ASSERT_COUNT_CTX, count);

            return(count);
        }
Esempio n. 16
0
        public static IAssertionContext ContextGet(this IAssertionTool assertTool)
        {
            IAssertionContext result;

            if (!_CONTEXT.TryGetValue(assertTool, out result))
            {
                _CONTEXT.Add(assertTool, result = new AssertionContext());
            }
            return(result);
        }
        public static IExpressionEvaluator GetExpressionEvaluator(this IAssertionTool assertTool)
        {
            IExpressionEvaluator result;

            if (!_EVALUATORS.TryGetValue(assertTool, out result))
            {
                _EVALUATORS.Add(assertTool, result = new DefaultEvaluator());
            }
            return(result);
        }
Esempio n. 18
0
        public static IAssertionTool ContextSet(this IAssertionTool assertTool, IAssertionContext ctx)
        {
            IAssertionContext tmp;

            if (_CONTEXT.TryGetValue(assertTool, out tmp))
            {
                _CONTEXT.Remove(assertTool);
            }
            _CONTEXT.Add(assertTool, ctx);
            return(assertTool);
        }
        public static IAssertionTool SetExpressionEvaluator(this IAssertionTool assertTool, IExpressionEvaluator eval)
        {
            IExpressionEvaluator tmp;

            if (_EVALUATORS.TryGetValue(assertTool, out tmp))
            {
                _EVALUATORS.Remove(assertTool);
            }
            _EVALUATORS.Add(assertTool, eval);
            return(assertTool);
        }
Esempio n. 20
0
        public static Expression <Func <T> > ExpectationFromDisk <T>(this IAssertionTool tool, Func <byte[], T> fromDisk = null, int stackDepth = 2)
        {
            string filename = GenerateTestFilename(tool, stackDepth);

            filename = string.Format("{3}{0}.{1}{2}", filename, AdvanceFilesystemAssertionCount(tool), GetFilesystemAssertionExpectedSuffix(tool), GetFilesystemAssertionFilenamePrefix(tool));
            filename = Path.Combine(GetFilesystemAssertionRepositoryPath(tool), filename);
            EnsureDirectory(filename);

            if (fromDisk == null)
            {
                fromDisk = d => (T)Convert.ChangeType(Encoding.UTF8.GetString(d), typeof(T));
            }
            return(() => AccessExpectation <T>(filename, fromDisk, tool));
        }
Esempio n. 21
0
        public static void EachIsDistinct <T>(this IAssertionTool assertTool, Expression <Func <IEnumerable <T> > > collectionExp, string msg, params object[] fmt)
        {
            var set = new HashSet <T>();
            Func <IAssertionTool, T, bool> isDistinct = (assert, t) => {
                if (set.Contains(t))
                {
                    return(false);
                }
                set.Add(t);
                return(true);
            };

            assertTool.Each(collectionExp, (assert, t) => assert.IsTrue(() => isDistinct(assert, t)), msg, fmt);
        }
Esempio n. 22
0
        static bool TryGetContext <T>(IAssertionTool tool, string key, out T val)
        {
            var dict = _context.GetOrCreateValue(tool);
            var res  = dict.TryGetValue(key, out var obj);

            if (res)
            {
                val = (T)obj;
            }
            else
            {
                val = default(T);
            }
            return(res);
        }
Esempio n. 23
0
        public TestBase()
        {
            _log = new ExceptionHandlingLogStream(new UniquenessCodeGeneratorLogStream(new ExceptionFormatterLogStream(new DefaultTextLogStreamFormatter(
                                                                                                                           CompositeLogStream.Create(
                                                                                                                               // Filter all errors and alerts to stderr
                                                                                                                               FilterManager.CreateStream(
                                                                                                                                   new StderrLogStream(),
                                                                                                                                   FilterManager.CreateFilter(lt => false, lt => false, lt => false, lt => false, null, null, lt => false, (lt, ct) => false)
                                                                                                                                   ),
                                                                                                                               // everything else to stdout
                                                                                                                               FilterManager.CreateStream(
                                                                                                                                   new StdoutLogStream(),
                                                                                                                                   FilterManager.CreateFilter(null, null, null, null, lt => false, lt => false, null, null)
                                                                                                                                   )
                                                                                                                               )
                                                                                                                           ))));

            _assert = ExpressiveAssertions.Tooling.ShortAssertionRendererTool.Create(
                ExpressiveAssertions.MSTest.MSTestAssertionTool.Create()
                );
        }
Esempio n. 24
0
        public static Expression <Func <T> > ActualToDisk <T>(this IAssertionTool tool, Expression <Func <T> > content, Func <T, byte[]> toDisk = null, int stackDepth = 2)
        {
            string filename = GenerateTestFilename(tool, stackDepth);

            filename = string.Format("{3}{0}.{1}{2}", filename, GetFilesystemAssertionCount(tool), GetFilesystemAssertionActualSuffix(tool), GetFilesystemAssertionFilenamePrefix(tool));
            filename = Path.Combine(GetFilesystemAssertionRepositoryPath(tool), filename);
            EnsureDirectory(filename);

            if (toDisk == null)
            {
                toDisk = d => Encoding.UTF8.GetBytes(Convert.ToString(d));
            }

            var xgr      = new ExpressionGenerator();
            var content2 = xgr.FromFunc(
                content,
                c => WriteActualToDisk <T>(filename, c, toDisk, tool)
                );

            return(content2);
        }
Esempio n. 25
0
        public virtual void Init()
        {
            _assert = ExpressiveAssertions.Tooling.AssertionRendererTool.Create(
                CompositeAssertionTool.Create(
                    ExpressiveAssertions.Tooling.AssertionRendererTool.Create(
                        TraceLoggingAssertionTool.Create()
                        ),
                    _introspective = new IntrospectiveAssertionTool(
                        ExpressiveAssertions.Tooling.AssertionRendererTool.Create(
                            CompositeAssertionTool.Create(
                                TraceLoggingAssertionTool.Create(),
                                ExpressiveAssertions.MSTest.MSTestAssertionTool.Create()
                                )
                            )
                        )
                    )
                );

            var evaluator = new DateTimeNormalizationEvaluator(new DefaultEvaluator());

            _assert.SetExpressionEvaluator(evaluator);
        }
        public void ReplayWhere(IAssertionTool tool, Func <AssertionData, int, bool> condition, string msg, params object[] fmt)
        {
            List <Exception> errors = new List <Exception>();

            foreach (var d in _memory.Where(condition))
            {
                try
                {
                    d.Visit(tool);
                }
                catch (Exception eError)
                {
                    errors.Add(eError);
                }
            }

            if (errors.Any())
            {
                tool.Accept(new AssertionFailure(
                                null, null, null, null, null,
                                msg, fmt, new AggregateException("One or more errors ocurred while replaying assertion set", errors), null,
                                tool.ContextGetData()));
            }
        }
 public override void Visit(IAssertionTool tool)
 {
     tool.Accept(this);
 }
Esempio n. 28
0
 public static void Each <T>(this IAssertionTool assertTool, IEnumerable <T> collection, Expression <Action <IAssertionTool, T> > action, string msg)
 {
     Each(assertTool, () => collection, action, msg, null);
 }
Esempio n. 29
0
 public abstract void Visit(IAssertionTool tool);
Esempio n. 30
0
 public static void Every <T>(this IAssertionTool assertTool, IEnumerable <T> collection, Expression <Action <IAssertionTool, T> > action)
 {
     Each(assertTool, () => collection, action, null, null);
 }