Exemplo n.º 1
0
        protected static IEnumerable <ExpectResult> CompareAssert(
            IEvent <T>[] expected,
            IEvent <T>[] actual)
        {
            var max = Math.Max(expected.Length, actual.Length);

            for (int i = 0; i < max; i++)
            {
                var ex = expected.Skip(i).FirstOrDefault();
                var ac = actual.Skip(i).FirstOrDefault();

                var expectedString = ex == null ? "No event expected" : Describe.Object(ex);
                var actualString   = ac == null ? "No event actually" : Describe.Object(ac);

                var result = new ExpectResult {
                    Expectation = expectedString
                };

                var realDiff = CompareObjects.FindDifferences(ex, ac);
                if (!string.IsNullOrEmpty(realDiff))
                {
                    var stringRepresentationsDiffer = expectedString != actualString;

                    result.Failure = stringRepresentationsDiffer ?
                                     GetAdjusted("Was:  ", actualString) :
                                     GetAdjusted("Diff: ", realDiff);
                }

                yield return(result);
            }
        }
Exemplo n.º 2
0
        protected void PrintSpecification()
        {
            Console.WriteLine("Test:          {0}", GetType().Name.Replace("_", " "));
            Console.WriteLine("Specification: {0}", TestContext.CurrentContext.Test.Name.Replace("_", " "));

            Console.WriteLine();
            if (_given.Any())
            {
                Console.WriteLine("GIVEN:");

                for (var i = 0; i < _given.Count; i++)
                {
                    PrintAdjusted("  " + (i + 1) + ". ", Describe.Object(_given[i]).Trim());
                }
            }
            else
            {
                Console.WriteLine("GIVEN no events");
            }

            if (_when != null)
            {
                Console.WriteLine();
                Console.WriteLine("WHEN:");
                PrintAdjusted("  ", Describe.Object(_when).Trim());
            }

            Console.WriteLine();

            if (_then.Any())
            {
                Console.WriteLine("THEN:");
                for (int i = 0; i < _then.Count; i++)
                {
                    PrintAdjusted("  " + (i + 1) + ". ", Describe.Object(_then[i]).Trim());
                }
            }
            else
            {
                Console.WriteLine("THEN nothing.");
            }
        }
Exemplo n.º 3
0
        public static void Document <T>(
            RunResult result,
            List <string> before,
            IEvent <T>[] given,
            ICommand <T> when,
            string decisions) where T : IIdentity
        {
            var passed      = result.Passed ? "[Passed]" : "[Failed]";
            var cleanupName = result.FoundOnMemberInfo.DeclaringType.Name.CleanupName();

            Console.WriteLine("{2} Use case '{0} - {1}'.", cleanupName, result.Name.CleanupName(), passed);

            var cleared = before
                          .Select(b => (b ?? "").TrimEnd())
                          .Where(s => !string.IsNullOrEmpty(s))
                          .ToList();

            if (cleared.Any())
            {
                Console.WriteLine();
                Console.WriteLine("Environment: ");
                foreach (var e in cleared)
                {
                    PrintAdjusted("  ", e);
                }
            }

            if (given.Any())
            {
                Console.WriteLine();
                Console.WriteLine("Given:");

                for (int i = 0; i < given.Length; i++)
                {
                    PrintAdjusted(" " + (i + 1) + ". ", Describe.Object(given[i]).Trim());
                }
            }


            if (when != null)
            {
                Console.WriteLine();
                Console.WriteLine("When:");
                PrintAdjusted("  ", Describe.Object(when).Trim());
            }

            Console.WriteLine();
            Console.WriteLine("Expectations:");
            foreach (var expecation in result.Expectations)
            {
                var s = expecation.Passed ? "[ok]" : "[NO]";
                PrintAdjusted("  " + s + " ", expecation.Text.Trim());
                if (!expecation.Passed && expecation.Exception != null)
                {
                    PrintAdjusted("  ", expecation.Exception.Message);
                }
            }


            if (result.Thrown != null)
            {
                Console.WriteLine("Specification failed: " + result.Message.Trim());
                Console.WriteLine();
                Console.WriteLine(result.Thrown);
            }

            if (decisions.Length > 0)
            {
                Console.WriteLine("");
                Console.WriteLine("Decisions made:");
                PrintAdjusted("  ", decisions);
            }

            Console.WriteLine(new string('-', 80));
            Console.WriteLine();
        }
Exemplo n.º 4
0
        public IEnumerable <ExpectationResult> Assert(object fromWhen)
        {
            var actual = ((IEvent <T>[])fromWhen);

            // structurally equal comparison


            for (int i = 0; i < _expected.Count; i++)
            {
                var expectedHumanReadable = Describe.Object(_expected[i]);
                if (actual.Length > i)
                {
                    var diffs = CompareObjects.FindDifferences(_expected[i], actual[i]);
                    if (string.IsNullOrEmpty(diffs))
                    {
                        yield return(new ExpectationResult
                        {
                            Passed = true,
                            Text = expectedHumanReadable
                        });
                    }
                    else
                    {
                        var actualHumanReadable = Describe.Object(actual[i]);

                        if (actualHumanReadable != expectedHumanReadable)
                        {
                            var msg = PrintEvil.GetAdjusted("Was: ", actualHumanReadable);
                            // there is a difference in textual representations
                            yield return(new ExpectationResult
                            {
                                Passed = false,
                                Text = expectedHumanReadable,
                                Exception = new InvalidOperationException(msg)
                            });
                        }
                        else
                        {
                            yield return(new ExpectationResult
                            {
                                Passed = false,
                                Text = expectedHumanReadable,
                                Exception = new InvalidOperationException(diffs)
                            });
                        }
                    }
                }
                else
                {
                    yield return(new ExpectationResult
                    {
                        Passed = false,
                        Text = expectedHumanReadable,
                        Exception = new InvalidOperationException("  Message is missing")
                    });
                }
            }

            for (int i = _expected.Count; i < actual.Count(); i++)
            {
                var msg = PrintEvil.GetAdjusted("Was: ", Describe.Object(actual[i]));

                yield return(new ExpectationResult
                {
                    Passed = false,
                    Text = "Unexpected message",
                    Exception = new InvalidOperationException(msg)
                });
            }
        }