public void Add_WithField_DoesNotAcceptNullValue()
        {
            var dict    = new CustomFieldDictionary();
            var dictRef = (IDictionary <string, AssetCustomField>)dict;

            Assert.Throws <ArgumentNullException>(() => dict.Add(null));
            Assert.Throws <ArgumentNullException>(() => dict.Add(new AssetCustomField {
                Field = null
            }));
            Assert.Throws <ArgumentNullException>(() => dictRef.Add(TEST_KEY, null));
        }
        public void Add_WithString()
        {
            var dict = new CustomFieldDictionary();

            Assert.False(dict.ContainsKey(TEST_KEY));
            dict.Add(TEST_KEY, TEST_VALUE);
            Assert.Collection(dict.Keys, a => Assert.Equal(TEST_KEY, a));
            Assert.Collection(dict.Values, (AssetCustomField a) => {
                Assert.Equal(TEST_KEY, a.FriendlyName);
                Assert.Equal(TEST_KEY, a.Field);
                Assert.Null(a.Format);
                Assert.Equal(TEST_VALUE, a.Value);
            });
            Assert.True(dict.ContainsKey(TEST_KEY));
            Assert.False(dict.ContainsKey(TEST_FRIENDLY_KEY));
            Assert.Equal(dict.Count, dict.Friendly.Count);
            Assert.True(dict.Friendly.ContainsKey(TEST_KEY));
            Assert.False(dict.Friendly.ContainsKey(TEST_FRIENDLY_KEY));
            Assert.Collection(dict.Friendly.Keys, a => Assert.Equal(TEST_KEY, a));
            Assert.Collection(dict.Friendly.Values, a => Assert.Equal(TEST_VALUE, a));

            string value;

            Assert.True(dict.TryGetValue(TEST_KEY, out value));
            Assert.Equal(TEST_VALUE, value);
            Assert.Equal(TEST_VALUE, dict[TEST_KEY]);
            Assert.True(dict.Friendly.TryGetValue(TEST_KEY, out value));
            Assert.Equal(TEST_VALUE, value);
            Assert.Equal(TEST_VALUE, dict.Friendly[TEST_KEY]);

            Assert.False(dict.TryGetValue(TEST_VALUE, out value));
        }
        public void Add_WithField_UpdatesFriendlyNames()
        {
            var dict = new CustomFieldDictionary();
            IDictionary <string, AssetCustomField> dictRef = dict;

            dict.Add(TEST_FIELD);
            Assert.Collection(dict.Keys, a => Assert.Equal(TEST_KEY, a));
            Assert.Collection(dict.Values, (AssetCustomField a) => {
                Assert.Equal(TEST_FRIENDLY_KEY, a.FriendlyName);
                Assert.Equal(TEST_KEY, a.Field);
                Assert.Null(a.Format);
                Assert.Equal(TEST_VALUE, a.Value);
            });
            Assert.Equal(dict.Count, dict.Friendly.Count);
            Assert.False(dict.Friendly.ContainsKey(TEST_KEY));
            Assert.True(dict.Friendly.ContainsKey(TEST_FRIENDLY_KEY));
            Assert.Collection(dict.Friendly.Values, a => Assert.Equal(TEST_VALUE, a));

            string value;

            Assert.True(dict.TryGetValue(TEST_KEY, out value));
            Assert.Equal(TEST_VALUE, value);
            Assert.True(dict.Friendly.TryGetValue(TEST_FRIENDLY_KEY, out value));
            Assert.Equal(TEST_VALUE, value);
            Assert.Equal(TEST_VALUE, dict.Friendly[TEST_FRIENDLY_KEY]);

            Assert.False(dict.TryGetValue(TEST_VALUE, out value));

            var actual = dictRef[TEST_KEY];

            Assert.Equal(TEST_FRIENDLY_KEY, actual.FriendlyName);
            Assert.Equal(TEST_KEY, actual.Field);
            Assert.Null(actual.Format);
            Assert.Equal(TEST_VALUE, actual.Value);
        }
        public void Add_WithField_DoesNotAcceptNullKey()
        {
            var dict    = new CustomFieldDictionary();
            var dictRef = (IDictionary <string, AssetCustomField>)dict;

            Assert.Throws <ArgumentNullException>(() => dict.Add(null, TEST_VALUE));
            Assert.Throws <ArgumentNullException>(() => dictRef.Add(null, TEST_FIELD));
            Assert.DoesNotContain(null, new List <string>(dict.Friendly.Keys));
        }