public void AddObject_WithUnderscorePropertyName_ThenDashPropertyName()
        {
            var target = new HtmlAttributeDictionary();

            target.Add(new { data_value = "test" });

            target.Where(k => k.Key == "data-value").Select(k => k.Key).FirstOrDefault().ShouldEqual("data-value");
        }
        public void AddNameValuePair_WithUnderscorePropertyName_ThenRemainsUnderscoreName()
        {
            var target = new HtmlAttributeDictionary();

            target.Add("data_value", "test");

            target.Where(k => k.Key == "data_value").Select(k => k.Key).FirstOrDefault().ShouldEqual("data_value");
        }
        public void WhenGetAttributeWithNullName_ThenThrowException()
        {
            var target = new HtmlAttributeDictionary();

            Assert.Throws <ArgumentException>(
                () => { var _ = target[null]; }
                );
        }
        public void WithUpperPropertyName_ThenLowerName()
        {
            var target = new HtmlAttributeDictionary();

            target.Add(new { ASYNC = "async" });

            target.Where(k => k.Key == "async").Select(k => k.Key).FirstOrDefault().ShouldEqual("async");
        }
        public void WithObjectWithTwoProperties_ThenDictionaryTwoKeyValuePairs()
        {
            var target = new HtmlAttributeDictionary().Add(new { @class = "TestClass", async = "async" });

            target.Count.ShouldEqual(2);
            target["class"].ShouldEqual("TestClass");
            target["async"].ShouldEqual("async");
        }
        public void WhenRemoveAttributeWithEmptyName_ThenThrowException()
        {
            var target = new HtmlAttributeDictionary();

            Assert.Throws <ArgumentException>(
                () => target.Remove("")
                );
        }
        public void CanSetAndGetValueByName()
        {
            var target = new HtmlAttributeDictionary();

            target["test"] = "value";

            target["test"].ShouldEqual("value");
        }
        public void WhenAttributes_ThenContainsValidString()
        {
            var dictionary = new HtmlAttributeDictionary().Add(new { @class = "test", foo = "\"bar\"" });

            dictionary.Add("async");

            dictionary.CombinedAttributes.ShouldEqual(" class=\"test\" foo=\"&quot;bar&quot;\" async");
        }
        public void WhenAttributeNameIsEmpty_ThenContainsAttributesThrowsException()
        {
            var target = new HtmlAttributeDictionary();

            Assert.Throws <ArgumentException>(
                () => target.ContainsAttribute("")
                );
        }
        public void GivenAttributeInDictionary_ThenContainsAttributeIsTrue()
        {
            var target = new HtmlAttributeDictionary {
                "example"
            };

            target.ContainsAttribute("example").ShouldBeTrue();
        }
        public void WithEmptyName_ThenArgumentException()
        {
            var target = new HtmlAttributeDictionary();

            Assert.Throws <ArgumentException>(
                () => target.Add(string.Empty, "async")
                );
        }
        public void GivenDictionaryWithAttribute_WhenRemoveAttributeWithDifferentName_ThenReturnFalse()
        {
            var target = new HtmlAttributeDictionary {
                "test"
            };
            var removed = target.Remove("something-else");

            removed.ShouldBeFalse();
        }
        public void GivenDictionaryWithAttribute_WhenRemoveAttributeByName_ThenReturnTrue()
        {
            var target = new HtmlAttributeDictionary {
                "test"
            };
            var removed = target.Remove("test");

            removed.ShouldBeTrue();
        }
        public void WithDictionaryWithOneEntityAndObjectWithTwoProperties_ThenThreeKeyValuePairs()
        {
            var target = new HtmlAttributeDictionary();

            target.Add("existing", "value");

            target.Add(new { @class = "TestClass", async = "async" });

            target.Count.ShouldEqual(3);
        }
        public void GivenEmptyDictionary_ThenContainsAttributeIsFalse()
        {
            var target = new HtmlAttributeDictionary();

            target.ContainsAttribute("example").ShouldBeFalse();
        }