Example #1
0
        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();
        }
Example #2
0
        protected override void ProcessRecord()
        {
            AssemblyComparer comparer = new AssemblyComparer();
            var changes = comparer.Compare(Source, Target);

            this.WriteObject(changes.ToArray());
        }
Example #3
0
        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;
        }
Example #6
0
        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));
        }
Example #8
0
        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));
        }
Example #10
0
        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);
        }
Example #11
0
        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);
        }
Example #12
0
        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);
        }
Example #13
0
        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);
        }
Example #14
0
        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());
        }
Example #15
0
        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());
        }
Example #16
0
        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);
                    }
                }
            }
        }
 protected override void ProcessRecord()
 {
     AssemblyComparer comparer = new AssemblyComparer();
     var changes = comparer.Compare(Source, Target);
     this.WriteObject(changes.ToArray());
 }
 static AssemblyComparer()
 {
     Instance = new AssemblyComparer();
 }
Example #20
0
        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);
        }