Пример #1
0
                private void WriteEnumerable(IEnumerable array)
                {
                    var childObjectWalker = new ObjectWalker(
                        this.Indent, this.Level + 2, this.Builder);

                    this.WriteTypeName(array.GetType());

                    var coll = array as ICollection;

                    if (coll != null && coll.Count == 0)
                    {
                        this.Builder.Append(" []");
                        return;
                    }

                    this.WriteIndent();
                    this.Builder.Append("[");
                    this.WriteIndent();
                    foreach (var o in array)
                    {
                        this.Builder.Append(' '.Repeat(this.Indent));
                        childObjectWalker.Walk(o);
                        this.Builder.Append(",");
                        this.WriteIndent();
                    }
                    this.Builder.Append("]");
                }
Пример #2
0
            public string Build()
            {
                var builder = new StringBuilder();
                var walker  = new ObjectWalker(this.indent, 0, builder);

                walker.Walk(this.obj);
                return(builder.ToString());
            }
Пример #3
0
            /// <summary>
            /// Get a list of properties and fields from a data contract that satisfy the predicate.
            /// </summary>
            protected static IEnumerable <IObjectMemberContext> GetDataMemberFields(object dataObject, Predicate <MemberInfo> memberTest)
            {
                var walker = new ObjectWalker(memberTest)
                {
                    IncludeNonPublicFields     = true,
                    IncludeNonPublicProperties = true
                };

                return(walker.Walk(dataObject));
            }
        public void TestWalkAllMembersWithFilter()
        {
            // exclude members starting with an underscore
            ObjectWalker walker = new ObjectWalker(delegate(MemberInfo member) { return(!member.Name.StartsWith("_")); });

            // all members
            walker.IncludeNonPublicFields     = true;
            walker.IncludeNonPublicProperties = true;
            walker.IncludePublicFields        = true;
            walker.IncludePublicProperties    = true;

            List <IObjectMemberContext> members = new List <IObjectMemberContext>(walker.Walk(new Foo()));

            Assert.AreEqual(4, members.Count);
        }
        public void TestWalkAllMembers()
        {
            ObjectWalker walker = new ObjectWalker();

            // all members
            walker.IncludeNonPublicFields     = true;
            walker.IncludeNonPublicProperties = true;
            walker.IncludePublicFields        = true;
            walker.IncludePublicProperties    = true;

            List <IObjectMemberContext> members = new List <IObjectMemberContext>(walker.Walk(new Foo()));

            // there will be 6 members, becausing of the backing fields for the properties
            Assert.AreEqual(6, members.Count);
        }
Пример #6
0
		public void TestWalkPublicProperties()
		{
			ObjectWalker walker = new ObjectWalker();

			// public properties
			walker.IncludeNonPublicFields = false;
			walker.IncludeNonPublicProperties = false;
			walker.IncludePublicFields = false;
			walker.IncludePublicProperties = true;

			List<IObjectMemberContext> members = new List<IObjectMemberContext>(walker.Walk(new Foo()));
			Assert.AreEqual(1, members.Count);
			Assert.AreEqual("PublicProperty", members[0].Member.Name);
			Assert.AreEqual(Foo.SomeObject, members[0].MemberValue);
		}
Пример #7
0
        protected void WriteObjectProperties(object obj, XmlWriter writer)
        {
            ObjectWalker walker = new ObjectWalker(
                delegate(IObjectMemberContext ctx)
            {
                WriteProperty(ctx.Object, (PropertyInfo)ctx.Member, ctx.MemberValue, writer);
            },
                delegate(MemberInfo member)
            {
                return(AttributeUtils.HasAttribute <PersistentPropertyAttribute>(member));
            });

            walker.IncludePublicFields = false;
            walker.Walk(obj);
        }
        public void TestWalkPublicFields()
        {
            ObjectWalker walker = new ObjectWalker();

            // public fields
            walker.IncludeNonPublicFields     = false;
            walker.IncludeNonPublicProperties = false;
            walker.IncludePublicFields        = true;
            walker.IncludePublicProperties    = false;

            List <IObjectMemberContext> members = new List <IObjectMemberContext>(walker.Walk(new Foo()));

            Assert.AreEqual(1, members.Count);
            Assert.AreEqual("PublicField", members[0].Member.Name);
            Assert.AreEqual("hello", members[0].MemberValue);
        }
        public void TestWalkType()
        {
            // exclude members starting with an underscore
            ObjectWalker walker = new ObjectWalker();

            // all members
            walker.IncludeNonPublicFields     = true;
            walker.IncludeNonPublicProperties = true;
            walker.IncludePublicFields        = true;
            walker.IncludePublicProperties    = true;

            // in this case we walk typeof(Foo) rather than an instance of Foo
            List <IObjectMemberContext> members = new List <IObjectMemberContext>(walker.Walk(typeof(Foo)));

            // there will be 6 members, becausing of the backing fields for the properties
            Assert.AreEqual(6, members.Count);
        }
Пример #10
0
        protected static Dictionary <string, string> GetColumnMap(Type entityType)
        {
            ObjectWalker walker = new ObjectWalker();
            Dictionary <string, string> propMap = new Dictionary <string, string>();

            foreach (IObjectMemberContext member in walker.Walk(entityType))
            {
                EntityFieldDatabaseMappingAttribute map =
                    AttributeUtils.GetAttribute <EntityFieldDatabaseMappingAttribute>(member.Member);
                if (map != null)
                {
                    propMap.Add(member.Member.Name, map.ColumnName);
                }
            }

            return(propMap);
        }
Пример #11
0
        private static Dictionary <string, PropertyInfo> LoadMap(Type entityType)
        {
            ObjectWalker walker = new ObjectWalker();
            Dictionary <string, PropertyInfo> propMap = new Dictionary <string, PropertyInfo>();

            foreach (IObjectMemberContext member in walker.Walk(entityType))
            {
                EntityFieldDatabaseMappingAttribute map =
                    AttributeUtils.GetAttribute <EntityFieldDatabaseMappingAttribute>(member.Member);
                if (map != null)
                {
                    propMap.Add(map.ColumnName, member.Member as PropertyInfo);
                }
            }

            return(propMap);
        }
        public void TestWalkPrivateFields()
        {
            ObjectWalker walker = new ObjectWalker();

            // private field
            walker.IncludeNonPublicFields     = true;
            walker.IncludeNonPublicProperties = false;
            walker.IncludePublicFields        = false;
            walker.IncludePublicProperties    = false;

            List <IObjectMemberContext> members = new List <IObjectMemberContext>(walker.Walk(new Foo()));

            // there will be 3 private fields, becausing of the backing fields for the properties
            Assert.AreEqual(3, members.Count);
            foreach (IObjectMemberContext member in members)
            {
                if (member.Member.Name == "PrivateField")
                {
                    Assert.AreEqual(true, member.MemberValue);
                }
            }
        }
        public void TestMutation()
        {
            // exclude members starting with an underscore
            ObjectWalker walker = new ObjectWalker(delegate(MemberInfo member) { return(!member.Name.StartsWith("_")); });

            // all members
            walker.IncludeNonPublicFields     = true;
            walker.IncludeNonPublicProperties = true;
            walker.IncludePublicFields        = true;
            walker.IncludePublicProperties    = true;

            Foo foo  = new Foo();
            Foo foo2 = new Foo();

            // in this test we change all the values of foo via the IObjectMemberContext
            foreach (IObjectMemberContext context in walker.Walk(foo))
            {
                if (context.MemberType == typeof(bool))
                {
                    context.MemberValue = false;
                }
                if (context.MemberType == typeof(string))
                {
                    context.MemberValue = "goodbye";
                }
                if (context.MemberType == typeof(int))
                {
                    context.MemberValue = 1;
                }
                if (context.MemberType == typeof(object))
                {
                    context.MemberValue = foo2;
                }
            }

            Assert.AreEqual(true, foo.CheckConsistency(false, "goodbye", 1, foo2));
        }
Пример #14
0
		public void TestMutation()
		{
			// exclude members starting with an underscore
			ObjectWalker walker = new ObjectWalker(delegate(MemberInfo member) { return !member.Name.StartsWith("_"); });

			// all members
			walker.IncludeNonPublicFields = true;
			walker.IncludeNonPublicProperties = true;
			walker.IncludePublicFields = true;
			walker.IncludePublicProperties = true;

			Foo foo = new Foo();
			Foo foo2 = new Foo();

			// in this test we change all the values of foo via the IObjectMemberContext
			foreach (IObjectMemberContext context in walker.Walk(foo))
			{
				if (context.MemberType == typeof(bool))
					context.MemberValue = false;
				if (context.MemberType == typeof(string))
					context.MemberValue = "goodbye";
				if (context.MemberType == typeof(int))
					context.MemberValue = 1;
				if (context.MemberType == typeof(object))
					context.MemberValue = foo2;

			}

			Assert.AreEqual(true, foo.CheckConsistency(false, "goodbye", 1, foo2));
		}
Пример #15
0
		public void TestWalkType()
		{
			// exclude members starting with an underscore
			ObjectWalker walker = new ObjectWalker();

			// all members
			walker.IncludeNonPublicFields = true;
			walker.IncludeNonPublicProperties = true;
			walker.IncludePublicFields = true;
			walker.IncludePublicProperties = true;

			// in this case we walk typeof(Foo) rather than an instance of Foo
			List<IObjectMemberContext> members = new List<IObjectMemberContext>(walker.Walk(typeof(Foo)));
			// there will be 6 members, becausing of the backing fields for the properties
			Assert.AreEqual(6, members.Count);
		}
Пример #16
0
		public void TestWalkAllMembersWithFilter()
		{
			// exclude members starting with an underscore
			ObjectWalker walker = new ObjectWalker(delegate(MemberInfo member) { return !member.Name.StartsWith("_"); });

			// all members
			walker.IncludeNonPublicFields = true;
			walker.IncludeNonPublicProperties = true;
			walker.IncludePublicFields = true;
			walker.IncludePublicProperties = true;

			List<IObjectMemberContext> members = new List<IObjectMemberContext>(walker.Walk(new Foo()));
			Assert.AreEqual(4, members.Count);
		}
Пример #17
0
		public void TestWalkAllMembers()
		{
			ObjectWalker walker = new ObjectWalker();

			// all members
			walker.IncludeNonPublicFields = true;
			walker.IncludeNonPublicProperties = true;
			walker.IncludePublicFields = true;
			walker.IncludePublicProperties = true;

			List<IObjectMemberContext> members = new List<IObjectMemberContext>(walker.Walk(new Foo()));
			// there will be 6 members, becausing of the backing fields for the properties
			Assert.AreEqual(6, members.Count);
		}
Пример #18
0
		public void TestWalkPrivateFields()
		{
			ObjectWalker walker = new ObjectWalker();

			// private field
			walker.IncludeNonPublicFields = true;
			walker.IncludeNonPublicProperties = false;
			walker.IncludePublicFields = false;
			walker.IncludePublicProperties = false;

			List<IObjectMemberContext> members = new List<IObjectMemberContext>(walker.Walk(new Foo()));
			// there will be 3 private fields, becausing of the backing fields for the properties
			Assert.AreEqual(3, members.Count);
			foreach (IObjectMemberContext member in members)
			{
				if(member.Member.Name == "PrivateField")
					Assert.AreEqual(true, member.MemberValue);
			}
			
		}