static void RunInteractive(XmlTestType filter, bool verbose)
        {
            string fileName = String.Empty;

            XmlTestController controller = new XmlTestController();

            TestRunner runner = new TestRunner(filter, verbose);

            PrintMenu();

            fileName = Console.ReadLine().Trim();

            while (fileName != "exit")
            {
                XmlTestCollection listTests = null;
                try
                {
                    if (fileName == "default")
                    {
                        RunDefault();
                    }
                    else
                    {
                        listTests = controller.Load(fileName);
                    }
                }
                catch (Exception ex)
                {
                    XmlTestExceptionManager.Publish(ex);
                } 

                if (listTests != null && listTests.Count > 0)
                {
                    listTests.TestEvent += new XmlTextEventHandler(runner.OnSimpleTest);

                    try
                    {
                        Console.WriteLine("Running...{0}", listTests.Name);

                        listTests.RunTests();

                        runner.PrintSimpleTestResult(listTests.Count);

                        runner.SimpleTestReset(XmlTestType.None, verbose);
                    }
                    catch (Exception ex)
                    {
                        XmlTestExceptionManager.Publish(ex);
                    }
                }

                PrintMenu();

                fileName = Console.ReadLine().Trim();
            }
        }
 static void RunDefault()
 {
     TestOptionsParser parserOptions = new TestOptionsParser();
     TestInfoCollection listTests =
         parserOptions.ParseProject(@"..\..\..\NetTopologySuite.TestRunner.Tests\Default.xml");
     
     if (listTests != null && listTests.Count > 0)
     {
         TestRunner runner = new TestRunner(listTests);
         runner.Run();
         runner.PrintResult();
     }   
 }
        static void Main(string[] args)
        {
            if (args == null || args.Length == 0)
            {
                XmlTestExceptionManager.ErrorEvent += new XmlTestErrorEventHandler(OnErrorEvent);
                RunInteractive(XmlTestType.None, true);
            }
            else
            {
                TestOptionsParser parser = new TestOptionsParser();
                TestInfoCollection collection = parser.Parse(args);

                if (parser.IsDefault)
                {
                    RunDefault();
                }
                else
                {
                    if (collection != null)
                    {
                        if (collection.Count == 1)
                        {
                            // see if it is the interactive type
                            TestInfo info = collection[0];
                            if (info.Interactive)
                            {
                                if (info.Exception)
                                    XmlTestExceptionManager.ErrorEvent += new XmlTestErrorEventHandler(OnErrorEvent);
                                RunInteractive(info.Filter, info.Verbose);
                            }
                        }
                        else
                        {
                            TestRunner runner = new TestRunner(collection);
                            runner.Run();
                        }
                    }
                    else
                    {
                        XmlTestExceptionManager.ErrorEvent += new XmlTestErrorEventHandler(OnErrorEvent);
                        RunInteractive(XmlTestType.None, true);
                    }
                }
            }

        }
        static void RunInteractive(XmlTestType filter, bool verbose)
        {
            string fileName = String.Empty;

            XmlTestController controller = new XmlTestController();

            TestRunner runner = new TestRunner(filter, verbose);

            PrintMenu();

            fileName = Console.ReadLine().Trim();

            while (fileName != "exit")
            {
                XmlTestCollection listTests = null;
                try
                {
                    switch (fileName)
                    {
                        case "default":
                            RunDefault();
                            break;
                        case "other":
                            RunOther();
                            break;
                        case "all":
                            RunDefault();
                            RunOther();
                            break;
                        default:
                            if (Directory.Exists(fileName))
                            {
                                string tmp = Path.GetTempFileName();
                                File.AppendAllText(tmp,
                                                   string.Format(
                                                       "<?xml version=\"1.0\" encoding=\"utf-8\" ?><project><test verbose=\"false\" exception=\"true\" interactive=\"false\" filter=\"none\"><dirs><dir>{0}</dir></dirs></test></project>",
                                                       fileName));
                                listTests = controller.Load(tmp);
                            }
                            else
                                listTests = controller.Load(fileName);

                            break;
                    }
                }
                catch (Exception ex)
                {
                    XmlTestExceptionManager.Publish(ex);
                } 

                if (listTests != null && listTests.Count > 0)
                {
                    listTests.TestEvent += new XmlTextEventHandler(runner.OnSimpleTest);

                    try
                    {
                        Console.WriteLine("Running...{0}", listTests.Name);

                        listTests.RunTests();

                        runner.PrintSimpleTestResult(listTests.Count);

                        runner.SimpleTestReset(XmlTestType.None, verbose);
                    }
                    catch (Exception ex)
                    {
                        XmlTestExceptionManager.Publish(ex);
                    }
                }

                PrintMenu();

                fileName = Console.ReadLine().Trim();
            }
        }