public void ReflectedPropertyBagVisitor_Transfer_NestedContainer()
        {
            PropertyBagResolver.Register(new ReflectedPropertyBagProvider().Generate <SimpleContainer>());
            PropertyBagResolver.Register(new ReflectedPropertyBagProvider().Generate <NestedContainer>());
            PropertyBagResolver.Register(new ReflectedPropertyBagProvider().Generate <Foo>());

            var source = new SimpleContainer
            {
                Int32Value = 15,
                Nested     = new NestedContainer
                {
                    Int32Value = 42
                }
            };

            var foo = new Foo
            {
                Nested = new NestedContainer {
                    Int32Value = 10
                }
            };

            using (var result = PropertyContainer.Transfer(ref foo, ref source))
            {
                Assert.That(result.Succeeded, Is.True);
                Assert.AreEqual(42, foo.Nested.Int32Value);
            }
        }
        public void ReflectedPropertyBagVisitor_Visit()
        {
            PropertyBagResolver.Register(new ReflectedPropertyBagProvider().Generate <SimpleContainer>());
            PropertyBagResolver.Register(new ReflectedPropertyBagProvider().Generate <NestedContainer>());

            PropertyContainer.Visit(new SimpleContainer(), new VoidVisitor());
        }
        public void ReflectedPropertyBagVisitor_Transfer_NestedContainer()
        {
            PropertyBagResolver.Register(new ReflectedPropertyBagProvider().Generate <SimpleContainer>());
            PropertyBagResolver.Register(new ReflectedPropertyBagProvider().Generate <NestedContainer>());
            PropertyBagResolver.Register(new ReflectedPropertyBagProvider().Generate <Foo>());

            var source = new SimpleContainer
            {
                Int32Value = 15,
                Nested     = new NestedContainer
                {
                    Int32Value = 42
                }
            };

            var foo = new Foo
            {
                Nested = new NestedContainer {
                    Int32Value = 10
                }
            };

            var changeTracker = new ChangeTracker(null);

            PropertyContainer.Transfer(ref foo, ref source, ref changeTracker);
            Assert.AreEqual(42, foo.Nested.Int32Value);
        }
Ejemplo n.º 4
0
            VisitStatus IPropertyVisitor.VisitProperty <TProperty2, TContainer2, TValue2>(TProperty2 property, ref TContainer2 container, ref ChangeTracker changeTracker)
            {
                if (visitedFirst)
                {
                    return(VisitStatus.Handled);
                }
                if (!Result)
                {
                    return(VisitStatus.Handled);
                }
                visitedFirst = true;

                if (property.IsContainer)
                {
                    var bag = PropertyBagResolver.Resolve <TValue2>();
                    if (bag != null)
                    {
                        var ct       = new ChangeTracker();
                        var v        = property.GetValue(ref container);
                        var visitor2 = new FirstVisitor(Visitor);
                        bag.Accept(ref v, ref visitor2, ref ct);
                        Result = visitor2.Result;
                    }
                }
                return(VisitStatus.Handled);
            }
        public void ReflectedPropertyBagVisitor_Transfer_Collections()
        {
            PropertyBagResolver.Register(new ReflectedPropertyBagProvider().Generate <ContainerWithCollections>());

            var source = new ContainerWithCollections
            {
                IListGeneric = new List <int> {
                    4, 5, 6
                },
                ListGeneric = new List <int> {
                    7
                },
                Array = new [] { 6, 9, 10, 11 }
            };

            var destination = new ContainerWithCollections
            {
                IListGeneric = new List <int>(),
                ListGeneric  = new List <int>(),
                Array        = new int[0]
            };

            var changeTracker = new ChangeTracker(null);

            PropertyContainer.Transfer(ref destination, ref source, ref changeTracker);
            Assert.That(destination.IListGeneric.Count, Is.EqualTo(3));
            Assert.That(destination.ListGeneric.Count, Is.EqualTo(1));
            Assert.That(destination.Array.Length, Is.EqualTo(4));
        }
Ejemplo n.º 6
0
        public void ReflectedPropertyBag_SetValue_ReadOnly()
        {
            PropertyBagResolver.Register(new ReflectedPropertyBagProvider().Generate <ContainerWithSpecialAccess>());
            var instance = default(ContainerWithSpecialAccess);

            Assert.DoesNotThrow(() =>
            {
                PropertyContainer.SetValue(ref instance, "m_ReadWriteField", 10);
            });

            Assert.Throws <InvalidOperationException>(() =>
            {
                PropertyContainer.SetValue(ref instance, "m_ExplicitReadOnlyField", 10);
            });

            Assert.DoesNotThrow(() =>
            {
                PropertyContainer.SetValue(ref instance, "ReadWriteProperty", 10);
            });

            Assert.Throws <InvalidOperationException>(() =>
            {
                PropertyContainer.SetValue(ref instance, "ImplicitReadOnlyProperty", 10);
            });
        }
 public void SetUp()
 {
     PropertyBagResolver.Register(new TestNestedContainerPropertyBag());
     PropertyBagResolver.Register(new TestPrimitiveContainerPropertyBag());
     PropertyBagResolver.Register(new TestArrayContainerPropertyBag());
     PropertyBagResolver.Register(new CustomDataFooPropertyBag());
     PropertyBagResolver.Register(new CustomDataBarPropertyBag());
 }
Ejemplo n.º 8
0
        public void Setup()
        {
            m_PreviousWorld = World.Active;
            m_World         = World.Active = new World("Test World");
            m_Manager       = m_World.EntityManager;

            PropertyBagResolver.RegisterProvider(new ReflectedPropertyBagProvider());
        }
Ejemplo n.º 9
0
            public static bool Execute(object container, InspectorVisitor <T> visitor, IProperty property, PropertyPath path,
                                       string propertyName, InspectorVisitLevel visitLevel)
            {
                var action = new GetCustomInspectorCallback(visitor, property, path, propertyName, visitLevel);

                PropertyBagResolver.Resolve(container.GetType()).Cast(ref action);
                return(action.Visited);
            }
Ejemplo n.º 10
0
 public static void InitializePropertyBags()
 {
     PropertyBagResolver.Register(new TestNestedContainerPropertyBag());
     PropertyBagResolver.Register(new TestPrimitiveContainerPropertyBag());
     PropertyBagResolver.Register(new TestArrayContainerPropertyBag());
     PropertyBagResolver.Register(new TestListContainerPropertyBag());
     PropertyBagResolver.Register(new CustomDataFooPropertyBag());
     PropertyBagResolver.Register(new CustomDataBarPropertyBag());
 }
Ejemplo n.º 11
0
        static void AssertCollectionPropertyType <TContainer>(ref TContainer container, string name, Type type)
        {
            var change = new ChangeTracker();
            var action = new AssertCollectionPropertyTypeGetter <TContainer>
            {
                ExpectedPropertyType = type
            };

            PropertyBagResolver.Resolve <TContainer>().FindProperty(name, ref container, ref change, ref action);
        }
Ejemplo n.º 12
0
        public void PropertyBag_Accept_Object()
        {
            var untypedPropertyBag = PropertyBagResolver.Resolve(typeof(TestPrimitiveContainer));
            var boxedContainer     = (object)default(TestPrimitiveContainer);
            var changeTracker      = default(ChangeTracker);

            untypedPropertyBag.Accept(ref boxedContainer, new SetPropertyVisitor {
                Name = nameof(TestPrimitiveContainer.Int32Value), Value = 42
            }, ref changeTracker);
            Assert.That(((TestPrimitiveContainer)boxedContainer).Int32Value, Is.EqualTo(42));
        }
Ejemplo n.º 13
0
        static DomainReload()
        {
            // Save and close the project during an assembly reload or application shutdown
            AssemblyReloadEvents.beforeAssemblyReload += HandleDomainWillUnload;
            EditorApplication.quitting += HandleDomainWillUnload;

            // Register to unity application events
            EditorApplication.update += HandleUpdate;

            PropertyBagResolver.Register(new SessionState.PropertyBag());
        }
        public static object ReadBoxedClass(Type type, PropertiesBinaryReader reader)
        {
            var forwarder = new ReadBoxedClassForwarder {
                reader = reader, Container = null
            };
            var propertyBag = PropertyBagResolver.Resolve(type);

            propertyBag.Cast(ref forwarder);

            return(forwarder.Container);
        }
 public static void Visit <TContainer, TVisitor>(ref TContainer container, TVisitor visitor, ref ChangeTracker changeTracker)
     where TVisitor : IPropertyVisitor
 {
     if (RuntimeTypeInfoCache <TContainer> .IsAbstractOrInterface())
     {
         PropertyBagResolver.Resolve(container.GetType())?.Accept(container, visitor, ref changeTracker);
     }
     else
     {
         PropertyBagResolver.Resolve <TContainer>()?.Accept(ref container, visitor, ref changeTracker);
     }
 }
Ejemplo n.º 16
0
        private static void Initialize()
        {
            var provider = new ReflectedPropertyBagProvider();

            provider.AddGenerator(new CharPropertyGenerator());

            PropertyBagResolver.RegisterProvider(provider);
            PropertyBagResolver.Register(new SerializedObjectViewPropertyBag());

            AssemblyReloadEvents.beforeAssemblyReload += HandleDomainWillUnload;
            EditorApplication.update += HandleUpdate;
            Bridge.EditorApplication.UpdateMainWindowTitleHandler += MainWindowTitleHandler;
        }
Ejemplo n.º 17
0
 public static void Visit <TContainer, TVisitor>(ref TContainer container, TVisitor visitor, ref ChangeTracker changeTracker)
     where TVisitor : IPropertyVisitor
 {
     if (!RuntimeTypeInfoCache <TContainer> .IsValueType() && null != container && typeof(TContainer) != container.GetType())
     {
         var boxed = (object)container;
         PropertyBagResolver.Resolve(container.GetType())?.Accept(ref boxed, visitor, ref changeTracker);
         container = (TContainer)boxed;
     }
     else
     {
         PropertyBagResolver.Resolve <TContainer>()?.Accept(ref container, visitor, ref changeTracker);
     }
 }
Ejemplo n.º 18
0
        public void ReflectedPropertyBag_SetValue_PrivateFields()
        {
            PropertyBagResolver.Register(new ReflectedPropertyBagProvider().Generate <SimpleContainerWithPrivateFields>());
            var instance = default(SimpleContainerWithPrivateFields);

            PropertyContainer.SetValue(ref instance, "m_Int32Value", 10);

            Assert.That(instance.Int32Value, Is.EqualTo(10));

            Assert.Throws <InvalidOperationException>(() =>
            {
                PropertyContainer.SetValue(ref instance, "m_HiddenInt32Value", 10);
            });
        }
Ejemplo n.º 19
0
        public void ReflectedPropertyBag_SetValue_CSharpProperties()
        {
            PropertyBagResolver.Register(new ReflectedPropertyBagProvider().Generate <ContainerWithProperties>());
            var instance = default(ContainerWithProperties);

            PropertyContainer.SetValue(ref instance, "IntProperty", 10);

            Assert.That(instance.IntProperty, Is.EqualTo(10));

            Assert.Throws <InvalidOperationException>(() =>
            {
                PropertyContainer.SetValue(ref instance, "HiddenInt32Property", 10);
            });
        }
Ejemplo n.º 20
0
 VisitStatus IPropertyVisitor.VisitProperty <TProperty2, TContainer2, TValue2>(TProperty2 property, ref TContainer2 container, ref ChangeTracker changeTracker)
 {
     if (property.IsContainer)
     {
         var bag = PropertyBagResolver.Resolve <TValue2>();
         if (bag != null)
         {
             var ct = new ChangeTracker();
             var v  = property.GetValue(ref container);
             bag.Accept(ref v, ref Visitor, ref ct);
         }
     }
     return(VisitStatus.Handled);
 }
        public static void WriteBoxedType <TVisitor>(object container, TVisitor visitor)
            where TVisitor : IPropertyVisitor
        {
            var changeTracker = new ChangeTracker();
            var resolved      = PropertyBagResolver.Resolve(container.GetType());

            if (resolved != null)
            {
                resolved.Accept(ref container, ref visitor, ref changeTracker);
            }
            else
            {
                throw new ArgumentException("Not supported");
            }
        }
        internal static void PatchEntityForPrefabInBoxedType(object container, SparseEntityRemapInfo *remapInfo, int remapInfoCount)
        {
            var visitor       = new EntityRemappingVisitor(remapInfo, remapInfoCount);
            var changeTracker = new ChangeTracker();
            var type          = container.GetType();

            var resolved = PropertyBagResolver.Resolve(type);

            if (resolved != null)
            {
                resolved.Accept(ref container, ref visitor, ref changeTracker);
            }
            else
            {
                throw new ArgumentException($"Type '{type.FullName}' not supported for visiting.");
            }
        }
Ejemplo n.º 23
0
 public static void Transfer <TDestination, TSource>(ref TDestination destination, ref TSource source, ref ChangeTracker changeTracker)
 {
     if (RuntimeTypeInfoCache <TSource> .IsAbstractOrInterface())
     {
         var propertyBag = PropertyBagResolver.Resolve(source.GetType());
         var action      = new TransferAbstractType <TDestination>
         {
             Destination     = destination,
             SourceContainer = (object)source
         };
         propertyBag.Cast(action);
         destination = action.Destination;
     }
     else
     {
         Visit(ref destination, new TransferVisitor <TSource>(source), ref changeTracker);
     }
 }
Ejemplo n.º 24
0
 static JsonObject()
 {
     PropertyBagResolver.Register(new JsonObjectPropertyBag());
 }
Ejemplo n.º 25
0
 static SerializedObjectView()
 {
     PropertyBagResolver.Register(new SerializedObjectViewPropertyBag());
 }
Ejemplo n.º 26
0
 static DynamicBufferContainer()
 {
     PropertyBagResolver.Register(new PropertyBag());
 }
Ejemplo n.º 27
0
 static EntityContainer()
 {
     PropertyBagResolver.Register(new EntityContainerPropertyBag());
     PropertyBagResolver.RegisterProvider(new ReflectedPropertyBagProvider());
 }
Ejemplo n.º 28
0
 static SceneContainer()
 {
     PropertyBagResolver.Register(new ScenePropertyBag());
 }
Ejemplo n.º 29
0
        static ImguiVisitorBase()
        {
#if !NEW_PROPERTIES
            PropertyBagResolver.RegisterProvider(new ReflectedPropertyBagProvider());
#endif
        }
 static EntityContainer()
 {
     PropertyBagResolver.Register(new EntityContainerPropertyBag());
 }