예제 #1
0
파일: Program.cs 프로젝트: pvginkel/Jint2
        private static void RunTestSuite(Type testSuiteType)
        {
            string basePath = Path.Combine(
                Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(typeof(Program).Assembly.Location))),
                "Suites"
            );

            var resultSets = new List<Dictionary<string, ITestResult>>();

            var engines = new IEngine[] { new Engines.JintEngine(), new IronJsEngine(), new JurassicEngine() };

            foreach (var engine in engines)
            {
                var testSuite = (TestSuite)Activator.CreateInstance(testSuiteType, new object[] { basePath, engine });

                resultSets.Add(testSuite.Run());
            }

            // Create the relative test results.

            var lines = new List<ResultLine>();

            foreach (string test in resultSets[0].Keys)
            {
                lines.Add(new ResultLine(
                    Path.GetFileName(test),
                    resultSets.Select(p => p[test]).ToList()
                ));
            }

            lines.Sort((a, b) => a.RelativeResults[0].Difference.CompareTo(b.RelativeResults[0].Difference));

            // Calculate the column widths.

            const string testHeader = "Test";

            var columns = new int[engines.Length];

            columns[0] = testHeader.Length;

            for (int i = 1; i < engines.Length; i++)
            {
                columns[i] = engines[i].Name.Length;
            }

            foreach (var line in lines)
            {
                columns[0] = Math.Max(columns[0], line.Test.Length);

                for (int i = 0; i < line.RelativeResults.Count; i++)
                {
                    columns[i + 1] = Math.Max(columns[i + 1], line.RelativeResults[i].ToString().Length);
                }
            }

            // Print the header.

            ConsoleEx.Write(ConsoleColor.DarkCyan, "Test results relative to ");
            ConsoleEx.WriteLine(ConsoleColor.Cyan, engines[0].Name);
            ConsoleEx.WriteLine(ConsoleColor.DarkCyan, "=================================================");
            Console.WriteLine();

            WriteGridLine(
                columns,
                new[] { ConsoleColor.Cyan },
                new[] { testHeader }.Concat(engines.Skip(1).Select(p => p.Name))
            );
            WriteGridSeparator(columns);

            foreach (var line in lines)
            {
                var colors = new List<ConsoleColor>();

                colors.Add(ConsoleColor.Gray);

                for (int i = 0; i < line.RelativeResults.Count; i++)
                {
                    colors.Add(line.RelativeResults[i].Difference < 1 ? ConsoleColor.Green : ConsoleColor.Red);
                }

                WriteGridLine(
                    columns,
                    colors.ToArray(),
                    new[] { line.Test }.Concat(line.RelativeResults.Select(p => p.ToString()))
                );
            }

            Console.WriteLine();
        }