public void When_static_flag_changed_should_report()
        {
            Assembly assembly1         = ApiBuilder.CreateApi().Class().Constructor(MethodAttributes.Public | MethodAttributes.Static).Build().Build().Build();
            Assembly assembly2         = ApiBuilder.CreateApi().Class().Constructor().Build().Build().Build();
            Mock <IComparerResult> sut = new Builder(assembly1, assembly2).ComparerResultMock;

            sut.Verify(report => report.AddAddedItem(ResultContext.Constructor, It.IsAny <string>(), Severity.Warning), Times.Once);
            sut.Verify(report => report.AddRemovedItem(ResultContext.Constructor, It.IsAny <string>(), Severity.Error), Times.Once);
        }
        public void When_comparing_types_with_same_generic_parameters_should_not_report()
        {
            Assembly assembly1 = ApiBuilder.CreateApi().Class("MyClass`1").GenericParameter("T").Build().Build();
            Assembly assembly2 = ApiBuilder.CreateApi().Class("MyClass`1").GenericParameter("T").Build().Build();
            var      sut       = new Builder(assembly1, assembly2).ComparerResultMock;

            sut.Verify(result => result.AddAddedItem(ResultContext.Class, It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(result => result.AddRemovedItem(ResultContext.Class, It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
        }
Exemple #3
0
        public void When_method_is_changed_and_ignored_should_not_report()
        {
            Assembly        assembly1 = ApiBuilder.CreateApi("A").Class("A.C").Method("M").Build().Build().Build();
            Assembly        assembly2 = ApiBuilder.CreateApi("A").Class("A.C").Method("M2").Build().Build().Build();
            IComparerResult sut       = new Builder(assembly1, assembly2, new[] { "A.C.M" }).Build();

            Assert.AreEqual(0, sut.ComparerResults.First().RemovedItems.Count());
            Assert.AreEqual(1, sut.ComparerResults.First().AddedItems.Count());
        }
        public void When_comparing_types_with_different_generic_params_they_are_not_compared()
        {
            Assembly assembly1 = ApiBuilder.CreateApi().Class("MyClass`2").GenericParameter("T").GenericParameter("B").Build().Build();
            Assembly assembly2 = ApiBuilder.CreateApi().Class("MyClass`1").GenericParameter("T").Build().Build();
            var      sut       = new Builder(assembly1, assembly2).ComparerResultMock;

            sut.Verify(result => result.AddAddedItem(ResultContext.Class, It.IsAny <string>(), It.IsAny <Severity>()), Times.Once);
            sut.Verify(result => result.AddRemovedItem(ResultContext.Class, It.IsAny <string>(), It.IsAny <Severity>()), Times.Once);
        }
        public void When_comparing_types_fullName_is_used()
        {
            Assembly assembly1 = ApiBuilder.CreateApi().Class("Class1").Build().Build();
            Assembly assembly2 = ApiBuilder.CreateApi().Class("Sub.Class1").Build().Build();
            var      sut       = new Builder(assembly1, assembly2).ComparerResultMock;

            sut.Verify(result => result.AddAddedItem(ResultContext.Class, "Sub.Class1", It.IsAny <Severity>()), Times.Once);
            sut.Verify(result => result.AddRemovedItem(ResultContext.Class, "Class1", It.IsAny <Severity>()), Times.Once);
        }
Exemple #6
0
        public void When_property_has_no_setter_and_getter_should_report()
        {
            Assembly assembly1         = ApiBuilder.CreateApi().Class().Property("MyProp", typeof(int), false).Build().Build();
            Assembly assembly2         = ApiBuilder.CreateApi().Class().Property("MyProp", typeof(int), hasGetter: false).Build().Build();
            Mock <IComparerResult> sut = new Builder(assembly1, assembly2).ComparerResultMock;

            sut.Verify(result => result.AddChangedFlag("Setter", false, Severity.Error), Times.Once);
            sut.Verify(result => result.AddChangedFlag("Getter", true, Severity.Error), Times.Once);
        }
        public void When_assembly_properties_changed_the_report_contains_the_changes()
        {
            Assembly assembly1 = ApiBuilder.CreateApi().Build();
            Assembly assembly2 = ApiBuilder.CreateApi("AssemblyName2", "1.0.0.2", "en-US").Build();
            var      sut       = new Builder(assembly1, assembly2).ComparerResultMock;

            sut.Verify(result => result.AddChangedProperty(It.IsAny <string>(), It.IsAny <string>(), "AssemblyName2", Severity.Error), Times.Once);
            sut.Verify(result => result.AddChangedProperty(It.IsAny <string>(), It.IsAny <string>(), "en-US", Severity.Warning), Times.Once);
            sut.Verify(result => result.AddChangedProperty(It.IsAny <string>(), It.IsAny <string>(), "1.0.0.2", Severity.Hint), Times.Once);
        }
        public void When_nothing_changed_should_not_report()
        {
            Assembly assembly1         = ApiBuilder.CreateApi().Class().Constructor().Build().Build().Build();
            Assembly assembly2         = ApiBuilder.CreateApi().Class().Constructor().Build().Build().Build();
            Mock <IComparerResult> sut = new Builder(assembly1, assembly2).ComparerResultMock;

            sut.Verify(report => report.AddAddedItem(ResultContext.Constructor, It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(report => report.AddRemovedItem(ResultContext.Constructor, It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(report => report.AddComparerResult(It.IsAny <IComparerResult>()), Times.Once);
        }
        public void When_class_is_changed_to_enum_changed_attributes_are_reported()
        {
            Assembly assembly1 = ApiBuilder.CreateApi().Class("Class").Build().Build();
            Assembly assembly2 = ApiBuilder.CreateApi().Enum("Class").Build();
            var      sut       = new Builder(assembly1, assembly2).ComparerResultMock;

            sut.Verify(result => result.AddChangedFlag("Enum", false, Severity.Error), Times.Once);
            sut.Verify(result => result.AddChangedFlag("Sealed", false, Severity.Error), Times.Once);
            sut.Verify(result => result.AddChangedFlag(It.IsNotIn(new[] { "Enum", "Sealed" }), It.IsAny <bool>(), It.IsAny <Severity>()), Times.Never);
        }
        public void When_method_did_not_change_should_not_report()
        {
            Assembly assembly1         = ApiBuilder.CreateApi().Class().Method().Build().Build().Build();
            Assembly assembly2         = ApiBuilder.CreateApi().Class().Method().Build().Build().Build();
            Mock <IComparerResult> sut = new Builder(assembly1, assembly2).ComparerResultMock;

            sut.Verify(result => result.AddAddedItem(ResultContext.Method, It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(result => result.AddRemovedItem(ResultContext.Method, It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(result => result.AddComparerResult(It.IsAny <IComparerResult>()), Times.AtLeastOnce);
        }
        public void When_removing_a_public_nested_type_in_an_internal_class_should_not_report()
        {
            Assembly assembly1 = ApiBuilder.CreateApi().Class(attributes: TypeAttributes.NotPublic).NestedType().Build().Build();

            Assembly assembly2 = ApiBuilder.CreateApi().Build();
            var      sut       = new Builder(assembly1, assembly2).ComparerResultMock;

            sut.Verify(result => result.AddAddedItem(It.IsAny <ResultContext>(), It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(result => result.AddRemovedItem(It.IsAny <ResultContext>(), It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
        }
        public void When_properties_are_equal_should_not_report()
        {
            Assembly assembly1         = ApiBuilder.CreateApi().Class().Property("MyProp", typeof(int)).Build().Build();
            Assembly assembly2         = ApiBuilder.CreateApi().Class().Property("MyProp", typeof(int)).Build().Build();
            Mock <IComparerResult> sut = new Builder(assembly1, assembly2).ComparerResultMock;

            sut.Verify(result => result.AddAddedItem(It.IsAny <ResultContext>(), It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(result => result.AddChangedFlag(It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(result => result.AddChangedProperty(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(result => result.AddComparerResult(It.IsAny <IComparerResult>()), Times.Never);
            sut.Verify(result => result.AddRemovedItem(It.IsAny <ResultContext>(), It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
        }
        public void When_event_hasnt_changed_nothing_should_be_reported()
        {
            Assembly assembly1         = ApiBuilder.CreateApi().Class().Event("MyEvent", typeof(PropertyChangedEventHandler)).Build().Build();
            Assembly assembly2         = ApiBuilder.CreateApi().Class().Event("MyEvent", typeof(PropertyChangedEventHandler)).Build().Build();
            Mock <IComparerResult> sut = new Builder(assembly1, assembly2).ComparerResultMock;

            sut.Verify(result => result.AddAddedItem(It.IsAny <ResultContext>(), It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(result => result.AddChangedFlag(It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(result => result.AddChangedProperty(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(result => result.AddComparerResult(It.IsAny <IComparerResult>()), Times.Never);
            sut.Verify(result => result.AddRemovedItem(It.IsAny <ResultContext>(), It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
        }
Exemple #14
0
        public void When_comparing_enum_values_with_equal_numeric_value_should_not_report_anything()
        {
            Assembly assembly1         = ApiBuilder.CreateApi().Enum("MyEnum", new[] { Tuple.Create("Value1", 1) }).Build();
            Assembly assembly2         = ApiBuilder.CreateApi().Enum("MyEnum", new[] { Tuple.Create("Value1", 1) }).Build();
            Mock <IComparerResult> sut = new Builder(assembly1, assembly2).ComparerResultMock;

            sut.Verify(result => result.AddAddedItem(It.IsAny <ResultContext>(), It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(result => result.AddChangedFlag(It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(result => result.AddChangedProperty(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(result => result.AddComparerResult(It.IsAny <IComparerResult>()), Times.Never);
            sut.Verify(result => result.AddRemovedItem(It.IsAny <ResultContext>(), It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
        }
        public void When_assemblies_are_equal_no_reports_are_generated()
        {
            Assembly assembly1 = ApiBuilder.CreateApi().Build();
            Assembly assembly2 = ApiBuilder.CreateApi().Build();
            var      sut       = new Builder(assembly1, assembly2).ComparerResultMock;

            sut.Verify(result => result.AddChangedProperty(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(result => result.AddRemovedItem(It.IsAny <ResultContext>(), It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(result => result.AddAddedItem(It.IsAny <ResultContext>(), It.IsAny <string>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(result => result.AddChangedFlag(It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <Severity>()), Times.Never);
            sut.Verify(result => result.AddComparerResult(It.IsAny <ComparerResult>()), Times.Never);
        }
        public void When_interfaces_changed_this_is_reported()
        {
            Assembly assembly1 = ApiBuilder.CreateApi().Class(interfaces: new[] { typeof(IEnumerable) })
                                 .Method("GetEnumerator", typeof(IEnumerator), MethodAttributes.Virtual | MethodAttributes.Public).Build()
                                 .Build().Build();
            Assembly assembly2 = ApiBuilder.CreateApi().Class(interfaces: new[] { typeof(IDisposable) })
                                 .Method("Dispose", attributes: MethodAttributes.Virtual | MethodAttributes.Public).Build()
                                 .Build().Build();
            var sut = new Builder(assembly1, assembly2).ComparerResultMock;

            sut.Verify(result => result.AddRemovedItem(ResultContext.Interface, typeof(IEnumerable).FullName, Severity.Error), Times.Once);
            sut.Verify(result => result.AddAddedItem(ResultContext.Interface, typeof(IDisposable).FullName, Severity.Warning), Times.Once);
        }
Exemple #17
0
        public void When_comparing_two_assemblies_reports_are_generated()
        {
            Assembly assembly1 = ApiBuilder.CreateApi().Class().Build().Build();
            Assembly assembly2 = ApiBuilder.CreateApi().Class().Build().Build();

            using (MemoryStream xmlStream = new MemoryStream())
                using (MemoryStream htmlStream = new MemoryStream())
                {
                    ApiComparer.CreateInstance(assembly1, assembly2).WithHtmlReport(htmlStream).WithXmlReport(xmlStream).Build().CheckApi();

                    Assert.Greater(htmlStream.Length, 0);
                    Assert.Greater(xmlStream.Length, 0);
                }
        }
        public void When_containing_different_additional_types_in_new_assembly_report_should_contain_them()
        {
            Assembly assembly1 = ApiBuilder.CreateApi()
                                 .Class("Class1").Build()
                                 .AbstractClass("Abstract1").Build()
                                 .Enum("Enum1")
                                 .Interface("Interface1").Build()
                                 .Build();
            Assembly assembly2 = ApiBuilder.CreateApi().Build();
            var      sut       = new Builder(assembly2, assembly1).ComparerResultMock;

            sut.Verify(result => result.AddAddedItem(ResultContext.Class, "Class1", Severity.Warning), Times.Once);
            sut.Verify(result => result.AddAddedItem(ResultContext.Enum, "Enum1", Severity.Warning), Times.Once);
            sut.Verify(result => result.AddAddedItem(ResultContext.AbstractClass, "Abstract1", Severity.Warning), Times.Once);
            sut.Verify(result => result.AddAddedItem(ResultContext.Interface, "Interface1", Severity.Warning), Times.Once);
        }
Exemple #19
0
        public void When_checking_with_logging_should_write_to_stream()
        {
            Assembly assembly1 = ApiBuilder.CreateApi().Class().Build().Build();
            Assembly assembly2 = ApiBuilder.CreateApi().Class().Build().Build();

            using (MemoryStream detailStream = new MemoryStream())
                using (MemoryStream infoStream = new MemoryStream())
                {
                    StreamWriter infoLog = new StreamWriter(infoStream)
                    {
                        AutoFlush = true
                    };
                    StreamWriter detailLog = new StreamWriter(detailStream)
                    {
                        AutoFlush = true
                    };

                    ApiComparer.CreateInstance(assembly1, assembly2).WithInfoLogging(infoLog.WriteLine).WithDetailLogging(detailLog.WriteLine).Build().CheckApi();

                    Assert.Greater(infoStream.Length, 0);
                    Assert.Greater(detailStream.Length, 0);
                }
        }
Exemple #20
0
        public void GivenAddititveApiChangeThenMinorVersionIncreases()
        {
            var oldApi     = ApiBuilder.CreateApi("1");
            var comparison = ApiNodeComparison.Compare(new[] { oldApi }, new[] { oldApi, ApiBuilder.CreateApi("") });

            Assert.That(comparison.GetNewSemanticVersion(new Version(1, 0, 0, 0)).AssemblyFileVersion, Is.EqualTo(new Version(1, 1, 0, 0)));
        }
Exemple #21
0
        public async Task UnchangingPartOfApiDoesNotAppearInComparison()
        {
            var sameApi          = ApiBuilder.CreateApi("same");
            var comparison       = ApiNodeComparison.Compare(new [] { sameApi, ApiBuilder.CreateApi("1") }, new [] { sameApi, ApiBuilder.CreateApi("2") });
            var differenceString = await comparison.GetDifferencesString();

            Assert.That(differenceString, Does.Not.Contain("same"));
        }