public void Equals_False_MixinType()
        {
            var attribute1 = new MixAttribute(typeof(string), typeof(object));
            var attribute2 = new MixAttribute(typeof(string), typeof(int));

            Assert.That(attribute1, Is.Not.EqualTo(attribute2));
        }
        public void Equals_False_SuppressedMixins()
        {
            var attribute1 = new MixAttribute(typeof(string), typeof(object))
            {
                SuppressedMixins = new[] { typeof(int) }
            };
            var attribute2 = new MixAttribute(typeof(string), typeof(object));

            Assert.That(attribute1, Is.Not.EqualTo(attribute2));
        }
        public void Equals_False_AdditionalDependencies()
        {
            var attribute1 = new MixAttribute(typeof(string), typeof(object))
            {
                AdditionalDependencies = new[] { typeof(int) }
            };
            var attribute2 = new MixAttribute(typeof(string), typeof(object));

            Assert.That(attribute1, Is.Not.EqualTo(attribute2));
        }
        public void MixAttribute_Defaults()
        {
            MixAttribute attribute = new MixAttribute(typeof(string), typeof(int));

            Assert.That(attribute.AdditionalDependencies, Is.Empty);
            Assert.That(attribute.SuppressedMixins, Is.Empty);
            Assert.That(attribute.IntroducedMemberVisibility, Is.EqualTo(MemberVisibility.Private));
            Assert.That(attribute.MixinKind, Is.EqualTo(MixinKind.Extending));
            Assert.That(attribute.TargetType, Is.EqualTo(typeof(string)));
            Assert.That(attribute.MixinType, Is.EqualTo(typeof(int)));
        }
        public void Equals_False_IntroducedMemberVisibility()
        {
            var attribute1 = new MixAttribute(typeof(string), typeof(object))
            {
                IntroducedMemberVisibility = MemberVisibility.Private
            };
            var attribute2 = new MixAttribute(typeof(string), typeof(object))
            {
                IntroducedMemberVisibility = MemberVisibility.Public
            };

            Assert.That(attribute1, Is.Not.EqualTo(attribute2));
        }
        public void Equals_False_MixinKind()
        {
            var attribute1 = new MixAttribute(typeof(string), typeof(object))
            {
                MixinKind = MixinKind.Extending
            };
            var attribute2 = new MixAttribute(typeof(string), typeof(object))
            {
                MixinKind = MixinKind.Used
            };

            Assert.That(attribute1, Is.Not.EqualTo(attribute2));
        }
        public void Apply()
        {
            MixAttribute attribute = new MixAttribute(typeof(object), typeof(float));

            _configurationBuilderMock
            .Expect(
                mock => mock.AddMixinToClass(
                    MixinKind.Extending,
                    typeof(object),
                    typeof(float),
                    MemberVisibility.Private,
                    attribute.AdditionalDependencies,
                    attribute.SuppressedMixins,
                    CreateExpectedOrigin(attribute)))
            .Return(null);

            _mockRepository.ReplayAll();
            attribute.Apply(_configurationBuilderMock, _assembly);
            _mockRepository.VerifyAll();
        }
        public void GetHashCode_Equal()
        {
            var attribute1 = new MixAttribute(typeof(string), typeof(object))
            {
                MixinKind = MixinKind.Used,
                AdditionalDependencies     = new[] { typeof(int), typeof(double) },
                IntroducedMemberVisibility = MemberVisibility.Public,
                SuppressedMixins           = new[] { typeof(float), typeof(DateTime) }
            };

            var attribute2 = new MixAttribute(typeof(string), typeof(object))
            {
                MixinKind = MixinKind.Used,
                AdditionalDependencies     = new[] { typeof(int), typeof(double) },
                IntroducedMemberVisibility = MemberVisibility.Public,
                SuppressedMixins           = new[] { typeof(float), typeof(DateTime) }
            };

            Assert.That(attribute1.GetHashCode(), Is.EqualTo(attribute2.GetHashCode()));
        }
        public void Apply_InvalidOperation()
        {
            MixAttribute attribute = new MixAttribute(typeof(object), typeof(float));

            attribute.SuppressedMixins       = new[] { typeof(int) };
            attribute.AdditionalDependencies = new[] { typeof(string) };

            _configurationBuilderMock
            .Expect(
                mock => mock.AddMixinToClass(
                    MixinKind.Extending,
                    typeof(object),
                    typeof(float),
                    MemberVisibility.Private,
                    attribute.AdditionalDependencies,
                    attribute.SuppressedMixins,
                    CreateExpectedOrigin(attribute)))
            .Throw(new InvalidOperationException("Supper?"));

            _mockRepository.ReplayAll();
            attribute.Apply(_configurationBuilderMock, _assembly);
        }
        public void IgnoresDuplicates()
        {
            var attribute = new MixAttribute(typeof(string), typeof(int));

            Assert.That(attribute.IgnoresDuplicates, Is.True);
        }
 private MixinContextOrigin CreateExpectedOrigin(MixAttribute attribute)
 {
     return(MixinContextOrigin.CreateForCustomAttribute(attribute, _assembly));
 }