static void Main(string[] args) { var type = typeof(SS <int>); var method = type.GetMethod("Method"); foreach (var p in method.GetGenericArguments()) { Console.WriteLine(p.FullName); } Console.WriteLine(type.FullName); Console.WriteLine(typeof(SS <>).FullName); Console.WriteLine(type.GetMethod("Hej").ToString()); Console.ReadLine(); var results = new AssemblyComparisonResults(); var checks = Check.RenamingOrDeletingType | Check.MethodSignatureChangeInClass; var baseline = new AssemblyDatum("CandidateAssemblyOld.dll"); var candidate = new AssemblyDatum("CandidateAssembly.dll"); AssemblyComparer.CheckEntireAssembly(baseline.Assembly, candidate.Assembly, results, checks); foreach (var record in results.ChronologicalRecords) { Console.WriteLine($"{record.Category}:\t{record.Source}\t{Environment.NewLine}{record.FailedCheck} - {record.Message}"); } Console.ReadLine(); }
protected override void ProcessRecord() { AssemblyComparer comparer = new AssemblyComparer(); var changes = comparer.Compare(Source, Target); this.WriteObject(changes.ToArray()); }
private static List <AssemblyDetail> DoCompare(DiffConfig config) { AssemblyComparison ac = new AssemblyComparer().CompareAssemblyFiles(config, ComparisonFilter.Default, Subjects.One, Subjects.Two); Assert.AreEqual(1, ac.Groups.Count); return(ac.Groups[0].Assemblies); }
public override bool Execute() { if (Source != null && !File.Exists(Source)) { Log.LogWarning("BreakCop could not find the reference assembly to compare with. Have you configured the ReferenceAssembly MSBuild property?"); return(true); } AssemblyComparer comparer = new AssemblyComparer(); var changes = comparer.Compare(Source, Target).ToList(); var breakingChanges = changes.Where(c => c.Category == ChangeCategory.Breaking).ToList(); Action <string, string, string, string, int, int, int, int, string> action; if (FailOnBreakingChanges) { action = (subcategory, errorCode, helpKeyword, file, lineNumber, columnNumber, endLineNumber, endColumnNumber, message) => Log.LogError(subcategory, errorCode, helpKeyword, file, lineNumber, columnNumber, endLineNumber, endColumnNumber, message); } else { action = (subcategory, errorCode, helpKeyword, file, lineNumber, columnNumber, endLineNumber, endColumnNumber, message) => Log.LogWarning(subcategory, errorCode, helpKeyword, file, lineNumber, columnNumber, endLineNumber, endColumnNumber, message); } breakingChanges.ForEach(c => action("BreakCop", string.Format("BC{0:000}", (int)c.ChangeType), null, Target, 0, 0, 0, 0, c.ToString())); if (FailOnBreakingChanges && breakingChanges.Any()) { return(false); } var nonBreakingChanges = changes.Except(breakingChanges).ToList(); nonBreakingChanges.ForEach(c => Log.LogMessage("BreakCop", string.Format("BC{0:000}", (int)c.ChangeType), null, Target, 0, 0, 0, 0, c.ToString())); return(true); }
public override bool Execute() { if (Source != null && !File.Exists(Source)) { Log.LogWarning("BreakCop could not find the reference assembly to compare with. Have you configured the ReferenceAssembly MSBuild property?"); return true; } AssemblyComparer comparer = new AssemblyComparer(); var changes = comparer.Compare(Source, Target).ToList(); var breakingChanges = changes.Where(c => c.Category == ChangeCategory.Breaking).ToList(); Action<string, string, string, string, int, int, int, int, string> action; if (FailOnBreakingChanges) action = (subcategory, errorCode, helpKeyword, file, lineNumber, columnNumber, endLineNumber, endColumnNumber, message) => Log.LogError(subcategory, errorCode, helpKeyword, file, lineNumber, columnNumber, endLineNumber, endColumnNumber, message); else action = (subcategory, errorCode, helpKeyword, file, lineNumber, columnNumber, endLineNumber, endColumnNumber, message) => Log.LogWarning(subcategory, errorCode, helpKeyword, file, lineNumber, columnNumber, endLineNumber, endColumnNumber, message); breakingChanges.ForEach(c => action("BreakCop", string.Format("BC{0:000}", (int)c.ChangeType), null, Target, 0, 0, 0, 0, c.ToString())); if (FailOnBreakingChanges && breakingChanges.Any()) return false; var nonBreakingChanges = changes.Except(breakingChanges).ToList(); nonBreakingChanges.ForEach(c => Log.LogMessage("BreakCop", string.Format("BC{0:000}", (int)c.ChangeType), null, Target, 0, 0, 0, 0, c.ToString())); return true; }
private static AssemblyComparison DoCompare(ComparisonFilter filter) { AssemblyComparison ac = new AssemblyComparer().CompareAssemblyFiles(DiffConfig.Default, filter, Subjects.One, Subjects.Two); Assert.AreEqual(1, ac.Groups.Count); Assert.AreEqual(2, ac.Groups[0].Assemblies.Count); return(ac); }
public void When_Empty_IgnoreSet() { var context = _builder.BuildAssemblies(); var res = AssemblyComparer.CompareTypes(context.BaseAssembly, context.TargetAssembly); Assert.IsFalse(ReportAnalyzer.GenerateReport(StreamWriter.Null, res, context.IgnoreSet)); }
private void CompareAssemblies(string expectedAssemblyPath, string actualAssemblyPath, IAssemblyDiffVisitor visitor) { var comparer = new AssemblyComparer(expectedAssemblyPath, actualAssemblyPath); if (!comparer.Compare(visitor)) { Assert.Fail("Expected and generated assemblies differs:\r\n\tExpected: {0}\r\n\tGenerated: {1}\r\n\r\n{2}\r\n\r\nCecilified Code:\r\n{3}", comparer.First, comparer.Second, visitor.Reason, cecilifiedCode); } }
public void When_Ignore_All_Changes_To_Type() { var context = _builder.BuildAssemblies(); var comparison = AssemblyComparer.CompareTypes(context.BaseAssembly, context.TargetAssembly); Assert.IsNotNull(context.IgnoreSet); Assert.IsFalse(ReportAnalyzer.GenerateReport(StreamWriter.Null, comparison, context.IgnoreSet)); }
public void DirCompare_OneEmpty() { AssemblyComparer ac = new AssemblyComparer(); AssemblyComparison results = ac.CompareAssemblyDirectories(false, DiffConfig.Default, ComparisonFilter.Default, Subjects.DirOne, Subjects.DirEmpty); // Two assemblies present in just one directories Assert.AreEqual(2, results.Groups.Count); Assert.AreEqual(1, results.Groups[0].Assemblies.Count); Assert.AreEqual(1, results.Groups[1].Assemblies.Count); }
public void When_EmptyAssembly() { var context = _builder.BuildAssemblies(); var r = AssemblyComparer.CompareTypes(context.BaseAssembly, context.TargetAssembly); Assert.AreEqual(0, r.InvalidTypes.Length); Assert.AreEqual(0, r.InvalidEvents.Length); Assert.AreEqual(0, r.InvalidFields.Length); Assert.AreEqual(0, r.InvalidMethods.Length); Assert.AreEqual(0, r.InvalidProperties.Length); }
public void When_Target_MissingProperty() { var context = _builder.BuildAssemblies(); var r = AssemblyComparer.CompareTypes(context.BaseAssembly, context.TargetAssembly); Assert.AreEqual(0, r.InvalidTypes.Length); Assert.AreEqual(0, r.InvalidEvents.Length); Assert.AreEqual(0, r.InvalidFields.Length); Assert.AreEqual(2, r.InvalidMethods.Length); Assert.AreEqual(1, r.InvalidProperties.Length); Assert.AreEqual("MyProperty", r.InvalidProperties.First().Name); }
public void When_Target_Type_Internal() { var context = _builder.BuildAssemblies(); var r = AssemblyComparer.CompareTypes(context.BaseAssembly, context.TargetAssembly); Assert.AreEqual(1, r.InvalidTypes.Length); // Changed members of removed (no longer visible) types shouldn't be flagged Assert.AreEqual(0, r.InvalidEvents.Length); Assert.AreEqual(0, r.InvalidFields.Length); Assert.AreEqual(0, r.InvalidMethods.Length); Assert.AreEqual(0, r.InvalidProperties.Length); }
public void When_DerivingClasses() { var context = _builder.BuildAssemblies(); var r = AssemblyComparer.CompareTypes(context.BaseAssembly, context.TargetAssembly); Assert.AreEqual(0, r.InvalidTypes.Length); Assert.AreEqual(0, r.InvalidEvents.Length); Assert.AreEqual(0, r.InvalidFields.Length); Assert.AreEqual(2, r.InvalidMethods.Length); Assert.AreEqual(0, r.InvalidProperties.Length); Assert.AreEqual("System.Void Uno.PackageDiff.Tests.Sources.When_DerivingClasses_Base::VirtualMethod2()", r.InvalidMethods.ElementAt(0).ToString()); Assert.AreEqual("System.Void Uno.PackageDiff.Tests.Sources.When_DerivingClasses_Base::VirtualMethod3()", r.InvalidMethods.ElementAt(1).ToString()); }
public void When_Target_Method_ChangedReturnType() { var context = _builder.BuildAssemblies(); var r = AssemblyComparer.CompareTypes(context.BaseAssembly, context.TargetAssembly); Assert.AreEqual(0, r.InvalidTypes.Length); Assert.AreEqual(0, r.InvalidEvents.Length); Assert.AreEqual(0, r.InvalidFields.Length); Assert.AreEqual(1, r.InvalidMethods.Length); Assert.AreEqual(0, r.InvalidProperties.Length); Assert.AreEqual("TestMethod", r.InvalidMethods.ElementAt(0).Name); Assert.AreEqual("System.Threading.Tasks.Task Uno.PackageDiff.Tests.Sources.When_Target_Method_ChangedReturnType::TestMethod()", r.InvalidMethods.ElementAt(0).ToString()); }
public void When_Target_Internal() { var context = _builder.BuildAssemblies(); var r = AssemblyComparer.CompareTypes(context.BaseAssembly, context.TargetAssembly); Assert.AreEqual(0, r.InvalidTypes.Length); Assert.AreEqual(0, r.InvalidEvents.Length); Assert.AreEqual(0, r.InvalidFields.Length); Assert.AreEqual(3, r.InvalidMethods.Length); Assert.AreEqual(1, r.InvalidProperties.Length); Assert.AreEqual("MyProperty", r.InvalidProperties.First().Name); Assert.AreEqual("System.Int32 Uno.PackageDiff.Tests.Sources.When_Target_Internal::get_MyProperty()", r.InvalidMethods.ElementAt(0).ToString()); Assert.AreEqual("System.Void Uno.PackageDiff.Tests.Sources.When_Target_Internal::set_MyProperty(System.Int32)", r.InvalidMethods.ElementAt(1).ToString()); Assert.AreEqual("System.Void Uno.PackageDiff.Tests.Sources.When_Target_Internal::MyMethod()", r.InvalidMethods.ElementAt(2).ToString()); }
public async Task then_there_are_no_breaking_changes() { var source = new PackageSource(NugetOrgPackageSourceText); var providers = new List <Lazy <INuGetResourceProvider> >(); providers.AddRange(Repository.Provider.GetCoreV3()); var repo = new SourceRepository(source, providers); var metadataResource = repo.GetResource <PackageMetadataResource>(); var searchResult = await metadataResource.GetMetadataAsync(NugetPackageId, false, false, NullLogger.Instance, CancellationToken.None); var packageSearchMetadata = searchResult.OrderByDescending(e => e.Identity.Version, VersionComparer.VersionRelease).First(); Console.WriteLine(packageSearchMetadata.Description); var dl = repo.GetResource <DownloadResource>(); using (var ephemeralDirectory = new EphemeralDirectory()) { var directory = ephemeralDirectory.Path; using (var cacheContext = new SourceCacheContext()) { var context = new PackageDownloadContext(cacheContext); using (var downloadResult = await dl.GetDownloadResourceResultAsync(packageSearchMetadata.Identity, context, directory, NullLogger.Instance, CancellationToken.None)) { var oldAssemblyPath = typeof(PRI.ProductivityExtensions.ActionExtensions.Actionable).Assembly.Location; var oldFileName = Path.GetFileName(oldAssemblyPath); var newAssemblyPath = downloadResult.PackageReader.GetFiles().FirstOrDefault(e => string.Compare(Path.GetFileName(e), oldFileName, StringComparison.OrdinalIgnoreCase) == 0); newAssemblyPath = Path.Combine(directory, packageSearchMetadata.Identity.Id, packageSearchMetadata.Identity.Version.ToString(), newAssemblyPath); var ac = new AssemblyComparer().CompareAssemblyFiles(newAssemblyPath, newAssemblyPath); Assert.IsTrue(ac.Groups.Count > 0); Assert.IsFalse(ac.Groups[0].HasErrors); Assert.IsNotNull(ac); } } } }
static AssemblyComparer() { Instance = new AssemblyComparer(); }
static int Main(string[] arguments) { foreach (TraceListener tl in Trace.Listeners) { if (tl is RelayingTraceListener) { ((RelayingTraceListener)tl).Message += new EventHandler <TraceEventArgs>(Program_Message); } } Log.Info("BitDiffer Console"); Log.Info("Version {0} ({1:d})", Assembly.GetExecutingAssembly().GetName().Version, DateTime.Today); Log.Info(""); ProgramArguments args = new ProgramArguments(); try { args.Parse(true, arguments); } catch (ArgumentParserException ex) { string message = "ERROR: " + ex.Message; if (args.LogFile != null) { File.WriteAllText(args.LogFile, message); } Console.WriteLine(message); Console.WriteLine(); Usage(); return(-1); } if (args.Help) { Usage(); Console.WriteLine("Press any key to exit..."); Console.Read(); return(1); } if (args.LogFile != null) { _logFileWriter = new StreamWriter(args.LogFile, false); } AssemblyComparison ac = new AssemblyComparer().CompareAssemblies(args.ComparisonSet); ac.WriteReport(args.ReportFile, AssemblyComparisonXmlWriteMode.Normal); if (args.RawFile != null) { ac.WriteXmlReport(args.RawFile, AssemblyComparisonXmlWriteMode.Raw); } Log.Info("Done!"); if (_logFileWriter != null) { _logFileWriter.Flush(); _logFileWriter.Close(); } return(0); }