コード例 #1
0
        public void ShouldGenerateReferencedTypes()
        {
            var elTypeDef = TypeGenerator.MakeTypeDef("TElement", new Dictionary <string, Type>
            {
                { "StringProp", typeof(String) },
            });
            var pointTypeDef = TypeGenerator.MakeTypeDef("TPoint", new Dictionary <string, Type>
            {
                { "X", typeof(double) },
                { "Y", typeof(double) }
            });
            var objTypeDef = TypeGenerator.MakeTypeDef("TRoot", new Dictionary <string, Type>
            {
                { "ListProp", TypeGenerator.MakeListDef(elTypeDef) },
                { "Center", pointTypeDef },
                { "Parent", TypeGenerator.MakeTypeRef("TRoot") },
                { "Nodes", TypeGenerator.MakeListDef(TypeGenerator.MakeTypeRef("TRoot")) }
            });

            IObjectFactory objFactory   = objTypeDef.MakeObjectFactory();
            IObjectFactory elFactory    = elTypeDef.MakeObjectFactory();
            IObjectFactory pointFactory = pointTypeDef.MakeObjectFactory();


            var list = elFactory.NewList();

            list.Add(elFactory.NewObject());
            list.Add(elFactory.NewObject());

            var obj = objFactory.NewObjectAccessor();

            obj.SetValue("ListProp", list);
            foreach (var el in obj.GetValue <IEnumerable <IObjectAccessor> >("ListProp"))
            {
                Assert.That(el.GetType().Name, Is.EqualTo("TElement"));
                el[0] = "test";
            }

            var st = pointFactory.NewObjectAccessor();

            st.SetValue("X", 10.5);
            st.SetValue("Y", 48.96);

            obj.SetValue("Center", st);

            var parent = objFactory.NewObjectAccessor();

            obj.SetValue("Parent", parent);

            var nodes = objFactory.NewList();

            nodes.Add(obj);

            parent.SetValue("Nodes", nodes);
        }