Exemple #1
0
        public void RegisteredBindingsAreFetchedByItemsAccordingToStrategy()
        {
            ItemSequenceDataSet dataSet1 = new ItemSequenceDataSet(new IDataItem[] { new ScalarDataItem <int>(1, null, false), new ScalarDataItem <int>(2, null, false) }, 1);
            ItemSequenceDataSet dataSet2 = new ItemSequenceDataSet(new IDataItem[] { new ScalarDataItem <int>(10, null, false), new ScalarDataItem <int>(20, null, false) }, 1);

            DataBindingContext context = new DataBindingContext(new NullConverter());

            IDataAccessor accessor1 = context.RegisterBinding(dataSet1, new DataBinding(0, null));
            IDataAccessor accessor2 = context.RegisterBinding(dataSet2, new DataBinding(0, null));

            List <IDataItem> combinatorialItems = new List <IDataItem>(context.GetItems(true));

            Assert.Count(4, combinatorialItems);
            Assert.AreEqual(1, accessor1.GetValue(combinatorialItems[0]));
            Assert.AreEqual(10, accessor2.GetValue(combinatorialItems[0]));
            Assert.AreEqual(1, accessor1.GetValue(combinatorialItems[1]));
            Assert.AreEqual(20, accessor2.GetValue(combinatorialItems[1]));
            Assert.AreEqual(2, accessor1.GetValue(combinatorialItems[2]));
            Assert.AreEqual(10, accessor2.GetValue(combinatorialItems[2]));
            Assert.AreEqual(2, accessor1.GetValue(combinatorialItems[3]));
            Assert.AreEqual(20, accessor2.GetValue(combinatorialItems[3]));

            context.Strategy = SequentialJoinStrategy.Instance;

            List <IDataItem> sequentialItems = new List <IDataItem>(context.GetItems(true));

            Assert.Count(2, sequentialItems);
            Assert.AreEqual(1, accessor1.GetValue(sequentialItems[0]));
            Assert.AreEqual(10, accessor2.GetValue(sequentialItems[0]));
            Assert.AreEqual(2, accessor1.GetValue(sequentialItems[1]));
            Assert.AreEqual(20, accessor2.GetValue(sequentialItems[1]));
        }
        public void AccessorCreatesNewObjectsThroughSlotBinding()
        {
            DataSource source = new DataSource("data");

            source.AddDataSet(new ItemSequenceDataSet(new IDataItem[] { new ListDataItem <object>(new object[] { 42, typeof(int) }, null, false) }, 2));

            IDataSourceResolver resolver = Mocks.StrictMock <IDataSourceResolver>();

            using (Mocks.Record())
            {
                Expect.Call(resolver.ResolveDataSource("data")).Repeat.Twice().Return(source);
            }

            using (Mocks.Playback())
            {
                ITypeInfo        type        = Reflector.Wrap(typeof(Holder <>));
                IConstructorInfo constructor = type.GetConstructors(BindingFlags.Instance | BindingFlags.Public)[0];
                ISlotInfo        valueSlot   = constructor.Parameters[0];
                ISlotInfo        typeSlot    = (IGenericParameterInfo)type.GenericArguments[0];

                DataBindingContext context = new DataBindingContext(new NullConverter());

                ObjectDataBinder binder = new ObjectDataBinder(type);
                binder.SetSlotBinder(valueSlot, new ScalarDataBinder(new DataBinding(0, null), "data"));
                binder.SetSlotBinder(typeSlot, new ScalarDataBinder(new DataBinding(1, null), "data"));

                IDataAccessor    accessor = binder.Register(context, resolver);
                List <IDataItem> items    = new List <IDataItem>(context.GetItems(true));
                Assert.Count(1, items);

                Holder <int> holder = (Holder <int>)accessor.GetValue(items[0]);
                Assert.AreEqual(42, holder.Value, "Should have set the value via the constructor parameter.");
            }
        }
Exemple #3
0
        public void RegisterBindingThrowsIfBindingIsNull()
        {
            IConverter         converter = Mocks.Stub <IConverter>();
            DataBindingContext context   = new DataBindingContext(converter);

            context.RegisterBinding(Mocks.Stub <IDataSet>(), null);
        }
Exemple #4
0
        public void InitialDataSetsArrayIsEmpty()
        {
            IConverter         converter = Mocks.Stub <IConverter>();
            DataBindingContext context   = new DataBindingContext(converter);

            Assert.Count(0, context.DataSets);
        }
Exemple #5
0
        public void RegisterBindingThrowsIfDataSetIsNull()
        {
            IConverter         converter = Mocks.Stub <IConverter>();
            DataBindingContext context   = new DataBindingContext(converter);

            context.RegisterBinding(null, new DataBinding(0, null));
        }
Exemple #6
0
        public void ConverterPropertyContainsSameValueAsSpecifiedInTheConstructor()
        {
            IConverter         converter = Mocks.Stub <IConverter>();
            DataBindingContext context   = new DataBindingContext(converter);

            Assert.AreSame(converter, context.Converter);
        }
Exemple #7
0
        public void DefaultJoinStrategyIsCombinatorial()
        {
            IConverter         converter = Mocks.Stub <IConverter>();
            DataBindingContext context   = new DataBindingContext(converter);

            Assert.AreSame(CombinatorialJoinStrategy.Instance, context.Strategy);
        }
Exemple #8
0
        /// <summary>
        /// Creates an initial test state object.
        /// </summary>
        /// <param name="primaryTestStep">The primary test step.</param>
        /// <param name="testActions">The test actions.</param>
        /// <param name="converter">The converter for data binding.</param>
        /// <param name="formatter">The formatter for data binding.</param>
        /// <param name="isExplicit">True if the test was selected explicitly.</param>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="primaryTestStep"/>,
        /// <paramref name="testActions"/>, <paramref name="converter"/>
        /// or <paramref name="formatter"/> is null.</exception>
        internal PatternTestState(PatternTestStep primaryTestStep,
                                  PatternTestActions testActions, IConverter converter, IFormatter formatter, bool isExplicit)
        {
            if (primaryTestStep == null)
            {
                throw new ArgumentNullException("primaryTestStep");
            }
            if (testActions == null)
            {
                throw new ArgumentNullException("testActions");
            }
            if (converter == null)
            {
                throw new ArgumentNullException("converter");
            }
            if (formatter == null)
            {
                throw new ArgumentNullException("formatter");
            }

            this.primaryTestStep = primaryTestStep;
            this.testActions     = testActions;
            this.converter       = converter;
            this.formatter       = formatter;
            this.isExplicit      = isExplicit;

            bindingContext             = new DataBindingContext(converter);
            testParameterDataAccessors = new Dictionary <PatternTestParameter, IDataAccessor>();
            data = new UserDataCollection();
        }
Exemple #9
0
        public void AccessorObtainsAValueFromTheRow()
        {
            DataBinding      binding = new DataBinding(0, null);
            ScalarDataBinder binder  = new ScalarDataBinder(binding, "name");

            IDataSourceResolver resolver = Mocks.StrictMock <IDataSourceResolver>();
            DataBindingContext  context  = new DataBindingContext(new NullConverter());

            DataSource source = new DataSource("name");

            source.AddDataSet(new ItemSequenceDataSet(new IDataItem[]
            {
                new ScalarDataItem <int>(42, null, false),
                new ScalarDataItem <string>("42", null, false)
            }, 1));

            using (Mocks.Record())
            {
                Expect.Call(resolver.ResolveDataSource("name")).Return(source);
            }

            using (Mocks.Playback())
            {
                IDataAccessor accessor = binder.Register(context, resolver);
                Assert.IsTrue(context.DataSets.Contains(source), "The data sets list should contain the source that was resolved during binder registration.");

                List <IDataItem> items = new List <IDataItem>(context.GetItems(true));
                Assert.Count(2, items);

                Assert.AreEqual(42, accessor.GetValue(items[0]));
                Assert.AreEqual("42", accessor.GetValue(items[1]));
            }
        }
Exemple #10
0
        public void GetItemsReturnsASingleNullDataRowIfThereAreNoDataSetsRegistered()
        {
            DataBindingContext context = new DataBindingContext(Mocks.Stub <IConverter>());

            List <IDataItem> items = new List <IDataItem>(context.GetItems(false));

            Assert.Count(1, items);
            Assert.AreSame(NullDataItem.Instance, items[0]);
        }
Exemple #11
0
        public void DataBindingAccessorThrowsIfItemIsNull()
        {
            ItemSequenceDataSet dataSet = new ItemSequenceDataSet(new IDataItem[] { }, 1);
            DataBindingContext  context = new DataBindingContext(Mocks.Stub <IConverter>());

            IDataAccessor accessor = context.RegisterBinding(dataSet, new DataBinding(0, null));

            Assert.Throws <ArgumentNullException>(delegate { accessor.GetValue(null); });
        }
Exemple #12
0
        public void RegisteredDataSetsAppearExactlyOnceInDataSetsList()
        {
            IDataSet dataSet1 = Mocks.Stub <IDataSet>();
            IDataSet dataSet2 = Mocks.Stub <IDataSet>();

            IConverter         converter = Mocks.Stub <IConverter>();
            DataBindingContext context   = new DataBindingContext(converter);

            context.RegisterBinding(dataSet1, new DataBinding(0, null));
            context.RegisterBinding(dataSet2, new DataBinding(0, null));
            context.RegisterBinding(dataSet1, new DataBinding(0, null));

            Assert.AreElementsEqual(new IDataSet[] { dataSet1, dataSet2 }, context.DataSets);
        }
Exemple #13
0
        public void RegisterThrowsIfTheDataSourceCannotBeResolvedByName()
        {
            ScalarDataBinder binder = new ScalarDataBinder(new DataBinding(0, null), "name");

            IDataSourceResolver resolver = Mocks.StrictMock <IDataSourceResolver>();

            using (Mocks.Record())
            {
                Expect.Call(resolver.ResolveDataSource("name")).Return(null);
            }

            using (Mocks.Playback())
            {
                DataBindingContext context = new DataBindingContext(new NullConverter());
                Assert.Throws <DataBindingException>(delegate { binder.Register(context, resolver); });
            }
        }