public MutatingWalker(MutantEnumerator mutator, OnMutant callback, CoverageData coverage, Dictionary <int, List <String> > testCaseCoverageByLineID)
 {
     _mutator  = mutator;
     _onMutant = callback;
     _coverage = coverage;
     _testCaseCoverageByLineID = testCaseCoverageByLineID;
 }
        public CoveredProject(Project myProject, Project testProject, OnMutant onMutantKilled, OnMutant onMutantLived)
        {
            this._onMutantKilled = onMutantKilled;
            this._onMutantLived  = onMutantLived;
            outputPath           = Path.GetDirectoryName(testProject.FilePath);
            appConfigPath        = Path.Combine(outputPath, "App.config");
            var interopsLocation = typeof(AssemblyLoader).Assembly.Location;

            try
            {
                File.Copy(appConfigPath, interopsLocation + ".config", true);
            }
            catch (FileNotFoundException e)
            {
                // no config file; fine
                Debug.Print(e.ToString());
            }
            //Directory.SetCurrentDirectory(outputPath);
            Directory.SetCurrentDirectory(Path.GetDirectoryName(testProject.FilePath));


            testCompiler    = GetLibraryCompilation(testProject);
            projectCompiler = GetLibraryCompilation(myProject);

            var paths = testCompiler.References.Where(r => r is PortableExecutableReference).Select(per => ((PortableExecutableReference)per).FilePath).ToList();

            paths.AddRange(projectCompiler.References.Where(r => r is PortableExecutableReference).Select(per => ((PortableExecutableReference)per).FilePath));
            paths        = paths.Distinct().ToList();
            dependencies = paths.Select(File.ReadAllBytes).ToArray();


            interopsAssembly = new WebClient().DownloadData(interopsLocation);
            var interopsMetadata = AssemblyMetadata.CreateFromImage(interopsAssembly);

            projectCompiler = FixProject(myProject.Documents, projectCompiler, interopsMetadata);
            var instrumentedProjectCompiler = InstrumentProject(projectCompiler, interopsMetadata, myProject.Solution.Workspace);

            var instrumentedAssembly = CompileAssembly(instrumentedProjectCompiler);

            testCompiler = testCompiler.ReplaceReference(testCompiler.References.Single(r => r is CompilationReference && ((CompilationReference)r).Compilation.AssemblyName == projectCompiler.AssemblyName), projectCompiler.ToMetadataReference());
            testAssembly = CompileAssembly(testCompiler);

            CollectCoverage(instrumentedAssembly);
        }