public void TryConvert_ItemLimitSet_ReturnSequenceToken()
        {
            var configMock = new Mock <IConversionConfig>();

            configMock.Setup(m => m.ItemLimit).Returns(10);

            var converterMock = new Mock <IPropertyConverter>();

            converterMock
            .Setup(m => m.Convert(It.IsAny <object>()))
            .Returns <object>(v => new ScalarToken(v));

            var config    = configMock.Object;
            var converter = converterMock.Object;
            var policy    = new CollectionConversionPolicy(config);

            IPropertyToken token;

            Assert.True(policy.TryConvert(converter, Enumerable.Range(0, 20), out token));

            var sequence = token as SequenceToken;

            Assert.NotNull(sequence);
            Assert.Equal(config.ItemLimit, sequence.Elements.Count);
        }
        public void TryConvert_NonEmptyEnumerable_ReturnsSequenceToken()
        {
            var converterMock = new Mock <IPropertyConverter>();

            converterMock
            .Setup(m => m.Convert(It.IsAny <object>()))
            .Returns <object>(v => new ScalarToken(v));

            var config    = Mock.Of <IConversionConfig>();
            var converter = converterMock.Object;
            var policy    = new CollectionConversionPolicy(config);
            var value     = new List <int> {
                1
            };

            IPropertyToken token;

            Assert.True(policy.TryConvert(converter, value, out token));

            var sequence = token as SequenceToken;

            Assert.NotNull(sequence);
            Assert.Equal(1, sequence.Elements.Count);
            Assert.IsType <ScalarToken>(sequence.Elements[0]);
        }
        public void TryConvert_NullConverter_ThrowsArgumentNullException()
        {
            var config = Mock.Of <IConversionConfig>();
            var policy = new CollectionConversionPolicy(config);

            IPropertyToken token;

            Assert.Throws <ArgumentNullException>(() => policy.TryConvert(null, null, out token));
        }
        public void TryConvert_ScalarValue_ReturnsFalse()
        {
            var config    = Mock.Of <IConversionConfig>();
            var converter = Mock.Of <IPropertyConverter>();
            var policy    = new CollectionConversionPolicy(config);

            IPropertyToken token;

            Assert.False(policy.TryConvert(converter, false, out token));
        }
        public void TryConvert_DictionaryWithScalarKey_ReturnsFalse()
        {
            var config    = Mock.Of <IConversionConfig>();
            var converter = Mock.Of <IPropertyConverter>();
            var policy    = new CollectionConversionPolicy(config);
            var value     = new Dictionary <string, int>();

            IPropertyToken token;

            Assert.False(policy.TryConvert(converter, value, out token));
        }
        public void TryConvert_EmptyEnumerable_ReturnsSequenceToken()
        {
            var config    = Mock.Of <IConversionConfig>();
            var converter = Mock.Of <IPropertyConverter>();
            var policy    = new CollectionConversionPolicy(config);
            var value     = Enumerable.Empty <bool>();

            IPropertyToken token;

            Assert.True(policy.TryConvert(converter, value, out token));

            var sequence = token as SequenceToken;

            Assert.NotNull(sequence);
            Assert.Equal(0, sequence.Elements.Count);
        }