public void Test1() { var cci2 = new CciModuleSource(@"C:\PLIKI\VisualMutator\testprojects\MiscUtil\MiscUtil.UnitTests\bin\Debug\MiscUtil.dll"); var copied21 = cci2.CreateCopier().Copy(cci2.Modules.Single().Module); var copied22 = cci2.CreateCopier().Copy(cci2.Modules.Single().Module); var debug1 = new DebugOperatorCodeVisitor(); var debug2 = new DebugOperatorCodeVisitor(); new DebugCodeTraverser(debug1).Traverse(copied21); new DebugCodeTraverser(debug2).Traverse(copied22); // File.WriteAllText(@"C:\PLIKI\VisualMutator\trace\tree1" + ".txt", debug1.ToStringBasicVisit(), Encoding.ASCII); // File.WriteAllText(@"C:\PLIKI\VisualMutator\trace\tree2" + ".txt", debug2.ToStringBasicVisit(), Encoding.ASCII); // var sb = new StringBuilder(); // foreach (var diff1 in diff) // { // sb.AppendLine(diff1.ToString()); // } // File.WriteAllText(@"C:\PLIKI\VisualMutator\trace\treediff", sb.ToString()); // // foreach (var // trace(@"C:\PLIKI\VisualMutator\testprojects\MiscUtil\MiscUtil.UnitTests\bin\Debug\MiscUtil.dll"); // trace(@"C:\PLIKI\VisualMutator\Projekty do testów\MiscUtil\MiscUtil.UnitTests\bin\Debug\MiscUtil.UnitTests.dll"); // trace(@"C:\Users\Arego\AppData\Local\Microsoft\VisualStudio\11.0\Designer\ShadowCache\xr5pbts3.ul3\itvv4cbi.0l3\VisualMutator.dll"); // trace(@"C:\PLIKI\Programowanie\C#\CREAM\Cream\bin\x86\Debug\TestRunnerNunit.dll"); // trace(@"C:\PLIKI\Programowanie\C#\CREAM\Cream\bin\x86\Debug\MutationTools.dll"); }
private List<MethodIdentifier> FindCoveringTests(CciModuleSource module, ICodePartsMatcher targetsMatcher) { _log.Debug("Scanning " + module.Module.Name + " for selected covering tests. "); var visitor = new CoveringTestsVisitor(targetsMatcher); var traverser = new CodeTraverser { PreorderVisitor = visitor }; traverser.Traverse(module.Decompile(module.Module)); _log.Debug("Finished scanning module"+ module.Module.Name + ". Found " + visitor.FoundTests.Count+ ". Scanned total: " + visitor.ScannedMethods + " methods and "+ visitor.ScannedMethodCalls+" method calls."); _log.Debug("Listing found tests: "); foreach (var methodIdentifier in visitor.FoundTests) { _log.Debug("Test: "+ methodIdentifier); } if (visitor.IsChoiceError) { throw new TestWasSelectedToMutateException(); } return visitor.FoundTests.ToList(); }
public May<TestsLoadContext> LoadTests(string assemblyPath) { _log.Info("MsTest loading tests..."); var cci = new CciModuleSource(assemblyPath); var visitor = new MsTestTestsVisitor(); var traverser = new CodeTraverser { PreorderVisitor = visitor }; traverser.Traverse(cci.Module.Module); var classes = visitor.Classes.Where(c => c.Children.Count != 0).ToList(); if(classes.Count != 0) { _log.Info("Tests loaded ("+ classes.Count + " classes)."); return new May<TestsLoadContext>(new TestsLoadContext(FrameWorkName, classes)); } else { _log.Info("No tests found."); return May.NoValue; } }
public void Test0() { var cci = new CciModuleSource(TestProjects.DsaPath); var cci2 = new CciModuleSource(TestProjects.DsaPath); var type = cci.Modules.Single().Module.GetAllTypes().Single(t => t.Name.Value == "Deque") as NamedTypeDefinition; var method = type.Methods.Single(m => m.Name.Value == "EnqueueFront"); var choices = new MutationSessionChoices { Filter = new MutationFilter( new List <TypeIdentifier>(), new MethodIdentifier(method).InList()), SelectedOperators = new AOR_ArithmeticOperatorReplacement().InList <IMutationOperator>(), }; var exec = new MutationExecutor(null, choices, null); var container = new MutantsContainer(exec, new OriginalCodebase(cci.InList(), new List <string>()), new OptionsModel()); IList <AssemblyNode> assemblies = container.InitMutantsForOperators(ProgressCounter.Inactive()); var mut = assemblies.Cast <CheckedNode>() .SelectManyRecursive(n => n.Children ?? new NotifyingCollection <CheckedNode>()) .OfType <Mutant>().First(); var sourceMethod = type.Methods.Single(m => m.Name.Value == "EnqueueFront"); MutationResult executeMutation = exec.ExecuteMutation(mut, cci2).Result; // var viss = new Viss(cci2.Host, sourceMethod); // IModule newMod = viss.Rewrite(executeMutation.MutatedModules.Modules.Single().Module); cci2.ReplaceWith(executeMutation.MutatedModules.Modules.Single().Module); MutationResult executeMutation2 = exec.ExecuteMutation(mut, cci2).Result; }
public Task <CciModuleSource> GetWhiteSourceAsync(string moduleName) { CciModuleSource cciModuleSource = TryTake(moduleName); if (cciModuleSource != null) { _log.Debug("Whitecache#" + PrintCacheState(_moduleNameToFileName[moduleName]) + "Taken immediately: " + cciModuleSource.Guid); return(Task.FromResult(cciModuleSource)); } else { var client = new WhiteClient(moduleName); if (_error != null) { client.Tcs.SetException(_error); _log.Debug("Whitecache#" + PrintCacheState(_moduleNameToFileName[moduleName]) + "Error occurred."); } else { _clients.Enqueue(client); _log.Debug("Whitecache#" + PrintCacheState(_moduleNameToFileName[moduleName]) + "Enqueued waiting client."); } return(client.Tcs.Task); } }
public May <TestsLoadContext> LoadTests(string assemblyPath) { _log.Info("XUnit loading tests..."); var cci = new CciModuleSource(assemblyPath); var visitor = new XUnitTestsVisitor(); var traverser = new CodeTraverser { PreorderVisitor = visitor }; traverser.Traverse(cci.Module.Module); var classes = visitor.Classes.Where(c => c.Children.Count != 0).ToList(); if (classes.Count != 0) { _log.Info("Tests loaded (" + classes.Count + " classes)."); return(new May <TestsLoadContext>(new TestsLoadContext(FrameWorkName, classes))); } else { _log.Info("No tests found."); return(May.NoValue); } }
private List <MethodIdentifier> FindCoveringTests(CciModuleSource module, ICodePartsMatcher targetsMatcher) { _log.Debug("Scanning " + module.Module.Name + " for selected covering tests. "); var visitor = new CoveringTestsVisitor(targetsMatcher); var traverser = new CodeTraverser { PreorderVisitor = visitor }; traverser.Traverse(module.Decompile(module.Module)); _log.Debug("Finished scanning module" + module.Module.Name + ". Found " + visitor.FoundTests.Count + ". Scanned total: " + visitor.ScannedMethods + " methods and " + visitor.ScannedMethodCalls + " method calls."); _log.Debug("Listing found tests: "); foreach (var methodIdentifier in visitor.FoundTests) { _log.Debug("Test: " + methodIdentifier); } if (visitor.IsChoiceError) { throw new TestWasSelectedToMutateException(); } return(visitor.FoundTests.ToList()); }
public VisualCodeTraverser(MutationFilter filter, VisualCodeVisitor visitor, CciModuleSource module) { _filter = filter; _visitor = visitor; _module = module; PreorderVisitor = visitor; _methodBodies = new Dictionary <IMethodBody, SourceMethodBody>(); }
public VisualCodeTraverser(MutationFilter filter, VisualCodeVisitor visitor, CciModuleSource module) { _filter = filter; _visitor = visitor; _module = module; PreorderVisitor = visitor; _methodBodies = new Dictionary<IMethodBody, SourceMethodBody>(); }
public void ReadWriteTestAutoMapper() { var cci = new CciModuleSource(TestProjects.AutoMapper); using (var file = File.OpenWrite(@"C:\PLIKI\VisualMutator\testprojects\Automapper-Integration-Tests\readwrite\AutoMapper.dll")) { cci.WriteToStream(cci.Module, file, file.Name); } }
public async Task <MutationResult> ExecuteMutation(Mutant mutant, CciModuleSource moduleSource) { var type = new TypeIdentifier((INamedTypeDefinition)mutant.MutationTarget.ProcessingContext.Type.Object); var method = new MethodIdentifier((IMethodDefinition)mutant.MutationTarget.ProcessingContext.Method.Object); var filter = new MutationFilter(type.InList(), method.InList()); _log.Debug("ExecuteMutation of: " + type + " - " + method); IMutationOperator mutationOperator = mutant.MutationTarget.OperatorId == null ? new IdentityOperator() : _mutOperators.Single(m => mutant.MutationTarget.OperatorId == m.Info.Id); var cci = moduleSource; try { _log.Info("Execute mutation of " + mutant.MutationTarget + " contained in " + mutant.MutationTarget.MethodRaw + " modules. "); var mutatedModules = new List <IModuleInfo>(); var module = moduleSource.Modules.Single(); var visitorBack = new VisualCodeVisitorBack(mutant.MutationTarget.InList(), _sharedTargets.GetValues(mutationOperator, returnEmptySet: true), module.Module, mutationOperator.Info.Id); var traverser2 = new VisualCodeTraverser(_filter, visitorBack, moduleSource); traverser2.Traverse(module.Module); visitorBack.PostProcess(); var operatorCodeRewriter = mutationOperator.CreateRewriter(); var rewriter = new VisualCodeRewriter(cci.Host, visitorBack.TargetAstObjects, visitorBack.SharedAstObjects, _filter, operatorCodeRewriter, traverser2); operatorCodeRewriter.MutationTarget = new UserMutationTarget(mutant.MutationTarget.Variant.Signature, mutant.MutationTarget.Variant.AstObjects); operatorCodeRewriter.NameTable = cci.Host.NameTable; operatorCodeRewriter.Host = cci.Host; operatorCodeRewriter.Module = module.Module; operatorCodeRewriter.OperatorUtils = _operatorUtils; operatorCodeRewriter.Initialize(); var rewrittenModule = rewriter.Rewrite(module.Module); rewriter.CheckForUnfoundObjects(); mutant.MutationTarget.Variant.AstObjects = null; //TODO: avoiding leaking memory. refactor mutatedModules.Add(new ModuleInfo(rewrittenModule, "")); var result = new MutationResult(mutant, cci, null, mutant.MutationTarget.MethodMutated); mutant.MutationTarget.MethodMutated = null; //TODO: avoiding leaking memory. refactor return(result); } catch (Exception e) { throw new MutationException("CreateMutants failed on operator: {0}.".Formatted(mutationOperator.Info.Name), e); } }
public void IntegrationTestingMiscUtilLight() { string filePath = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(new Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath), @"..\..\..\..\Tests\SampleTestProjectsForTestDiscoveryAndExecution\SampleLogicNunit3Tests\bin\SampleLogic.dll")); string filePathTests = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(new Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath), @"..\..\..\..\Tests\SampleTestProjectsForTestDiscoveryAndExecution\SampleLogicNunit3Tests\bin\SampleLogicNunit3Tests.dll")); var cci = new CciModuleSource(filePath); var choices = new MutationSessionChoices(); var tt = cci.Module.Module.GetAllTypes(); // var type = (NamedTypeDefinition)cci.Module.Module.GetAllTypes().Single(t => t.Name.Value == "Range"); // var method = new MethodIdentifier(type.Methods.First(m => m.Name.Value == "Contains")); MethodIdentifier method = null; choices.SelectedOperators.Add(new IdentityOperator2()); choices.Filter = method == null?MutationFilter.AllowAll() : new MutationFilter( new List <TypeIdentifier>(), method.InList()); var options = new OptionsModel(); var muexe = new MutationExecutor(options, choices, null); var mucon = new MutantsContainer(muexe, new OriginalCodebase(cci.InList()), new OptionsModel()); var nodes = mucon.InitMutantsForOperators(ProgressCounter.Inactive()); Mutant mutant = nodes.Cast <CheckedNode>() .SelectManyRecursive(n => n.Children ?? new NotifyingCollection <CheckedNode>()) .OfType <Mutant>().First();//.Take(4); var cciWhite = new CciModuleSource(filePath); var resu = muexe.ExecuteMutation(mutant, cciWhite).Result; using (var file = File.OpenWrite(filePath)) { resu.MutatedModules.WriteToStream(resu.MutatedModules.Modules.Single(), file, filePath); } var runContext = new NUnitTestsRunContext( options, _kernel.Get <IProcesses>(), _kernel.Get <CommonServices>(), new NUnitResultsParser(), TestProjects.NUnitConsolePath, filePathTests, new TestsSelector()); var testResult = runContext.RunTests().Result; var count = testResult.ResultMethods .GroupBy(t => t.State) .ToDictionary(t => t.Key); var countStrings = count.Select(pair => pair.Key.ToString() + ": " + pair.Value.Count()); _log.Info(string.Format("All test results: " + string.Join(" ", countStrings))); count[TestNodeState.Failure].Count().ShouldEqual(0); }
public void IntegrationTestingAutoMapper() { var paths = new[] { TestProjects.AutoMapper, TestProjects.AutoMapperNet4, TestProjects.AutoMapperTests }.Select(_ => _.ToFilePathAbs()).ToList(); var cci = new CciModuleSource(TestProjects.AutoMapper); var cci1 = new CciModuleSource(TestProjects.AutoMapperNet4); var cciTests = new CciModuleSource(TestProjects.AutoMapperTests); var original = new OriginalCodebase(new List <CciModuleSource> { cci, cci1, cciTests }); var toMutate = new List <string> { TestProjects.AutoMapper, TestProjects.AutoMapperNet4 }; var oper = new IdentityOperator2().InList <IMutationOperator>(); var mutants = SetupMutations(original, paths, toMutate, oper); var vis = _kernel.Get <ICodeVisualizer>(); var muma = _kernel.Get <MutantMaterializer>(); IObserver <SessionEventArgs> sub = new ReplaySubject <SessionEventArgs>(); foreach (var mutant in mutants) { // var copy = new CciModuleSource(TestProjects.MiscUtil); // MutationResult result = exec.ExecuteMutation(mutant, copy).Result; var muma2 = _kernel.Get <IFactory <TestingMutant> >().CreateWithParams(sub, mutant); var r = muma2.RunAsync().Result; var namespaces = _kernel.Get <TestsContainer>().CreateMutantTestTree(mutant); var meth = namespaces.Cast <CheckedNode>() .SelectManyRecursive(n => n.Children, leafsOnly: true).OfType <TestNodeMethod>(); meth.Count(m => m.State == TestNodeState.Failure).ShouldEqual(0); // var storedMutantInfo = muma.StoreMutant(mutant).Result; // RunTestsForMutant(_choices.MutantsTestingOptions, _storedMutantInfo); // CodeWithDifference differenceListing = vis.CreateDifferenceListing(CodeLanguage.CSharp, mutant, result).Result; // differenceListing.LineChanges.Count.ShouldEqual(2); } }
public void IntegrationTestingMiscUtil() { var paths = new[] { TestProjects.MiscUtil, TestProjects.MiscUtilTests }.Select(_ => _.ToFilePathAbs()).ToList(); var cci = new CciModuleSource(TestProjects.MiscUtil); var cciTests = new CciModuleSource(TestProjects.MiscUtilTests); var toMutate = TestProjects.MiscUtil.InList(); var original = new OriginalCodebase(new List <CciModuleSource> { cci, cciTests }); var type = (NamedTypeDefinition)cci.Module.Module.GetAllTypes().Single(t => t.Name.Value == "Range"); var method = type.Methods.First(m => m.Name.Value == "Contains"); var oper = new ROR_RelationalOperatorReplacement().InList <IMutationOperator>(); var mutants = SetupMutations(original, paths, toMutate, oper, new MethodIdentifier(method)); var vis = _kernel.Get <ICodeVisualizer>(); var muma = _kernel.Get <MutantMaterializer>(); IObserver <SessionEventArgs> sub = new ReplaySubject <SessionEventArgs>(); foreach (var mutant in mutants) { // var copy = new CciModuleSource(TestProjects.MiscUtil); // MutationResult result = exec.ExecuteMutation(mutant, copy).Result; var muma2 = _kernel.Get <IFactory <TestingMutant> >().CreateWithParams(sub, mutant); var r = muma2.RunAsync().Result; var namespaces = _kernel.Get <TestsContainer>().CreateMutantTestTree(mutant); var meth = namespaces.Cast <CheckedNode>() .SelectManyRecursive(n => n.Children, leafsOnly: true).OfType <TestNodeMethod>(); // vis.CreateDifferenceListing() meth.Count(m => m.State == TestNodeState.Failure).ShouldBeGreaterThan(0); // var storedMutantInfo = muma.StoreMutant(mutant).Result; // RunTestsForMutant(_choices.MutantsTestingOptions, _storedMutantInfo); // CodeWithDifference differenceListing = vis.CreateDifferenceListing(CodeLanguage.CSharp, mutant, result).Result; // differenceListing.LineChanges.Count.ShouldEqual(2); } }
public void Whole() { string ConsolePath = @"C:\USERS\AREGO\APPDATA\LOCAL\MICROSOFT\VISUALSTUDIO\12.0EXP\EXTENSIONS\PIOTRTRZPIL\VISUALMUTATOR\2.0.8\xunitconsole\xunit.console.exe"; string BasePath = @"C:\PLIKI\VisualMutator\testprojects\Automapper-Integration-Tests\"; string unitestspath = BasePath + @"AutoMapper.dll"; string unitestsdestination = BasePath + @"Debug\AutoMapper.dll"; string unitestsdestinationPdb = BasePath + @"Debug\AutoMapper.pdb"; string unitests = BasePath + @"Debug\AutoMapper.UnitTests.Net4.dll"; var cci = new CciModuleSource(unitestspath); // var rewr = new XRewriter(cci.Host); // rewr.Rewrite(cci.Module.Module); File.Delete(unitestsdestination); File.Delete(unitestsdestinationPdb); using (var file = File.OpenWrite(unitestsdestination)) { cci.WriteToStream(cci.Module, file, unitestsdestination); } _log.Info("Running: " + ConsolePath.InQuotes() + " " + (unitests).InQuotes()); var procResult = new Processes().RunHiddenAsync(ConsolePath, unitests); _log.Debug(procResult.Result.StandardOutput.Concat(procResult.Result.StandardError).Aggregate((a,b)=>a+"\n"+b)); // // var cci2 = new CciModuleSource(unitestspath); // var rewr = new XRewriter(cci2.Host); // // rewr.Rewrite(cci2.Module.Module); // // File.Delete(unitestsdestination); // File.Delete(unitestsdestinationPdb); // using (var file = File.OpenWrite(unitestsdestination)) // { // cci2.WriteToStream(cci2.Module, file, unitestsdestination); // } // // // _log.Info("Running: " + ConsolePath.InQuotes() + " " + arg); // // var procResult2 = new Processes().RunHiddenAsync(ConsolePath, unitestsdestination); // _log.Debug(procResult2.Result.StandardOutput.Concat(procResult2.Result.StandardError).Aggregate((a, b) => a + "\n" + b)); }
public void IntegrationTestingMiscUtilLight() { var cci = new CciModuleSource(TestProjects.MiscUtil); var choices = new MutationSessionChoices(); var tt = cci.Module.Module.GetAllTypes(); // var type = (NamedTypeDefinition)cci.Module.Module.GetAllTypes().Single(t => t.Name.Value == "Range"); // var method = new MethodIdentifier(type.Methods.First(m => m.Name.Value == "Contains")); MethodIdentifier method = null; choices.SelectedOperators.Add(new IdentityOperator2()); choices.Filter = method == null ? MutationFilter.AllowAll() : new MutationFilter( new List<TypeIdentifier>(), method.InList()); var options = new OptionsModel(); var muexe = new MutationExecutor(options, choices, null); var mucon = new MutantsContainer(muexe, new OriginalCodebase(cci.InList())); var nodes = mucon.InitMutantsForOperators(ProgressCounter.Inactive()); Mutant mutant = nodes.Cast<CheckedNode>() .SelectManyRecursive(n => n.Children ?? new NotifyingCollection<CheckedNode>()) .OfType<Mutant>().First();//.Take(4); var cciWhite = new CciModuleSource(TestProjects.MiscUtil); var resu = muexe.ExecuteMutation(mutant, cciWhite).Result; string filePath = @"C:\PLIKI\VisualMutator\testprojects\MiscUtil-Integration-Tests\TestGround\MiscUtil.dll"; string filePathTests = @"C:\PLIKI\VisualMutator\testprojects\MiscUtil-Integration-Tests\TestGround\MiscUtil.UnitTests.dll"; using (var file = File.OpenWrite(filePath)) { resu.MutatedModules.WriteToStream(resu.MutatedModules.Modules.Single(), file, filePath); } var runContext = new NUnitTestsRunContext( options, _kernel.Get<IProcesses>(), _kernel.Get<CommonServices>(), new NUnitResultsParser(), TestProjects.NUnitConsolePath, filePathTests, new TestsSelector()); var testResult = runContext.RunTests().Result; var count = testResult.ResultMethods .GroupBy(t => t.State) .ToDictionary(t => t.Key); var countStrings = count.Select(pair => pair.Key.ToString() + ": " + pair.Value.Count()); _log.Info(string.Format("All test results: " + string.Join(" ", countStrings))); count[TestNodeState.Failure].Count().ShouldEqual(0); }
public void Whole() { string ConsolePath = @"C:\USERS\AREGO\APPDATA\LOCAL\MICROSOFT\VISUALSTUDIO\12.0EXP\EXTENSIONS\PIOTRTRZPIL\VISUALMUTATOR\2.0.8\xunitconsole\xunit.console.exe"; string BasePath = @"C:\PLIKI\VisualMutator\testprojects\Automapper-Integration-Tests\"; string unitestspath = BasePath + @"AutoMapper.dll"; string unitestsdestination = BasePath + @"Debug\AutoMapper.dll"; string unitestsdestinationPdb = BasePath + @"Debug\AutoMapper.pdb"; string unitests = BasePath + @"Debug\AutoMapper.UnitTests.Net4.dll"; var cci = new CciModuleSource(unitestspath); // var rewr = new XRewriter(cci.Host); // rewr.Rewrite(cci.Module.Module); File.Delete(unitestsdestination); File.Delete(unitestsdestinationPdb); using (var file = File.OpenWrite(unitestsdestination)) { cci.WriteToStream(cci.Module, file, unitestsdestination); } _log.Info("Running: " + ConsolePath.InQuotes() + " " + (unitests).InQuotes()); var procResult = new Processes().RunHiddenAsync(ConsolePath, unitests); _log.Debug(procResult.Result.StandardOutput.Concat(procResult.Result.StandardError).Aggregate((a, b) => a + "\n" + b)); // // var cci2 = new CciModuleSource(unitestspath); // var rewr = new XRewriter(cci2.Host); // // rewr.Rewrite(cci2.Module.Module); // // File.Delete(unitestsdestination); // File.Delete(unitestsdestinationPdb); // using (var file = File.OpenWrite(unitestsdestination)) // { // cci2.WriteToStream(cci2.Module, file, unitestsdestination); // } // // // _log.Info("Running: " + ConsolePath.InQuotes() + " " + arg); // // var procResult2 = new Processes().RunHiddenAsync(ConsolePath, unitestsdestination); // _log.Debug(procResult2.Result.StandardOutput.Concat(procResult2.Result.StandardError).Aggregate((a, b) => a + "\n" + b)); }
private void TryAdd(ProjectFilesClone item1) { foreach (var whiteCach in _whiteCaches) { if (whiteCach.Value.Count < _maxCount) { var guid = Guid.NewGuid(); _log.Debug("Whitecache#" + PrintCacheState(whiteCach.Key) + "Add started."); var filePath = item1.Assemblies.Single(_ => _.FileName == whiteCach.Key); var cci = new CciModuleSource(filePath.Path); cci.Guid = guid; whiteCach.Value.Add(cci); _log.Debug("Whitecache#" + PrintCacheState(whiteCach.Key) + "Add finished: " + guid); } } }
private void NotifyClients() { WhiteClient client; if (_clients.TryDequeue(out client)) { CciModuleSource cciModuleSource = TryTake(client.Key); if (cciModuleSource != null) { _log.Debug("Whitecache#" + PrintCacheState(_moduleNameToFileName[client.Key]) + "Source taken later: " + cciModuleSource.Guid); client.Tcs.TrySetResult(cciModuleSource); } else { _clients.Enqueue(client); } } }
public MultiDictionary <IMutationOperator, MutationTarget> FindTargets(CciModuleSource module, ProgressCounter subProgress) { _log.Info("Finding targets for module: " + module.Module.Name); _log.Info("Using mutation operators: " + _mutOperators.Select(_ => _.Info.Id) .MayAggregate((a, b) => a + "," + b).Else("None")); var mergedTargets = new MultiDictionary <IMutationOperator, MutationTarget>(); _sharedTargets = new MultiDictionary <IMutationOperator, MutationTarget>(); subProgress.Initialize(_mutOperators.Count); foreach (var mutationOperator in _mutOperators) { try { subProgress.Progress(); var ded = mutationOperator.CreateVisitor(); IOperatorCodeVisitor operatorVisitor = ded; operatorVisitor.Host = module.Host; operatorVisitor.OperatorUtils = _operatorUtils; operatorVisitor.Initialize(); var visitor = new VisualCodeVisitor(mutationOperator.Info.Id, operatorVisitor, module.Module.Module); var traverser = new VisualCodeTraverser(_filter, visitor, module); traverser.Traverse(module.Module.Module); visitor.PostProcess(); IEnumerable <MutationTarget> mutations = LimitMutationTargets(visitor.MutationTargets); mergedTargets.Add(mutationOperator, new HashSet <MutationTarget>(mutations)); _sharedTargets.Add(mutationOperator, new HashSet <MutationTarget>(visitor.SharedTargets)); } catch (Exception e) { _svc.Logging.ShowError("Finding targets operation failed in operator: {0}. Exception: {1}".Formatted(mutationOperator.Info.Name, e.ToString())); //throw new MutationException("Finding targets operation failed in operator: {0}.".Formatted(mutationOperator.Info.Name), e); } } return(mergedTargets); }
public MultiDictionary<IMutationOperator, MutationTarget> FindTargets(CciModuleSource module, ProgressCounter subProgress) { _log.Info("Finding targets for module: " + module.Module.Name); _log.Info("Using mutation operators: " + _mutOperators.Select(_ => _.Info.Id) .MayAggregate((a, b) => a + "," + b).Else("None")); var mergedTargets = new MultiDictionary<IMutationOperator, MutationTarget>(); _sharedTargets = new MultiDictionary<IMutationOperator, MutationTarget>(); subProgress.Initialize(_mutOperators.Count); foreach (var mutationOperator in _mutOperators) { try { subProgress.Progress(); var ded = mutationOperator.CreateVisitor(); IOperatorCodeVisitor operatorVisitor = ded; operatorVisitor.Host = module.Host; operatorVisitor.OperatorUtils = _operatorUtils; operatorVisitor.Initialize(); var visitor = new VisualCodeVisitor(mutationOperator.Info.Id, operatorVisitor, module.Module.Module); var traverser = new VisualCodeTraverser(_filter, visitor, module); traverser.Traverse(module.Module.Module); visitor.PostProcess(); IEnumerable<MutationTarget> mutations = LimitMutationTargets(visitor.MutationTargets); mergedTargets.Add(mutationOperator, new HashSet<MutationTarget>(mutations)); _sharedTargets.Add(mutationOperator, new HashSet<MutationTarget>(visitor.SharedTargets)); } catch (Exception e) { _svc.Logging.ShowError("Finding targets operation failed in operator: {0}. Exception: {1}".Formatted(mutationOperator.Info.Name, e.ToString())); //throw new MutationException("Finding targets operation failed in operator: {0}.".Formatted(mutationOperator.Info.Name), e); } } return mergedTargets; }
private void InitializeModuleNames() { ProjectFilesClone projectFilesClone = _paths.Take(); foreach (var path in projectFilesClone.Assemblies) { var cci = new CciModuleSource(path.Path); _moduleNameToFileName.Add(cci.Modules.Single().Name, path.FileName); _fileNameToModuleName.Add(path.FileName, cci.Modules.Single().Name); var queue = new BlockingCollection <CciModuleSource>(20) { cci }; _whiteCaches.TryAdd(path.FileName, queue); _log.Debug("Whitecache#" + PrintCacheState(path.FileName) + "Initializing module name."); } _paths.Add(projectFilesClone); _initialized = true; NotifyClients(); }
public void IntegrationTestMutation() { var cci = new CciModuleSource(TestProjects.MiscUtil); var original = new OriginalCodebase(cci.InList()); var type = cci.Modules.Single().Module.GetAllTypes().Single(t => t.Name.Value == "Adler32") as NamedTypeDefinition; var method = type.Methods.First(m => m.Name.Value == "ComputeChecksum"); var choices = new MutationSessionChoices { Filter = new MutationFilter( new List <TypeIdentifier>(), new MethodIdentifier(method).InList()), SelectedOperators = new LOR_LogicalOperatorReplacement().InList <IMutationOperator>(), }; var exec = new MutationExecutor(new OptionsModel(), choices, null); var container = new MutantsContainer(exec, original, new OptionsModel()); IList <AssemblyNode> assemblies = container.InitMutantsForOperators(ProgressCounter.Inactive()); var mutants = assemblies.Cast <CheckedNode>() .SelectManyRecursive(n => n.Children ?? new NotifyingCollection <CheckedNode>()) .OfType <Mutant>(); var diff = new CodeDifferenceCreator(); var vis = new CodeVisualizer(original, diff); foreach (var mutant in mutants) { var copy = new CciModuleSource(TestProjects.MiscUtil); MutationResult result = exec.ExecuteMutation(mutant, copy).Result; CodeWithDifference differenceListing = vis.CreateDifferenceListing(CodeLanguage.CSharp, mutant, result).Result; differenceListing.LineChanges.Count.ShouldEqual(2); } }
private void TryAdd(ProjectFilesClone item1) { foreach (var whiteCach in _whiteCaches) { if (whiteCach.Value.Count < _maxCount) { var guid = Guid.NewGuid(); _log.Debug("Whitecache#"+ PrintCacheState(whiteCach.Key) + "Add started."); var filePath = item1.Assemblies.Single(_ => _.FileName == whiteCach.Key); var cci = new CciModuleSource(filePath.Path); cci.Guid = guid; whiteCach.Value.Add(cci); _log.Debug("Whitecache#" + PrintCacheState(whiteCach.Key) + "Add finished: " + guid); } } }
private void InitializeModuleNames() { ProjectFilesClone projectFilesClone = _paths.Take(); foreach (var path in projectFilesClone.Assemblies) { var cci = new CciModuleSource(path.Path); _moduleNameToFileName.Add(cci.Modules.Single().Name, path.FileName); _fileNameToModuleName.Add(path.FileName, cci.Modules.Single().Name); var queue = new BlockingCollection<CciModuleSource>(20) {cci}; _whiteCaches.TryAdd(path.FileName, queue); _log.Debug("Whitecache#" + PrintCacheState(path.FileName) + "Initializing module name."); } _paths.Add(projectFilesClone); _initialized = true; NotifyClients(); }
public void ReadWriteTestAutoMapper() { var cci = new CciModuleSource(TestProjects.AutoMapper); using (var file = File.OpenWrite(@"C:\PLIKI\VisualMutator\testprojects\Automapper-Integration-Tests\readwrite\AutoMapper.dll")) { cci.WriteToStream(cci.Module, file, file.Name); } }
public async Task<MutationResult> ExecuteMutation(Mutant mutant, CciModuleSource moduleSource, CciModuleSource moduleSource2) { /*var type = new TypeIdentifier((INamedTypeDefinition) mutant.MutationTarget.ProcessingContext.Type.Object); var type2 = new TypeIdentifier((INamedTypeDefinition)mutant.MutationTarget2.ProcessingContext.Type.Object);// var method = new MethodIdentifier((IMethodDefinition) mutant.MutationTarget.ProcessingContext.Method.Object); var method2 = new MethodIdentifier((IMethodDefinition)mutant._mutationTarget2.ProcessingContext.Method.Object); // var filter = new MutationFilter(type.InList(), method.InList()); var filter2 = new MutationFilter(type2.InList(), method2.InList());// */ //_log.Debug("ExecuteMutation of: " + type+" - " +method ); //_log.Debug("ExecuteMutation of: " + type + " - " + method + " + " + method2); IMutationOperator mutationOperator = mutant.MutationTarget.OperatorId == null ? new IdentityOperator() : _mutOperators.Single(m => mutant.MutationTarget.OperatorId == m.Info.Id); IMutationOperator mutationOperator2 = mutant._mutationTargets[0].OperatorId == null ? new IdentityOperator() : _mutOperators.Single(m => mutant._mutationTargets[0].OperatorId == m.Info.Id); var cci = moduleSource; try { //_log.Info("Execute mutation of " + mutant.MutationTarget + " contained in " + mutant.MutationTarget.MethodRaw + " modules. "); _log.Info("Execute mutation of " + mutant.MutationTarget + " contained in " + mutant.MutationTarget.MethodRaw + " modules and " + mutant._mutationTargets[0] + " contained in " + mutant._mutationTargets[0].MethodRaw + " modules."); var mutatedModules = new List<IModuleInfo>(); var module = moduleSource.Modules.Single(); List<MutationTarget> mutationTargets = new List<MutationTarget>(); mutationTargets.Add(mutant.MutationTarget); mutationTargets.Add(mutant._mutationTargets[0]); List<MutationTarget> sharedtargets = new List<MutationTarget>(); foreach (var element in _sharedTargets.GetValues(mutationOperator, returnEmptySet: true)) { sharedtargets.Add(element); } foreach (var element in _sharedTargets.GetValues(mutationOperator2, returnEmptySet: true)) { sharedtargets.Add(element); } var visitorBack = new VisualCodeVisitorBack(mutationTargets, sharedtargets, module.Module, mutationOperator.Info.Id+mutationOperator2.Info.Id); var traverser2 = new VisualCodeTraverser(_filter, visitorBack, moduleSource); traverser2.Traverse(module.Module); visitorBack.PostProcess(); var operatorCodeRewriter = mutationOperator.CreateRewriter(); var rewriter = new VisualCodeRewriter(cci.Host, visitorBack.TargetAstObjects, visitorBack.SharedAstObjects, _filter, operatorCodeRewriter, traverser2); operatorCodeRewriter.MutationTarget = new UserMutationTarget(mutant.MutationTarget.Variant.Signature, mutant.MutationTarget.Variant.AstObjects); operatorCodeRewriter.NameTable = cci.Host.NameTable; operatorCodeRewriter.Host = cci.Host; operatorCodeRewriter.Module = module.Module; operatorCodeRewriter.OperatorUtils = _operatorUtils; operatorCodeRewriter.Initialize(); /*var operatorCodeRewriter2 = mutationOperator2.CreateRewriter();// var rewriter2 = new VisualCodeRewriter(cci.Host, visitorBack.TargetAstObjects, visitorBack.SharedAstObjects, _filter, operatorCodeRewriter2, traverser2);// operatorCodeRewriter2.MutationTarget = new UserMutationTarget(mutant._mutationTarget2.Variant.Signature, mutant.MutationTarget2.Variant.AstObjects);// operatorCodeRewriter2.NameTable = cci.Host.NameTable; operatorCodeRewriter2.Host = cci.Host; operatorCodeRewriter2.Module = module.Module; operatorCodeRewriter2.OperatorUtils = _operatorUtils; operatorCodeRewriter2.Initialize(); */ var rewrittenModule = rewriter.Rewrite(module.Module); //var rewrittenModule2 = rewriter2.Rewrite(module.Module);// rewriter.CheckForUnfoundObjects(); //rewriter2.CheckForUnfoundObjects();// //2nd mutation /*IMutationOperator mutationOperator2 = mutant._mutationTarget2.OperatorId == null ? new IdentityOperator() : _mutOperators.Single(m => mutant._mutationTarget2.OperatorId == m.Info.Id); // var cci2 = moduleSource2; var module2 = moduleSource2.Modules.Single();// var visitorBack2 = new VisualCodeVisitorBack(mutant.MutationTarget2.InList(), _sharedTargets.GetValues(mutationOperator2, returnEmptySet: true), module2.Module, mutationOperator2.Info.Id); // var traverser22 = new VisualCodeTraverser(_filter, visitorBack2, moduleSource2);// traverser22.Traverse(module2.Module);// visitorBack2.PostProcess();// var operatorCodeRewriter2 = mutationOperator2.CreateRewriter();// var rewriter2 = new VisualCodeRewriter(cci2.Host, visitorBack2.TargetAstObjects, visitorBack2.SharedAstObjects, _filter, operatorCodeRewriter2, traverser22);// operatorCodeRewriter2.MutationTarget = new UserMutationTarget(mutant._mutationTarget2.Variant.Signature, mutant.MutationTarget2.Variant.AstObjects);// operatorCodeRewriter2.NameTable = cci2.Host.NameTable; operatorCodeRewriter2.Host = cci2.Host; operatorCodeRewriter2.Module = module2.Module; operatorCodeRewriter2.OperatorUtils = _operatorUtils; operatorCodeRewriter2.Initialize(); var rewrittenModule2 = rewriter2.Rewrite(module2.Module);// rewriter2.CheckForUnfoundObjects();// */ mutant.MutationTarget.Variant.AstObjects = null; //TODO: avoiding leaking memory. refactor mutant._mutationTargets[0].Variant.AstObjects = null; //TODO: avoiding leaking memory. refactor mutatedModules.Add(new ModuleInfo(rewrittenModule, "")); //mutatedModules.Add(new ModuleInfo(rewrittenModule2, ""));// //List<ICciModuleSource> cci = new List<ICciModuleSource>(); //cci.Add(cci1); //cci.Add(cci2); List<IMethodDefinition> methodsMutated = new List<IMethodDefinition>(); methodsMutated.Add(mutant._mutationTargets[0].MethodMutated); var result = new MutationResult(mutant, cci, null, mutant.MutationTarget.MethodMutated, methodsMutated); mutant.MutationTarget.MethodMutated = null; //TODO: avoiding leaking memory. refactor mutant._mutationTargets[0].MethodMutated = null; //TODO: avoiding leaking memory. refactor return result; } catch (Exception e) { throw new MutationException("CreateMutants failed on operator: {0}.".Formatted(mutationOperator.Info.Name), e); } }
public void Test1() { var cci2 = new CciModuleSource(@"C:\PLIKI\VisualMutator\testprojects\MiscUtil\MiscUtil.UnitTests\bin\Debug\MiscUtil.dll"); var copied21 = cci2.CreateCopier().Copy(cci2.Modules.Single().Module); var copied22 = cci2.CreateCopier().Copy(cci2.Modules.Single().Module); var debug1 = new DebugOperatorCodeVisitor(); var debug2 = new DebugOperatorCodeVisitor(); new DebugCodeTraverser(debug1).Traverse(copied21); new DebugCodeTraverser(debug2).Traverse(copied22); // File.WriteAllText(@"C:\PLIKI\VisualMutator\trace\tree1" + ".txt", debug1.ToStringBasicVisit(), Encoding.ASCII); // File.WriteAllText(@"C:\PLIKI\VisualMutator\trace\tree2" + ".txt", debug2.ToStringBasicVisit(), Encoding.ASCII); // var sb = new StringBuilder(); // foreach (var diff1 in diff) // { // sb.AppendLine(diff1.ToString()); // } // File.WriteAllText(@"C:\PLIKI\VisualMutator\trace\treediff", sb.ToString()); // // foreach (var // trace(@"C:\PLIKI\VisualMutator\testprojects\MiscUtil\MiscUtil.UnitTests\bin\Debug\MiscUtil.dll"); // trace(@"C:\PLIKI\VisualMutator\Projekty do testów\MiscUtil\MiscUtil.UnitTests\bin\Debug\MiscUtil.UnitTests.dll"); // trace(@"C:\Users\Arego\AppData\Local\Microsoft\VisualStudio\11.0\Designer\ShadowCache\xr5pbts3.ul3\itvv4cbi.0l3\VisualMutator.dll"); // trace(@"C:\PLIKI\Programowanie\C#\CREAM\Cream\bin\x86\Debug\TestRunnerNunit.dll"); // trace(@"C:\PLIKI\Programowanie\C#\CREAM\Cream\bin\x86\Debug\MutationTools.dll"); }
private bool IsTestAssembly(CciModuleSource cci) { return _testAssemblies.Select(Path.GetFileNameWithoutExtension).Contains(cci.Module.Name); }
public void trace(string file) { var cci = new CciModuleSource(file); // ModuleInfo mod = (ModuleInfo) cci.Modules.Single(); // var copied = cci.CreateCopier().Copy(cci.Modules.Single().Module); // var copied2 = cci.CreateCopier().Copy(cci.Modules.Single().Module); var copied3 = cci.CreateCopier().Copy(cci.Modules.Single().Module); var white = cci.CloneWith(copied3); var type = white.Modules.Single().Module.GetAllTypes().Single(t => t.Name.Value == "Deque") as NamedTypeDefinition; var method = type.Methods.Single(m => m.Name.Value == "EnqueueFront"); var choices = new MutationSessionChoices { Filter = new MutationFilter( new List <TypeIdentifier>(), new MethodIdentifier(method).InList()), SelectedOperators = new AOR_ArithmeticOperatorReplacement().InList <IMutationOperator>(), }; var exec = new MutationExecutor(null, choices, null); var container = new MutantsContainer(exec, new OriginalCodebase(cci.InList(), new List <string>()), new OptionsModel()); IList <AssemblyNode> assemblies = container.InitMutantsForOperators(ProgressCounter.Inactive()); var mutants = assemblies.Cast <CheckedNode>() .SelectManyRecursive(n => n.Children ?? new NotifyingCollection <CheckedNode>()) .OfType <Mutant>().ToList(); string name = Path.GetFileNameWithoutExtension(file); var debug = new DebugOperatorCodeVisitor(); new DebugCodeTraverser(debug).Traverse(copied3);//.Modules.Single().Module); File.WriteAllText(@"C:\PLIKI\VisualMutator\trace\" + name + "1.txt", debug.ToString(), Encoding.ASCII); var cci2 = new CciModuleSource(file); // ModuleInfo mod = (ModuleInfo) cci.Modules.Single(); var copied21 = cci2.CreateCopier().Copy(cci2.Modules.Single().Module); var copied22 = cci2.CreateCopier().Copy(cci2.Modules.Single().Module); var debug1 = new DebugOperatorCodeVisitor(); var debug2 = new DebugOperatorCodeVisitor(); new DebugCodeTraverser(debug1).Traverse(copied21); new DebugCodeTraverser(debug2).Traverse(copied22); File.WriteAllText(@"C:\PLIKI\VisualMutator\trace\tree1" + ".txt", debug1.ToString(), Encoding.ASCII); File.WriteAllText(@"C:\PLIKI\VisualMutator\trace\tree2" + ".txt", debug2.ToString(), Encoding.ASCII); // // foreach (var mutant in mutants) // { // var copied23 = cci2.CreateCopier().Copy(cci.Modules.Single().Module); // var mutCci = cci2.CloneWith(copied23); // // // debug2.ToString().ShouldEqual(debug.ToString()); // // // // MutationResult executeMutation = exec.ExecuteMutation(mutant, mutCci).Result; // // } // var copier2 = new CodeDeepCopier(new DefaultWindowsRuntimeHost()); // var copied2 = copier2.Copy(cci.Modules.Single().Module); // // var a1 = new Assembly(); // var copier3 = new CodeDeepCopier(new PeReader.DefaultHost(), a1); // var copied3 = copier3.Copy(cci.Modules.Single().Module); // // var a2 = new Assembly(); // var copier4 = new CodeDeepCopier(new PeReader.DefaultHost(), a2); // var copied4 = copier4.Copy(cci.Modules.Single().Module); //var copier5 = new CodeDeepCopier(cci.Host); //var copied5 = copier5.Copy(cci.Modules.Single().Module); // var copied1 = cci.Copy(); // var copied2 = cci.Copy(); // var copied3 = cci.Copy(); // var copied4 = cci.Copy(); }
public void IntegrationTestingMiscUtil() { var paths = new[] { TestProjects.MiscUtil, TestProjects.MiscUtilTests}.Select(_ => _.ToFilePathAbs()).ToList(); var cci = new CciModuleSource(TestProjects.MiscUtil); var cciTests = new CciModuleSource(TestProjects.MiscUtilTests); var toMutate = TestProjects.MiscUtil.InList(); var original = new OriginalCodebase(new List<CciModuleSource> {cci, cciTests}); var type = (NamedTypeDefinition)cci.Module.Module.GetAllTypes().Single(t => t.Name.Value == "Range"); var method = type.Methods.First(m => m.Name.Value == "Contains"); var oper = new ROR_RelationalOperatorReplacement().InList<IMutationOperator>(); var mutants = SetupMutations(original, paths, toMutate, oper, new MethodIdentifier(method)); var vis = _kernel.Get<ICodeVisualizer>(); var muma = _kernel.Get<MutantMaterializer>(); IObserver<SessionEventArgs> sub = new ReplaySubject<SessionEventArgs>(); foreach (var mutant in mutants) { // var copy = new CciModuleSource(TestProjects.MiscUtil); // MutationResult result = exec.ExecuteMutation(mutant, copy).Result; var muma2 = _kernel.Get<IFactory<TestingMutant>>().CreateWithParams(sub, mutant); var r = muma2.RunAsync().Result; var namespaces = _kernel.Get<TestsContainer>().CreateMutantTestTree(mutant); var meth = namespaces.Cast<CheckedNode>() .SelectManyRecursive(n => n.Children, leafsOnly: true).OfType<TestNodeMethod>(); // vis.CreateDifferenceListing() meth.Count(m => m.State == TestNodeState.Failure).ShouldBeGreaterThan(0); // var storedMutantInfo = muma.StoreMutant(mutant).Result; // RunTestsForMutant(_choices.MutantsTestingOptions, _storedMutantInfo); // CodeWithDifference differenceListing = vis.CreateDifferenceListing(CodeLanguage.CSharp, mutant, result).Result; // differenceListing.LineChanges.Count.ShouldEqual(2); } }
public void IntegrationTestingAutoMapper() { var paths = new[] { TestProjects.AutoMapper, TestProjects.AutoMapperNet4, TestProjects.AutoMapperTests }.Select(_ => _.ToFilePathAbs()).ToList(); var cci = new CciModuleSource(TestProjects.AutoMapper); var cci1 = new CciModuleSource(TestProjects.AutoMapperNet4); var cciTests = new CciModuleSource(TestProjects.AutoMapperTests); var original = new OriginalCodebase(new List<CciModuleSource> {cci, cci1, cciTests}); var toMutate = new List<string>{ TestProjects.AutoMapper, TestProjects.AutoMapperNet4}; var oper = new IdentityOperator2().InList<IMutationOperator>(); var mutants = SetupMutations(original, paths, toMutate, oper); var vis = _kernel.Get<ICodeVisualizer>(); var muma = _kernel.Get<MutantMaterializer>(); IObserver<SessionEventArgs> sub = new ReplaySubject<SessionEventArgs>(); foreach (var mutant in mutants) { // var copy = new CciModuleSource(TestProjects.MiscUtil); // MutationResult result = exec.ExecuteMutation(mutant, copy).Result; var muma2 = _kernel.Get<IFactory<TestingMutant>>().CreateWithParams(sub, mutant); var r = muma2.RunAsync().Result; var namespaces = _kernel.Get<TestsContainer>().CreateMutantTestTree(mutant); var meth = namespaces.Cast<CheckedNode>() .SelectManyRecursive(n => n.Children, leafsOnly: true).OfType<TestNodeMethod>(); meth.Count(m => m.State == TestNodeState.Failure).ShouldEqual(0); // var storedMutantInfo = muma.StoreMutant(mutant).Result; // RunTestsForMutant(_choices.MutantsTestingOptions, _storedMutantInfo); // CodeWithDifference differenceListing = vis.CreateDifferenceListing(CodeLanguage.CSharp, mutant, result).Result; // differenceListing.LineChanges.Count.ShouldEqual(2); } }
public void Test0() { var cci = new CciModuleSource(TestProjects.DsaPath); var cci2 = new CciModuleSource(TestProjects.DsaPath); var type = cci.Modules.Single().Module.GetAllTypes().Single(t => t.Name.Value == "Deque") as NamedTypeDefinition; var method = type.Methods.Single(m => m.Name.Value == "EnqueueFront"); var choices = new MutationSessionChoices { Filter = new MutationFilter( new List<TypeIdentifier>(), new MethodIdentifier(method).InList()), SelectedOperators = new AOR_ArithmeticOperatorReplacement().InList<IMutationOperator>(), }; var exec = new MutationExecutor(null, choices, null); var container = new MutantsContainer(exec, new OriginalCodebase(cci.InList(), new List<string>())); IList<AssemblyNode> assemblies = container.InitMutantsForOperators(ProgressCounter.Inactive()); var mut = assemblies.Cast<CheckedNode>() .SelectManyRecursive(n => n.Children?? new NotifyingCollection<CheckedNode>()) .OfType<Mutant>().First(); var sourceMethod = type.Methods.Single(m => m.Name.Value == "EnqueueFront"); MutationResult executeMutation = exec.ExecuteMutation(mut, cci2).Result; // var viss = new Viss(cci2.Host, sourceMethod); // IModule newMod = viss.Rewrite(executeMutation.MutatedModules.Modules.Single().Module); cci2.ReplaceWith(executeMutation.MutatedModules.Modules.Single().Module); MutationResult executeMutation2 = exec.ExecuteMutation(mut, cci2).Result; }
public void ReturnToCache(string name, CciModuleSource whiteModules) { }
public async Task Initialize() { _error = null; _paths = new BlockingCollection <ProjectFilesClone>(); ProjectFilesClone[] projectFilesClones = await Task.WhenAll( Enumerable.Range(0, _threadsCount) .Select(i => _fileManager.CreateCloneAsync("WhiteCache-" + i))); _filesPool = projectFilesClones.ToList(); foreach (var projectFilesClone in _filesPool) { _paths.Add(projectFilesClone); } ProjectFilesClone filesClone = _paths.Take(); _mainModules = Task.Run(() => { _referenceStrings = new List <string>(); var task = filesClone.Assemblies.Select(a => { var cci = new CciModuleSource(a.Path); cci.Guid = Guid.NewGuid(); _log.Debug("Whitecache#" + a.FileName + ": Created initial source: " + cci.Guid); return(cci); }).ToList(); _paths.Add(filesClone); return(task); }); new Thread(() => { try { InitializeModuleNames(); foreach (ProjectFilesClone item in _paths.GetConsumingEnumerable()) { lock (this) { while (_whiteCaches.All(_ => _.Value.Count >= _maxCount) && !_paths.IsAddingCompleted) { Monitor.Wait(this); } } if (_paths.IsAddingCompleted) { return; } ProjectFilesClone item1 = item; Task.Run(() => TryAdd(item1)) .ContinueWith(task => { _paths.TryAdd(item1); NotifyClients(); }).LogErrors(); } } catch (Exception e) { _log.Error("Read assembly failed. ", e); _error = e; _paths.CompleteAdding(); } }).Start(); }
public void ReturnToCache(string moduleName, CciModuleSource source) { var whiteCach = _whiteCaches[_moduleNameToFileName[moduleName]]; whiteCach.Add(source); }
public void Test00() { const string code = @"using System; namespace Ns { public class Test { public int Method1(int a, int b) { return a + b; } } }"; var cci = new CciModuleSource(TestProjects.DsaPath); var cci2 = new CciModuleSource(TestProjects.DsaPath); var type = cci.Modules.Single().Module.GetAllTypes().Single(t => t.Name.Value == "Deque") as NamedTypeDefinition; var method = type.Methods.Single(m => m.Name.Value == "EnqueueFront"); var cci3 = MutationTestsHelper.CreateModuleFromCode(code); var choices = new MutationSessionChoices { Filter = new MutationFilter( new List <TypeIdentifier>(), new MethodIdentifier(method).InList()), //Filter = MutationFilter.AllowAll(), SelectedOperators = new AOR_ArithmeticOperatorReplacement().InList <IMutationOperator>(), }; // var type = cci.Modules.Single().Module.GetAllTypes().Single(t => t.Name.Value == "Test") as NamedTypeDefinition; // var method = type.Methods.Single(m => m.Name.Value == "Method1"); var exec = new MutationExecutor(null, choices, null); var container = new MutantsContainer(exec, new OriginalCodebase(cci.InList()), new OptionsModel()); IList <AssemblyNode> assemblies = container.InitMutantsForOperators(ProgressCounter.Inactive()); var mut = assemblies.Cast <CheckedNode>() .SelectManyRecursive(n => n.Children ?? new NotifyingCollection <CheckedNode>()) .OfType <Mutant>().ElementAt(4); MutationResult executeMutation = exec.ExecuteMutation(mut, cci2).Result; var c = new CodeDeepCopier(cci.Host); MethodDefinition methodDefinition = c.Copy(mut.MutationTarget.MethodRaw); var vis = new CodeVisualizer(null, null); var s = vis.Visualize(CodeLanguage.CSharp, cci2); var v = new MutantsCache.Viss(cci2.Host, methodDefinition); var modClean = v.Rewrite(cci2.Modules.Single().Module); cci2.ReplaceWith(modClean); var debug = new DebugOperatorCodeVisitor(); var debug2 = new DebugOperatorCodeVisitor(); new DebugCodeTraverser(debug).Traverse(cci.Modules.Single().Module); new DebugCodeTraverser(debug2).Traverse(cci2.Modules.Single().Module); File.WriteAllText(@"C:\PLIKI\tree1.txt", debug.ToString()); File.WriteAllText(@"C:\PLIKI\tree2.txt", debug2.ToString()); // Console.WriteLine(debug); // Console.WriteLine(debug2); // cci.ReplaceWith(executeMutation.MutatedModules.Modules.Single().Module); // var s2 = vis.Visualize(CodeLanguage.CSharp, cci2); // Console.WriteLine(s); // Console.WriteLine(s2); // var viss = new Viss(cci2.Host, sourceMethod); // IModule newMod = viss.Rewrite(executeMutation.MutatedModules.Modules.Single().Module); // cci2.ReplaceWith(executeMutation.MutatedModules.Modules.Single().Module); // MutationResult executeMutation2 = exec.ExecuteMutation(mut, cci2).Result; }
public async Task Initialize() { _error = null; _paths = new BlockingCollection<ProjectFilesClone>(); ProjectFilesClone[] projectFilesClones = await Task.WhenAll( Enumerable.Range(0, _threadsCount) .Select(i => _fileManager.CreateCloneAsync("WhiteCache-"+i))); _filesPool = projectFilesClones.ToList(); foreach (var projectFilesClone in _filesPool) { _paths.Add(projectFilesClone); } ProjectFilesClone filesClone = _paths.Take(); _mainModules = Task.Run(() => { _referenceStrings = new List<string>(); var task = filesClone.Assemblies.Select(a => { var cci = new CciModuleSource(a.Path); cci.Guid = Guid.NewGuid(); _log.Debug("Whitecache#" + a.FileName + ": Created initial source: "+cci.Guid); return cci; }).ToList(); _paths.Add(filesClone); return task; }); new Thread(() => { try { InitializeModuleNames(); foreach (ProjectFilesClone item in _paths.GetConsumingEnumerable()) { lock(this) { while (_whiteCaches.All(_ => _.Value.Count >= _maxCount) && !_paths.IsAddingCompleted) { Monitor.Wait(this); } } if(_paths.IsAddingCompleted) { return; } ProjectFilesClone item1 = item; Task.Run(() => TryAdd(item1)) .ContinueWith(task => { _paths.TryAdd(item1); NotifyClients(); }).LogErrors(); } } catch (Exception e) { _log.Error("Read assembly failed. ", e); _error = e; _paths.CompleteAdding(); } }).Start(); }
public void Test00() { const string code = @"using System; namespace Ns { public class Test { public int Method1(int a, int b) { return a + b; } } }"; var cci = new CciModuleSource(TestProjects.DsaPath); var cci2 = new CciModuleSource(TestProjects.DsaPath); var type = cci.Modules.Single().Module.GetAllTypes().Single(t => t.Name.Value == "Deque") as NamedTypeDefinition; var method = type.Methods.Single(m => m.Name.Value == "EnqueueFront"); var cci3 = MutationTestsHelper.CreateModuleFromCode(code); var choices = new MutationSessionChoices { Filter = new MutationFilter( new List<TypeIdentifier>(), new MethodIdentifier(method).InList()), //Filter = MutationFilter.AllowAll(), SelectedOperators = new AOR_ArithmeticOperatorReplacement().InList<IMutationOperator>(), }; // var type = cci.Modules.Single().Module.GetAllTypes().Single(t => t.Name.Value == "Test") as NamedTypeDefinition; // var method = type.Methods.Single(m => m.Name.Value == "Method1"); var exec = new MutationExecutor(null, choices, null); var container = new MutantsContainer(exec, new OriginalCodebase(cci.InList(), new List<string>())); IList<AssemblyNode> assemblies = container.InitMutantsForOperators(ProgressCounter.Inactive()); var mut = assemblies.Cast<CheckedNode>() .SelectManyRecursive(n => n.Children ?? new NotifyingCollection<CheckedNode>()) .OfType<Mutant>().ElementAt(4); MutationResult executeMutation = exec.ExecuteMutation(mut, cci2).Result; var c = new CodeDeepCopier(cci.Host); MethodDefinition methodDefinition = c.Copy(mut.MutationTarget.MethodRaw); var vis = new CodeVisualizer(null, null); var s = vis.Visualize(CodeLanguage.CSharp, cci2); var v = new MutantsCache.Viss(cci2.Host, methodDefinition); var modClean = v.Rewrite(cci2.Modules.Single().Module); cci2.ReplaceWith(modClean); var debug = new DebugOperatorCodeVisitor(); var debug2 = new DebugOperatorCodeVisitor(); new DebugCodeTraverser(debug).Traverse(cci.Modules.Single().Module); new DebugCodeTraverser(debug2).Traverse(cci2.Modules.Single().Module); File.WriteAllText(@"C:\PLIKI\tree1.txt", debug.ToString()); File.WriteAllText(@"C:\PLIKI\tree2.txt", debug2.ToString()); // Console.WriteLine(debug); // Console.WriteLine(debug2); // cci.ReplaceWith(executeMutation.MutatedModules.Modules.Single().Module); // var s2 = vis.Visualize(CodeLanguage.CSharp, cci2); // Console.WriteLine(s); // Console.WriteLine(s2); // var viss = new Viss(cci2.Host, sourceMethod); // IModule newMod = viss.Rewrite(executeMutation.MutatedModules.Modules.Single().Module); // cci2.ReplaceWith(executeMutation.MutatedModules.Modules.Single().Module); // MutationResult executeMutation2 = exec.ExecuteMutation(mut, cci2).Result; }
public void ReturnToCache(string name, CciModuleSource whiteModules) { }
public async Task <MutationResult> ExecuteMutation(Mutant mutant, CciModuleSource moduleSource, CciModuleSource moduleSource2) { /*var type = new TypeIdentifier((INamedTypeDefinition) mutant.MutationTarget.ProcessingContext.Type.Object); * var type2 = new TypeIdentifier((INamedTypeDefinition)mutant.MutationTarget2.ProcessingContext.Type.Object);// * var method = new MethodIdentifier((IMethodDefinition) mutant.MutationTarget.ProcessingContext.Method.Object); * var method2 = new MethodIdentifier((IMethodDefinition)mutant._mutationTarget2.ProcessingContext.Method.Object); // * var filter = new MutationFilter(type.InList(), method.InList()); * var filter2 = new MutationFilter(type2.InList(), method2.InList());// */ //_log.Debug("ExecuteMutation of: " + type+" - " +method ); //_log.Debug("ExecuteMutation of: " + type + " - " + method + " + " + method2); IMutationOperator mutationOperator = mutant.MutationTarget.OperatorId == null ? new IdentityOperator() : _mutOperators.Single(m => mutant.MutationTarget.OperatorId == m.Info.Id); IMutationOperator mutationOperator2 = mutant._mutationTargets[0].OperatorId == null ? new IdentityOperator() : _mutOperators.Single(m => mutant._mutationTargets[0].OperatorId == m.Info.Id); var cci = moduleSource; try { //_log.Info("Execute mutation of " + mutant.MutationTarget + " contained in " + mutant.MutationTarget.MethodRaw + " modules. "); _log.Info("Execute mutation of " + mutant.MutationTarget + " contained in " + mutant.MutationTarget.MethodRaw + " modules and " + mutant._mutationTargets[0] + " contained in " + mutant._mutationTargets[0].MethodRaw + " modules."); var mutatedModules = new List <IModuleInfo>(); var module = moduleSource.Modules.Single(); List <MutationTarget> mutationTargets = new List <MutationTarget>(); mutationTargets.Add(mutant.MutationTarget); mutationTargets.Add(mutant._mutationTargets[0]); List <MutationTarget> sharedtargets = new List <MutationTarget>(); foreach (var element in _sharedTargets.GetValues(mutationOperator, returnEmptySet: true)) { sharedtargets.Add(element); } foreach (var element in _sharedTargets.GetValues(mutationOperator2, returnEmptySet: true)) { sharedtargets.Add(element); } var visitorBack = new VisualCodeVisitorBack(mutationTargets, sharedtargets, module.Module, mutationOperator.Info.Id + mutationOperator2.Info.Id); var traverser2 = new VisualCodeTraverser(_filter, visitorBack, moduleSource); traverser2.Traverse(module.Module); visitorBack.PostProcess(); var operatorCodeRewriter = mutationOperator.CreateRewriter(); var rewriter = new VisualCodeRewriter(cci.Host, visitorBack.TargetAstObjects, visitorBack.SharedAstObjects, _filter, operatorCodeRewriter, traverser2); operatorCodeRewriter.MutationTarget = new UserMutationTarget(mutant.MutationTarget.Variant.Signature, mutant.MutationTarget.Variant.AstObjects); operatorCodeRewriter.NameTable = cci.Host.NameTable; operatorCodeRewriter.Host = cci.Host; operatorCodeRewriter.Module = module.Module; operatorCodeRewriter.OperatorUtils = _operatorUtils; operatorCodeRewriter.Initialize(); /*var operatorCodeRewriter2 = mutationOperator2.CreateRewriter();// * var rewriter2 = new VisualCodeRewriter(cci.Host, visitorBack.TargetAstObjects, * visitorBack.SharedAstObjects, _filter, operatorCodeRewriter2, traverser2);// * * operatorCodeRewriter2.MutationTarget = * new UserMutationTarget(mutant._mutationTarget2.Variant.Signature, mutant.MutationTarget2.Variant.AstObjects);// * * operatorCodeRewriter2.NameTable = cci.Host.NameTable; * operatorCodeRewriter2.Host = cci.Host; * operatorCodeRewriter2.Module = module.Module; * operatorCodeRewriter2.OperatorUtils = _operatorUtils; * operatorCodeRewriter2.Initialize(); */ var rewrittenModule = rewriter.Rewrite(module.Module); //var rewrittenModule2 = rewriter2.Rewrite(module.Module);// rewriter.CheckForUnfoundObjects(); //rewriter2.CheckForUnfoundObjects();// //2nd mutation /*IMutationOperator mutationOperator2 = mutant._mutationTarget2.OperatorId == null ? new IdentityOperator() : * _mutOperators.Single(m => mutant._mutationTarget2.OperatorId == m.Info.Id); // * var cci2 = moduleSource2; * var module2 = moduleSource2.Modules.Single();// * var visitorBack2 = new VisualCodeVisitorBack(mutant.MutationTarget2.InList(), * _sharedTargets.GetValues(mutationOperator2, returnEmptySet: true), * module2.Module, mutationOperator2.Info.Id); // * * var traverser22 = new VisualCodeTraverser(_filter, visitorBack2, moduleSource2);// * traverser22.Traverse(module2.Module);// * visitorBack2.PostProcess();// * var operatorCodeRewriter2 = mutationOperator2.CreateRewriter();// * var rewriter2 = new VisualCodeRewriter(cci2.Host, visitorBack2.TargetAstObjects, * visitorBack2.SharedAstObjects, _filter, operatorCodeRewriter2, traverser22);// * * operatorCodeRewriter2.MutationTarget = * new UserMutationTarget(mutant._mutationTarget2.Variant.Signature, mutant.MutationTarget2.Variant.AstObjects);// * * operatorCodeRewriter2.NameTable = cci2.Host.NameTable; * operatorCodeRewriter2.Host = cci2.Host; * operatorCodeRewriter2.Module = module2.Module; * operatorCodeRewriter2.OperatorUtils = _operatorUtils; * operatorCodeRewriter2.Initialize(); * * var rewrittenModule2 = rewriter2.Rewrite(module2.Module);// * rewriter2.CheckForUnfoundObjects();// */ mutant.MutationTarget.Variant.AstObjects = null; //TODO: avoiding leaking memory. refactor mutant._mutationTargets[0].Variant.AstObjects = null; //TODO: avoiding leaking memory. refactor mutatedModules.Add(new ModuleInfo(rewrittenModule, "")); //mutatedModules.Add(new ModuleInfo(rewrittenModule2, ""));// //List<ICciModuleSource> cci = new List<ICciModuleSource>(); //cci.Add(cci1); //cci.Add(cci2); List <IMethodDefinition> methodsMutated = new List <IMethodDefinition>(); methodsMutated.Add(mutant._mutationTargets[0].MethodMutated); var result = new MutationResult(mutant, cci, null, mutant.MutationTarget.MethodMutated, methodsMutated); mutant.MutationTarget.MethodMutated = null; //TODO: avoiding leaking memory. refactor mutant._mutationTargets[0].MethodMutated = null; //TODO: avoiding leaking memory. refactor return(result); } catch (Exception e) { throw new MutationException("CreateMutants failed on operator: {0}.".Formatted(mutationOperator.Info.Name), e); } }
private bool IsTestAssembly(CciModuleSource cci) { return(_testAssemblies.Select(Path.GetFileNameWithoutExtension).Contains(cci.Module.Name)); }
public void trace(string file) { var cci = new CciModuleSource(file); // ModuleInfo mod = (ModuleInfo) cci.Modules.Single(); // var copied = cci.CreateCopier().Copy(cci.Modules.Single().Module); // var copied2 = cci.CreateCopier().Copy(cci.Modules.Single().Module); var copied3 = cci.CreateCopier().Copy(cci.Modules.Single().Module); var white = cci.CloneWith(copied3); var type = white.Modules.Single().Module.GetAllTypes().Single(t => t.Name.Value == "Deque") as NamedTypeDefinition; var method = type.Methods.Single(m => m.Name.Value == "EnqueueFront"); var choices = new MutationSessionChoices { Filter = new MutationFilter( new List<TypeIdentifier>(), new MethodIdentifier(method).InList()), SelectedOperators = new AOR_ArithmeticOperatorReplacement().InList<IMutationOperator>(), }; var exec = new MutationExecutor(null, choices, null); var container = new MutantsContainer(exec, new OriginalCodebase(cci.InList(), new List<string>())); IList<AssemblyNode> assemblies = container.InitMutantsForOperators(ProgressCounter.Inactive()); var mutants = assemblies.Cast<CheckedNode>() .SelectManyRecursive(n => n.Children ?? new NotifyingCollection<CheckedNode>()) .OfType<Mutant>().ToList(); string name = Path.GetFileNameWithoutExtension(file); var debug = new DebugOperatorCodeVisitor(); new DebugCodeTraverser(debug).Traverse(copied3);//.Modules.Single().Module); File.WriteAllText(@"C:\PLIKI\VisualMutator\trace\" + name + "1.txt", debug.ToString(), Encoding.ASCII); var cci2 = new CciModuleSource(file); // ModuleInfo mod = (ModuleInfo) cci.Modules.Single(); var copied21 = cci2.CreateCopier().Copy(cci2.Modules.Single().Module); var copied22 = cci2.CreateCopier().Copy(cci2.Modules.Single().Module); var debug1 = new DebugOperatorCodeVisitor(); var debug2 = new DebugOperatorCodeVisitor(); new DebugCodeTraverser(debug1).Traverse(copied21); new DebugCodeTraverser(debug2).Traverse(copied22); File.WriteAllText(@"C:\PLIKI\VisualMutator\trace\tree1" + ".txt", debug1.ToString(), Encoding.ASCII); File.WriteAllText(@"C:\PLIKI\VisualMutator\trace\tree2" + ".txt", debug2.ToString(), Encoding.ASCII); // // foreach (var mutant in mutants) // { // var copied23 = cci2.CreateCopier().Copy(cci.Modules.Single().Module); // var mutCci = cci2.CloneWith(copied23); // // // debug2.ToString().ShouldEqual(debug.ToString()); // // // // MutationResult executeMutation = exec.ExecuteMutation(mutant, mutCci).Result; // // } // var copier2 = new CodeDeepCopier(new DefaultWindowsRuntimeHost()); // var copied2 = copier2.Copy(cci.Modules.Single().Module); // // var a1 = new Assembly(); // var copier3 = new CodeDeepCopier(new PeReader.DefaultHost(), a1); // var copied3 = copier3.Copy(cci.Modules.Single().Module); // // var a2 = new Assembly(); // var copier4 = new CodeDeepCopier(new PeReader.DefaultHost(), a2); // var copied4 = copier4.Copy(cci.Modules.Single().Module); //var copier5 = new CodeDeepCopier(cci.Host); //var copied5 = copier5.Copy(cci.Modules.Single().Module); // var copied1 = cci.Copy(); // var copied2 = cci.Copy(); // var copied3 = cci.Copy(); // var copied4 = cci.Copy(); }
public void ReturnToCache(string moduleName, CciModuleSource source) { var whiteCach = _whiteCaches[_moduleNameToFileName[moduleName]]; whiteCach.Add(source); }
public void IntegrationTestMutation() { var cci = new CciModuleSource(TestProjects.MiscUtil); var original = new OriginalCodebase(cci.InList()); var type = cci.Modules.Single().Module.GetAllTypes().Single(t => t.Name.Value == "Adler32") as NamedTypeDefinition; var method = type.Methods.First(m => m.Name.Value == "ComputeChecksum"); var choices = new MutationSessionChoices { Filter = new MutationFilter( new List<TypeIdentifier>(), new MethodIdentifier(method).InList()), SelectedOperators = new LOR_LogicalOperatorReplacement().InList<IMutationOperator>(), }; var exec = new MutationExecutor(new OptionsModel(), choices, null); var container = new MutantsContainer(exec, original); IList<AssemblyNode> assemblies = container.InitMutantsForOperators(ProgressCounter.Inactive()); var mutants = assemblies.Cast<CheckedNode>() .SelectManyRecursive(n => n.Children ?? new NotifyingCollection<CheckedNode>()) .OfType<Mutant>(); var diff = new CodeDifferenceCreator(); var vis = new CodeVisualizer(original, diff); foreach (var mutant in mutants) { var copy = new CciModuleSource(TestProjects.MiscUtil); MutationResult result = exec.ExecuteMutation(mutant, copy).Result; CodeWithDifference differenceListing = vis.CreateDifferenceListing(CodeLanguage.CSharp, mutant, result).Result; differenceListing.LineChanges.Count.ShouldEqual(2); } }