public void WriteTrx()
        {
            if (Breaker.IsBreakReceived())
            {
                return;
            }

            IList <RunData>    items   = RunDataListBuilder.GetFull();
            IList <ResultFile> results = Collector.Collect(items);

            if (results.Count == 0)
            {
                Console.WriteLine("No results where generated, nothing to merge to the output trx");
                return;
            }

            using (Stream stream = TrxWriter.OpenResultFile(Args))
            {
                // Console.WriteLine("Results File: " + Args.Root + "\\" + Args.Output);
                if (TrxWriter.WriteFile(results, stream) == false)
                {
                    ResultCode = 3;
                }
            }
        }
        public void Clean()
        {
            if (Breaker.IsBreakReceived())
            {
                return;
            }

            IList <RunData> items = RunDataListBuilder.GetFull();

            Cleaner.Clean(items);
        }
        public void Execute()
        {
            if (WindowsFileHelper.FolderExist(Args.Root) == false)
            {
                WindowsFileHelper.CreateFolder(Args.Root);
            }

            IRunDataEnumerator enumerator = RunDataListBuilder.GetEnumerator();

            if (enumerator.HasItems() == false)
            {
                Console.WriteLine("Test Classes where not found, nothing to run");
                return;
            }

            while (enumerator.HasItems())
            {
                if (Breaker.IsBreakReceived())
                {
                    return;
                }

                ExecutorLauncher.WaitForAnyThreadToComplete();
                while (ExecutorLauncher.HasFreeThreads())
                {
                    if (Breaker.IsBreakReceived())
                    {
                        return;
                    }

                    if (!enumerator.HasItems())
                    {
                        break;
                    }

                    RunData data = enumerator.PeekNext();
                    if (null == data)
                    {
                        // if peeked all items till the end, but none of them was valid to launch a thread (due to concurrent groups)
                        break;
                    }

                    if (ExecutorLauncher.LaunchExecutor(data))
                    {
                        // if launching succeded (group was valid)
                        enumerator.MoveNext();
                    }
                }
            }

            ExecutorLauncher.WaitForAll();
        }
        public void Parse()
        {
            if (Breaker.IsBreakReceived())
            {
                return;
            }

            foreach (string assemblyPath in Args.AssemblyList)
            {
                Assembly        assembly     = WindowsFileHelper.GetAssembly(assemblyPath);
                TestAssembly    testAssembly = Parser.Parse(assembly);
                IList <RunData> items        = RunDataBuilder.Create(testAssembly);
                RunDataListBuilder.Add(items);
            }
        }
        public void Parse(FilterMode filterMode, string filterCategory, List <string> filterCategories)
        {
            if (Breaker.IsBreakReceived())
            {
                return;
            }
            var assemblies = string.Join(",", Args.AssemblyList);

            Console.WriteLine($"assemblies are: {assemblies}.");
            foreach (string assemblyPath in Args.AssemblyList)
            {
                Assembly assembly = WindowsFileHelper.GetAssembly(assemblyPath);
                //TODO logs

                foreach (string category in filterCategories)
                {
                    Console.WriteLine("In the catogey : " + category);
                    TestAssembly testAssembly = Parser.Parse(assembly, filterMode, category);
                    Console.WriteLine("test assmaly is  : " + testAssembly + "in the category: " + category);
                    IList <RunData> items = RunDataBuilder.Create(testAssembly);
                    RunDataListBuilder.Add(items);
                }
            }
        }