private void DumpProblem() { System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (var problemEventArgs in PexProblemEventArgsList) { CodeLocation location = problemEventArgs.FlippedLocation; Log.Dump("My Category", "flipped location: " + location, null); SequencePoint sp; Services.SymbolManager.TryGetSequencePoint(location.Method, location.Offset, out sp); sb.AppendLine("======================================================="); sb.AppendLine("result: " + problemEventArgs.Result); sb.AppendLine("flipped location: " + sp.Document + " line: " + sp.Line); var flippedCondition = problemEventArgs.Suffix; // sb.AppendLine("suffix term: " + ((ISymbolId)flippedCondition).Description); var location1 = problemEventArgs.ParentOfFlipped.CodeLocation; Services.SymbolManager.TryGetSequencePoint(location1.Method, location1.Offset, out sp); sb.AppendLine("ParentOfFlipped location: " + sp.Document + " line: " + sp.Line); var stringWriter = new StringWriter(); var bodyWriter = this.Services.LanguageManager.DefaultLanguage.CreateBodyWriter(stringWriter, VisibilityContext. Private); var extractor = new ResultTrackConditionExtractor(problemEventArgs.TermManager); extractor.VisitTerm(default(TVoid), flippedCondition); var emitter = new TermEmitter(problemEventArgs.TermManager, new NameCreator()); if (emitter.TryEvaluate(Indexable.One(flippedCondition), 1000, bodyWriter)) { bodyWriter.Return(SystemTypes.Bool); } Log.Dump("My Category", "condition", stringWriter.ToString()); sb.AppendLine(stringWriter.ToString()); } DumpInfoToDebugFile(sb.ToString(), problemIssueFileName); }
void Log_ExplorationBoundaryHandler(ExplorationBoundaryEventArgs e) { var database = Host.GetService <ProblemTrackDatabase>(); ProblemEventArgs successfulFlippedPathCondition = database.CurrentSuccessfulFlippedPathCondition; StringBuilder log = database.SimpleLog; SequencePoint sp; if (successfulFlippedPathCondition == null) { return; } CodeLocation location = successfulFlippedPathCondition.FlippedLocation; Host.Services.SymbolManager.TryGetSequencePoint(location.Method, location.Offset, out sp); StringBuilder sb = new StringBuilder("/////////////////////////////////// \n"); log.AppendLine("exception: " + e.Kind + " e.TargetName: " + e.TargetName + " message: " + e); sb.AppendLine("flipped location: " + sp.Document + " line: " + sp.Line); var branchInfo = new BranchInfo("", 0, 0, 0, "", 0); try { branchInfo = new BranchInfo(sp.Document, sp.Line, sp.Column, sp.EndColumn, location.Method.FullName, location.Offset); } catch (Exception) { } var flippedCondition = successfulFlippedPathCondition.Suffix; var stringWriter = new StringWriter(); var bodyWriter = this.Host.Services.LanguageManager.DefaultLanguage.CreateBodyWriter(stringWriter, VisibilityContext. Private); var emitter = new TermEmitter(successfulFlippedPathCondition.TermManager, new NameCreator()); if (emitter.TryEvaluate(Indexable.One(flippedCondition), 1000, bodyWriter)) { bodyWriter.Return(SystemTypes.Bool); } stringWriter.WriteLine(); stringWriter.WriteLine("Feasible prefixes:"); if (successfulFlippedPathCondition.FeasiblePrefix != null && successfulFlippedPathCondition.FeasiblePrefix.Length > 0) { var bodyWriter2 = this.Host.Services.LanguageManager.DefaultLanguage.CreateBodyWriter(stringWriter, VisibilityContext. Private); foreach (Term prefix in successfulFlippedPathCondition.FeasiblePrefix) { if (emitter.TryEvaluate(Indexable.One(prefix), 1000, bodyWriter2)) { bodyWriter2.Return(SystemTypes.Bool); } } } else { stringWriter.WriteLine("No feasible prefixes."); } this.Host.Log.Dump("My Category", "condition", stringWriter.ToString()); sb.AppendLine(stringWriter.ToString()); sb.AppendLine("///////////////////////////////////"); var issue = new BoundaryProblem(e.Kind.ToString(), e.TargetName.ToString(), e.Message, branchInfo, stringWriter.ToString()); Host.GetService <ProblemTrackDatabase>().BoundaryIssues.Add(issue); log.AppendLine(sb.ToString()); // e. }
private void Log_ProblemHandler(Microsoft.ExtendedReflection.Logging.ProblemEventArgs e) { RecordFlipCount(e); if (e.Result == TryGetModelResult.Success) { Host.GetService <ProblemTrackDatabase>().SimpleLog.AppendLine("flipped result: " + e.Result); Host.GetService <ProblemTrackDatabase>().CurrentSuccessfulFlippedPathCondition = e; return; } if (e.Result != TryGetModelResult.Success) { Host.GetService <ProblemTrackDatabase>().SimpleLog.AppendLine("flipped result: " + e.Result); // return; } try { System.Text.StringBuilder sb = new System.Text.StringBuilder(); CodeLocation location = e.FlippedLocation; var database = Host.GetService <ProblemTrackDatabase>(); database.PexProblemEventArgsList.Add(e); // e.Result == TryGetModelResult. this.Host.Log.Dump("My Category", "flipped location: " + location, null); SequencePoint sp; Host.Services.SymbolManager.TryGetSequencePoint(location.Method, location.Offset, out sp); sb.AppendLine("flipped location: " + sp.Document + " line: " + sp.Line + " offset: " + location.Offset); sb.AppendLine("e.ParentOfFlipped.InCodeBranch: " + e.ParentOfFlipped.InCodeBranch); e.ParentOfFlipped.OutCodeBranches.ToList().ForEach(x => sb.AppendLine("out: " + x)); var flippedCondition = e.Suffix; var parentOfFlipped = e.ParentOfFlipped.CodeLocation; Host.Services.SymbolManager.TryGetSequencePoint(parentOfFlipped.Method, parentOfFlipped.Offset, out sp); sb.AppendLine("parent flipped location: " + sp.Document + " line: " + sp.Line + " offset: " + parentOfFlipped.Offset); var stringWriter = new StringWriter(); var bodyWriter = this.Host.Services.LanguageManager.DefaultLanguage.CreateBodyWriter(stringWriter, VisibilityContext . Private); var emitter = new TermEmitter(e.TermManager, new NameCreator()); if (emitter.TryEvaluate(Indexable.One(flippedCondition), 1000, bodyWriter)) { bodyWriter.Return(SystemTypes.Bool); } string flippedTerm = stringWriter.ToString(); stringWriter.WriteLine(); stringWriter.WriteLine("Feasible prefixes:"); if (e.FeasiblePrefix != null && e.FeasiblePrefix.Length > 0) { var bodyWriter2 = this.Host.Services.LanguageManager.DefaultLanguage.CreateBodyWriter(stringWriter, VisibilityContext . Private); foreach (Term prefix in e.FeasiblePrefix) { if (emitter.TryEvaluate(Indexable.One(prefix), 1000, bodyWriter2)) { bodyWriter2.Return(SystemTypes.Bool); } } } else { stringWriter.WriteLine("No feasible prefixes."); } string feasiblePrefix = stringWriter.ToString().Substring(stringWriter.ToString().IndexOf("Feasible prefixes:")); this.Host.Log.Dump("My Category", "condition", stringWriter.ToString()); sb.AppendLine(stringWriter.ToString()); int returnIndex = flippedTerm.IndexOf("return"); sb.AppendLine("flipped term: " + flippedTerm.Substring(returnIndex)); string targetObjectType = null; bool infeasible = false; if (flippedTerm.Contains("!=") && flippedTerm.Contains("null")) { targetObjectType = flippedTerm.Substring(flippedTerm.IndexOf("(") + 1, flippedTerm.IndexOf(")") - flippedTerm.IndexOf("(") - 1); sb.AppendLine("targetObjectType: " + targetObjectType); int index = flippedTerm.IndexOf("!=") - 2; int length = 0; while (flippedTerm[index] != ' ') { index--; length++; } string variable = flippedTerm.Substring(index + 1, length); sb.AppendLine("variable for targetObjectType: " + variable); string infeasibleCheck = variable + ".GetType() != typeof(" + targetObjectType + ")"; string conflictCheck = variable + " == (" + targetObjectType + ")null"; sb.AppendLine("test for infeasible: " + infeasibleCheck); if (feasiblePrefix.Contains(infeasibleCheck)) { sb.AppendLine("found infeasible constraint: " + infeasibleCheck); infeasible = true; } else if (feasiblePrefix.Contains(conflictCheck)) { sb.AppendLine("found conflict constraint: " + conflictCheck); infeasible = true; } else if (targetObjectType.Contains("(") || targetObjectType.Contains(")") || targetObjectType.Contains("=")) { sb.AppendLine("found wrong object type: " + targetObjectType); infeasible = true; } else { var branchInfo = new BranchInfo(sp.Document, sp.Line, sp.Column, sp.EndColumn, location.Method.FullName, location.Offset); if (database.TargetObjectTypes.ContainsKey(targetObjectType)) { database.TargetObjectTypes[targetObjectType].Add(branchInfo); } else { database.TargetObjectTypes.Add(targetObjectType, new HashSet <BranchInfo> { branchInfo }); } } } IEnumerable <Field> fields = GetInvolvedFields(e.TermManager, flippedCondition); IEnumerable <TypeEx> types = GetInvolvedObjectTypes(e.TermManager, flippedCondition); var simpleLog = database.SimpleLog; var errorLog = database.ErrorLog; Field target; TypeEx declaringType; simpleLog.AppendLine("============Log Problem================"); simpleLog.AppendLine("result: " + e.Result); simpleLog.AppendLine(sb.ToString()); TypeEx targetType; if ( !ObjectCreationProblemAnalyzer.GetTargetExplorableField(fields.Reverse(), out target, out declaringType, Host, out targetType)) { simpleLog.AppendLine("can not analyze"); } simpleLog.AppendLine("failed term: \n" + stringWriter.ToString()); fields.ToList().ForEach(x => simpleLog.AppendLine("involved field: " + x)); foreach (var f in fields) { simpleLog.AppendLine("involved field: "); simpleLog.AppendLine("f.FullName:" + f.FullName); simpleLog.AppendLine("f.Definition.FullName" + f.Definition.FullName); simpleLog.AppendLine("f.InstanceFieldMapType:" + f.InstanceFieldMapType.FullName); TypeEx type; // type. f.TryGetDeclaringType(out type); simpleLog.AppendLine("f.TryGetDeclaringType: " + type.FullName); } types.ToList().ForEach(x => simpleLog.AppendLine("found object type: " + x)); types.ToList().ForEach(x => Host.GetService <ProblemTrackDatabase>().FoundTypes.Add(x.FullName)); fields.ToList().ForEach(x => Host.GetService <ProblemTrackDatabase>().FoundTypes.Add(x.Type.FullName)); fields.ToList().ForEach(x => { TypeEx decType; if (x.TryGetDeclaringType(out decType)) { Host.GetService <ProblemTrackDatabase>().FoundTypes.Add( decType.FullName); } ; }); simpleLog.AppendLine("target field: " + target); if (fields != null && fields.Count() > 0) { CreateCandidateObjectCreationProblem(database, location, sp, stringWriter, simpleLog, fields, target, errorLog, targetType, targetObjectType); } if (fields == null || fields.Count() == 0 && targetObjectType != null && !infeasible) { CreateCandidateObjectCreationProblemForSingleType(stringWriter, sp, location, targetObjectType, database, simpleLog, errorLog); } simpleLog.AppendLine("============end Log Problem================"); simpleLog.AppendLine(); } catch (Exception ex) { Host.GetService <ProblemTrackDatabase>().ErrorLog.AppendLine("Error in problem observer: " + ex); } // DumpInfoToDebugFile(sb.ToString(),outputFile); }
/// <inheritdoc/> public override bool TryGetAssertAreNotEqual(IType type, out IMethod method) { method = InstantiationHelper.Instantiate(XunitTestFrameworkMetadata.MethodDefinition_AssertNotEqual, Indexable.Empty <IType>(), Indexable.One(type)); return(true); }