Example #1
0
        public void TestCreateList()
        {
            NodeDataListBuilder builder = Substitute.ForPartsOf <NodeDataListBuilder>(typeof(NodeDataClass));

            BindingFlags flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;

            FieldInfo    iField    = typeof(NodeDataClass).GetField("i", flags);
            FieldInfo    jField    = typeof(NodeDataClass).GetField("j", flags);
            FieldInfo    kField    = typeof(NodeDataClass).GetField("k", flags);
            PropertyInfo xProperty = typeof(NodeDataClass).GetProperty("X", flags);
            PropertyInfo yProperty = typeof(NodeDataClass).GetProperty("Y", flags);
            PropertyInfo zProperty = typeof(NodeDataClass).GetProperty("Z", flags);

            Assert.NotNull(iField);
            Assert.NotNull(jField);
            Assert.NotNull(kField);
            Assert.NotNull(xProperty);
            Assert.NotNull(yProperty);
            Assert.NotNull(zProperty);

            INodeDataBuilder builder1 = Substitute.For <INodeDataBuilder>();
            INodeDataBuilder builder2 = Substitute.For <INodeDataBuilder>();
            INodeDataBuilder builder3 = Substitute.For <INodeDataBuilder>();
            INodeDataBuilder builder4 = Substitute.For <INodeDataBuilder>();

            builder.WhenForAnyArgs(x => x.CreateFieldBuilder(null, null, null)).DoNotCallBase();

            builder.CreateFieldBuilder(Arg.Any <NodeData>(), Arg.Is <FieldWrapper>(x => x.MemberInfo == iField), DefaultValueParseMap.Instance).Returns(builder1);
            builder.CreateFieldBuilder(Arg.Any <NodeData>(), Arg.Is <FieldWrapper>(x => x.MemberInfo == jField), DefaultValueParseMap.Instance).Returns(builder2);
            builder.CreateFieldBuilder(Arg.Any <NodeData>(), Arg.Is <PropertyWrapper>(x => x.MemberInfo == xProperty), DefaultValueParseMap.Instance).Returns(builder3);
            builder.CreateFieldBuilder(Arg.Any <NodeData>(), Arg.Is <PropertyWrapper>(x => x.MemberInfo == yProperty), DefaultValueParseMap.Instance).Returns(builder4);

            INodeDataField field1 = Substitute.For <INodeDataField>();
            INodeDataField field2 = Substitute.For <INodeDataField>();
            INodeDataField field3 = Substitute.For <INodeDataField>();
            INodeDataField field4 = Substitute.For <INodeDataField>();

            builder1.CreateNodeDataField().Returns(field1);
            builder2.CreateNodeDataField().Returns(field2);
            builder3.CreateNodeDataField().Returns(field3);
            builder4.CreateNodeDataField().Returns(field4);

            Assert.IsType <NodeDataList>(builder.CreateList());

            builder.Received().CreateFieldBuilder(Arg.Any <NodeData>(), Arg.Is <FieldWrapper>(x => x.MemberInfo == iField), DefaultValueParseMap.Instance);
            builder.Received().CreateFieldBuilder(Arg.Any <NodeData>(), Arg.Is <FieldWrapper>(x => x.MemberInfo == jField), DefaultValueParseMap.Instance);
            builder.DidNotReceive().CreateFieldBuilder(Arg.Any <NodeData>(), Arg.Is <FieldWrapper>(x => x.MemberInfo == kField), Arg.Any <IValueParseMap>());
            builder.Received().CreateFieldBuilder(Arg.Any <NodeData>(), Arg.Is <PropertyWrapper>(x => x.MemberInfo == xProperty), DefaultValueParseMap.Instance);
            builder.Received().CreateFieldBuilder(Arg.Any <NodeData>(), Arg.Is <PropertyWrapper>(x => x.MemberInfo == yProperty), DefaultValueParseMap.Instance);
            builder.DidNotReceive().CreateFieldBuilder(Arg.Any <NodeData>(), Arg.Is <PropertyWrapper>(x => x.MemberInfo == zProperty), Arg.Any <IValueParseMap>());

            builder1.Received().CreateNodeDataField();
            builder2.Received().CreateNodeDataField();
            builder3.Received().CreateNodeDataField();
            builder4.Received().CreateNodeDataField();
        }
Example #2
0
        public NodeDataList(params INodeDataField[] fields)
        {
            fields.ThrowIfNullArgument(nameof(fields));

            this.fields = new INodeDataField[fields.Length];

            for (int i = 0; i < fields.Length; i++)
            {
                INodeDataField field = fields[i];

                if (field.IsNull())
                {
                    throw new ArgumentNullException($"Encountered null in list at position {i}", nameof(fields));
                }

                this.fields[i] = field;
            }
        }