Esempio n. 1
0
        private NeedlessIncludeLines FinalIntegrationTest(NeedlessIncludeLines needlessIncludeLines)
        {
            Dictionary <string, List <string> > filenameAndIncludes = new Dictionary <string, List <string> >();

            foreach (var info in needlessIncludeLines.IncludeLineInfos)
            {
                if (filenameAndIncludes.ContainsKey(info.Filename) == false)
                {
                    filenameAndIncludes.Add(info.Filename, new List <string>());
                }
                filenameAndIncludes[info.Filename].Add(info.IncludeLine);
            }
            while (filenameAndIncludes.Count > 0)
            {
                if (StopMarker.StopRequested)
                {
                    return(null);
                }
                _logger.LogSeperateLine();
                _logger.Log("| Final integration test");
                List <FileModifier> fileModifiers = new List <FileModifier>();
                foreach (var filenameAndInclude in filenameAndIncludes)
                {
                    string msg = string.Format("|  + {0}:{1}", filenameAndInclude.Key, string.Join(',', filenameAndInclude.Value));
                    _logger.Log(msg);
                    FileModifier fileModifier = new FileModifier(filenameAndInclude.Key, _config.ApplyChangeEncoding);
                    fileModifier.RemoveAndWrite(filenameAndInclude.Value);
                    fileModifiers.Add(fileModifier);
                }
                var buildResult = _builder.Build();
                _logger.Log("|  : Build Duration: " + buildResult.GetBuildDurationString());
                foreach (var fileModifier in fileModifiers)
                {
                    fileModifier.RevertAndWrite();
                }
                if (buildResult.IsSuccess)
                {
                    _logger.Log("|  ----> Final Integration Test Build Success");
                    break;
                }
                else
                {
                    _logger.Log("|  ----> Final Integration Test Build Failed");
                }
                SortedSet <string> buildErrorFilenames = BuildErrorFileListExtractor.Extract(buildResult.Outputs);
                foreach (var temp in filenameAndIncludes)
                {
                    if (buildErrorFilenames.Count > 0 && filenameAndIncludes.ContainsKey(buildErrorFilenames.Min))
                    {
                        string filename = buildErrorFilenames.Min;
                        _logger.Log(string.Format("|  ----> Remove {0} and retrying...", filename));
                        filenameAndIncludes.Remove(filename);
                        break;
                    }
                    else
                    {
                        string filename = temp.Key;
                        _logger.Log(string.Format("|  ----> Remove {0} and retrying...", filename));
                        filenameAndIncludes.Remove(filename);
                        break;
                    }
                }
            }
            NeedlessIncludeLines output = new NeedlessIncludeLines();

            if (filenameAndIncludes.Count <= 0)
            {
                return(output);
            }
            foreach (var result in filenameAndIncludes)
            {
                foreach (var line in result.Value)
                {
                    output.Add(result.Key, line);
                }
            }
            return(output);
        }