public void Add_IfAddingASecondItemWithTheSameNameAndType_ShouldOverwriteTheExistingItem()
        {
            const string name = "Test";
            Type type = typeof(HtmlTransformer);

            HtmlTransformerElement firstHtmlTransformerElement = new HtmlTransformerElement
            {
                Name = name,
                Type = type
            };

            HtmlTransformerElement secondHtmlTransformerElement = new HtmlTransformerElement
            {
                Name = name,
                Type = type
            };

            HtmlTransformerElementCollection htmlTransformerElementCollection = new HtmlTransformerElementCollection
            {
                firstHtmlTransformerElement,
                secondHtmlTransformerElement
            };

            Assert.AreEqual(1, htmlTransformerElementCollection.Count);
            Assert.IsTrue(ReferenceEquals(secondHtmlTransformerElement, htmlTransformerElementCollection[0]));
        }
        public void Equals_ShouldBeNameCaseSensitive()
        {
            Type type = typeof(HtmlTransformer);

            HtmlTransformerElement firstHtmlTransformerElement = new HtmlTransformerElement
            {
                Name = "Test",
                Type = type
            };

            HtmlTransformerElement secondHtmlTransformerElement = new HtmlTransformerElement
            {
                Name = "test",
                Type = type
            };

            Assert.AreNotEqual(firstHtmlTransformerElement, secondHtmlTransformerElement);
            Assert.IsFalse(firstHtmlTransformerElement.Equals(secondHtmlTransformerElement));
        }
        public void Equals_IfTheNamesAndTypesAreEqual_ShouldReturnTrue()
        {
            const string name = "Test";
            Type type = typeof(HtmlTransformer);

            HtmlTransformerElement firstHtmlTransformerElement = new HtmlTransformerElement
            {
                Name = name,
                Type = type
            };

            HtmlTransformerElement secondHtmlTransformerElement = new HtmlTransformerElement
            {
                Name = name,
                Type = type
            };

            Assert.AreEqual(firstHtmlTransformerElement, secondHtmlTransformerElement);
            Assert.IsTrue(firstHtmlTransformerElement.Equals(secondHtmlTransformerElement));
        }
        public void Type_Set_ShouldSetTheType()
        {
            Type type = Mock.Of<IHtmlTransformer>().GetType();

            HtmlTransformerElement htmlTransformerElement = new HtmlTransformerElement
            {
                Type = type
            };

            Assert.AreEqual(type, htmlTransformerElement.Type);
        }
        public void Type_Set_IfNotTypeOfIHtmlTransformerIsAssignableFromTheValueParameter_ShouldThrowAConfigurationErrorsException()
        {
            Type type = typeof(object);

            HtmlTransformerElement htmlTransformerElement = new HtmlTransformerElement
            {
                Type = type
            };

            Assert.AreEqual(type, htmlTransformerElement.Type);
        }
 public void Name_Set_ShouldSetTheName()
 {
     const string name = "Test";
     HtmlTransformerElement htmlTransformerElement = new HtmlTransformerElement
     {
         Name = name
     };
     Assert.AreEqual(name, htmlTransformerElement.Name);
 }
        public void Name_Set_IfTheValueParameterIsNull_ShouldThrowAConfigurationErrorsException()
        {
            HtmlTransformerElement htmlTransformerElement = new HtmlTransformerElement();
            try
            {
                htmlTransformerElement.Name = null;
            }
            catch(ConfigurationErrorsException configurationErrorsException)
            {
                if(configurationErrorsException.Message != "The value can not be null.")
                    return;

                ArgumentNullException innerException = configurationErrorsException.InnerException as ArgumentNullException;

                if(innerException != null && innerException.ParamName == "value")
                    throw;
            }
        }
        public void Name_Set_IfTheValueParameterIsAnInvalidCharacter_ShouldThrowAConfigurationErrorsException()
        {
            HtmlTransformerElement htmlTransformerElement = new HtmlTransformerElement();
            int configurationErrorsExceptionThrown = 0;

            for(int i = 0; i < htmlTransformerElement.InvalidNameCharacters.Length; i++)
            {
                // ReSharper disable EmptyGeneralCatchClause
                try
                {
                    htmlTransformerElement.Name = htmlTransformerElement.InvalidNameCharacters[i].ToString(CultureInfo.InvariantCulture);
                }
                catch(ConfigurationErrorsException)
                {
                    configurationErrorsExceptionThrown++;
                }
                // ReSharper restore EmptyGeneralCatchClause
            }

            if(configurationErrorsExceptionThrown == htmlTransformerElement.InvalidNameCharacters.Length)
                throw new ConfigurationErrorsException();
        }