Ejemplo n.º 1
0
        public void CustomRemoveMethod()
        {
            CustomEventEmitter eventEmitter = _classEmitter.CreateEvent("CustomRemoveMethod", EventKind.Static, typeof(EventHandler));

            eventEmitter.RemoveMethod = _classEmitter.CreateMethod(
                "CustomRemove", MethodAttributes.Public | MethodAttributes.Static, typeof(void), new[] { typeof(EventHandler) });
        }
Ejemplo n.º 2
0
        public void StaticEvent()
        {
            CustomEventEmitter eventEmitter = _classEmitter.CreateEvent("StaticEvent", EventKind.Static, typeof(Func <string>));

            Assert.That(eventEmitter.Name, Is.EqualTo("StaticEvent"));
            Assert.That(eventEmitter.EventType, Is.EqualTo(typeof(Func <string>)));
            Assert.That(eventEmitter.EventKind, Is.EqualTo(EventKind.Static));

            ImplementEventAddMethod(eventEmitter);
            ImplementEventRemoveMethod(eventEmitter);

            Type type = _classEmitter.BuildType();

            Assert.That(AddCalled(type), Is.False);
            Assert.That(RemoveCalled(type), Is.False);

            AddEventMethod(type, eventEmitter, (Func <string>) delegate { return(null); });

            Assert.That(AddCalled(type), Is.True);
            Assert.That(RemoveCalled(type), Is.False);

            RemoveEventMethod(type, eventEmitter, (Func <string>) delegate { return(null); });

            Assert.That(AddCalled(type), Is.True);
            Assert.That(RemoveCalled(type), Is.True);
        }
        public void OverridingSimpleMembersOfOpenGenericClass()
        {
            CustomClassEmitter classEmitter = new CustomClassEmitter(Scope, "OverridingSimpleMembersOfOpenGenericClass", typeof(GenericClassWithAllKindsOfMembers <>), Type.EmptyTypes,
                                                                     TypeAttributes.Public | TypeAttributes.Class, false);

            MethodInfo baseMethod       = typeof(GenericClassWithAllKindsOfMembers <>).GetMethod("Method");
            var        overriddenMethod = classEmitter.CreateMethodOverride(baseMethod);

            overriddenMethod.ImplementByBaseCall(baseMethod);

            PropertyInfo          baseProperty       = typeof(GenericClassWithAllKindsOfMembers <>).GetProperty("Property");
            CustomPropertyEmitter overriddenProperty = classEmitter.CreatePropertyOverride(baseProperty);

            overriddenProperty.GetMethod = classEmitter.CreateMethodOverride(baseProperty.GetGetMethod());
            overriddenProperty.GetMethod.ImplementByBaseCall(baseProperty.GetGetMethod());

            EventInfo          baseEvent       = typeof(GenericClassWithAllKindsOfMembers <>).GetEvent("Event");
            CustomEventEmitter overriddenEvent = classEmitter.CreateEventOverride(baseEvent);

            overriddenEvent.AddMethod = classEmitter.CreateMethodOverride(baseEvent.GetAddMethod());
            overriddenEvent.AddMethod.ImplementByBaseCall(baseEvent.GetAddMethod());
            overriddenEvent.RemoveMethod = classEmitter.CreateMethodOverride(baseEvent.GetRemoveMethod());
            overriddenEvent.RemoveMethod.ImplementByBaseCall(baseEvent.GetRemoveMethod());

            Type builtType = classEmitter.BuildType();
            GenericClassWithAllKindsOfMembers <int> instance =
                (GenericClassWithAllKindsOfMembers <int>)Activator.CreateInstance(builtType.MakeGenericType(typeof(int)));

            instance.Method(5);
            Assert.That(instance.Property, Is.EqualTo(0));
            instance.Event += delegate { return(0); };
            instance.Event -= delegate { return(0); };
        }
Ejemplo n.º 4
0
        public void SimpleEvent()
        {
            CustomEventEmitter eventEmitter = _classEmitter.CreateEvent("SimpleEvent", EventKind.Instance, typeof(EventHandler));

            Assert.That(eventEmitter.Name, Is.EqualTo("SimpleEvent"));
            Assert.That(eventEmitter.EventType, Is.EqualTo(typeof(EventHandler)));
            Assert.That(eventEmitter.EventKind, Is.EqualTo(EventKind.Instance));

            ImplementEventAddMethod(eventEmitter);
            ImplementEventRemoveMethod(eventEmitter);

            object instance = BuildInstance();

            Assert.That(AddCalled(instance), Is.False);
            Assert.That(RemoveCalled(instance), Is.False);

            AddEventMethod(instance, eventEmitter, (EventHandler) delegate { });

            Assert.That(AddCalled(instance), Is.True);
            Assert.That(RemoveCalled(instance), Is.False);

            RemoveEventMethod(instance, eventEmitter, (EventHandler) delegate { });

            Assert.That(AddCalled(instance), Is.True);
            Assert.That(RemoveCalled(instance), Is.True);
        }
Ejemplo n.º 5
0
        public void RemoveMethodCannotBeSetTwice()
        {
            CustomEventEmitter eventEmitter = _classEmitter.CreateEvent("AddMethodCannotBeSetTwice", EventKind.Static, typeof(EventHandler));

            Dev.Null = eventEmitter.RemoveMethod;
            eventEmitter.RemoveMethod = _classEmitter.CreateMethod(
                "invalid", MethodAttributes.Public | MethodAttributes.Static, typeof(void), new[] { typeof(EventHandler) });
        }
Ejemplo n.º 6
0
        public void DefaultRemoveMethod()
        {
            CustomEventEmitter eventEmitter = _classEmitter.CreateEvent("DefaultRemoveMethod", EventKind.Static, typeof(EventHandler));

            Assert.That(eventEmitter.RemoveMethod, Is.Not.Null);
            Type type = _classEmitter.BuildType();

            Assert.That(GetEvent(type, eventEmitter).GetRemoveMethod(), Is.Not.Null);
        }
Ejemplo n.º 7
0
    // Start is called before the first frame update
    void Start()
    {
        eventEmitter = CustomEventEmitter.instance;

        Cursor.lockState = CursorLockMode.Locked;
        controller       = GetComponent <CharacterController>();

        eventIndex = eventEmitter.StartEventThatFollows(FMODEvents.events[(int)FMODEvents.Player.WALK], gameObject, GetComponentInChildren <Rigidbody>());
    }
Ejemplo n.º 8
0
        public void AddCustomAttribute()
        {
            CustomEventEmitter eventEmitter = _classEmitter.CreateEvent("AddCustomAttribute", EventKind.Static, typeof(string));

            eventEmitter.AddCustomAttribute(new CustomAttributeBuilder(typeof(SimpleAttribute).GetConstructor(Type.EmptyTypes), new object[0]));

            Type type = _classEmitter.BuildType();

            Assert.That(GetEvent(type, eventEmitter).IsDefined(typeof(SimpleAttribute), false), Is.True);
            Assert.That(GetEvent(type, eventEmitter).GetCustomAttributes(false).Length, Is.EqualTo(1));
            Assert.That(GetEvent(type, eventEmitter).GetCustomAttributes(false)[0], Is.EqualTo(new SimpleAttribute()));
        }
Ejemplo n.º 9
0
        public void CreateEvent()
        {
            var classEmitter = new CustomClassEmitter(Scope, "CreateEvent", typeof(object));
            CustomEventEmitter eventEmitter = classEmitter.CreateEvent("Eve", EventKind.Instance, typeof(Func <string>));

            eventEmitter.AddMethod.AddStatement(new ReturnStatement());
            eventEmitter.RemoveMethod.AddStatement(new ReturnStatement());

            object instance = Activator.CreateInstance(classEmitter.BuildType());

            Assert.That(instance.GetType().GetEvent("Eve"), Is.Not.Null);
        }
Ejemplo n.º 10
0
        private void ImplementEventAddMethod(CustomEventEmitter eventEmitter)
        {
            FieldReference field;

            if (eventEmitter.EventKind == EventKind.Static)
            {
                field = _classEmitter.CreateStaticField("AddCalled", typeof(bool));
            }
            else
            {
                field = _classEmitter.CreateField("AddCalled", typeof(bool));
            }

            eventEmitter.AddMethod.AddStatement(new AssignStatement(field, new ConstReference(true).ToExpression()));
            eventEmitter.AddMethod.ImplementByReturningVoid();
        }
Ejemplo n.º 11
0
        public void EventNameIsNotChangedOnPublicInterfaceImplementation()
        {
            var classEmitter = new CustomClassEmitter(Scope, "EventNameIsNotChangedOnPublicInterfaceImplementation", typeof(object), new[] { typeof(IInterfaceWithEvent) },
                                                      TypeAttributes.Public | TypeAttributes.Class, false);

            CustomEventEmitter eventEmitter = classEmitter.CreatePublicInterfaceEventImplementation(
                typeof(IInterfaceWithEvent).GetEvent("Event", _declaredInstanceBindingFlags));

            eventEmitter.AddMethod = classEmitter.CreateInterfaceMethodImplementation(
                typeof(IInterfaceWithEvent).GetMethod("add_Event", _declaredInstanceBindingFlags));
            eventEmitter.AddMethod.AddStatement(new ReturnStatement());

            eventEmitter.RemoveMethod = classEmitter.CreateInterfaceMethodImplementation(
                typeof(IInterfaceWithEvent).GetMethod("remove_Event", _declaredInstanceBindingFlags));
            eventEmitter.RemoveMethod.AddStatement(new ReturnStatement());

            Type builtType = classEmitter.BuildType();

            Assert.That(builtType.GetEvent("Event", _declaredInstanceBindingFlags), Is.Not.Null);
        }
Ejemplo n.º 12
0
        public void EventNamePreservedOnOverride()
        {
            var classEmitter = new CustomClassEmitter(Scope, "EventNamePreservedOnOverride", typeof(ClassWithAllKindsOfMembers), Type.EmptyTypes,
                                                      TypeAttributes.Public | TypeAttributes.Class, false);

            CustomEventEmitter eventEmitter =
                classEmitter.CreateEventOverride(typeof(ClassWithAllKindsOfMembers).GetEvent("Event", _declaredInstanceBindingFlags));

            eventEmitter.AddMethod =
                classEmitter.CreateMethodOverride(typeof(ClassWithAllKindsOfMembers).GetMethod("add_Event", _declaredInstanceBindingFlags));
            eventEmitter.AddMethod.AddStatement(new ReturnStatement());

            eventEmitter.RemoveMethod =
                classEmitter.CreateMethodOverride(typeof(ClassWithAllKindsOfMembers).GetMethod("remove_Event", _declaredInstanceBindingFlags));
            eventEmitter.RemoveMethod.AddStatement(new ReturnStatement());

            Type builtType = classEmitter.BuildType();

            Assert.That(builtType.GetEvent("Event", _declaredInstanceBindingFlags), Is.Not.Null);
        }
Ejemplo n.º 13
0
    // Start is called before the first frame update
    void Start()
    {
        eventEmitter = CustomEventEmitter.instance;

        Cursor.lockState = CursorLockMode.Locked;
        controller       = GetComponent <CharacterController>();
        if (!isControllable)   //if (!photonView.IsMine) {
        {
            GetComponentInChildren <Camera>().enabled = false;

            AudioListener al = GetComponentInChildren <AudioListener>();
            if (al)
            {
                al.enabled = false;
            }

            GetComponentInChildren <StudioListener>().enabled = false;
        }

        eventIndex = eventEmitter.StartEventThatFollows(FMODEvents.events[(int)FMODEvents.Player.WALK], gameObject, GetComponentInChildren <Rigidbody>());
        Debug.Log(eventIndex);
    }
        public void ImplementingSimpleMembersOfOpenGenericInterface()
        {
            CustomClassEmitter classEmitter =
                new CustomClassEmitter(
                    Scope,
                    "ImplementingSimpleMembersOfOpenGenericInterface",
                    typeof(object),
                    new Type[] { typeof(GenericInterfaceWithAllKindsOfMembers <int>) },
                    TypeAttributes.Public | TypeAttributes.Class, false);

            MethodInfo baseMethod       = typeof(GenericInterfaceWithAllKindsOfMembers <int>).GetMethod("Method");
            var        overriddenMethod = classEmitter.CreateInterfaceMethodImplementation(baseMethod);

            overriddenMethod.AddStatement(new ReturnStatement());

            PropertyInfo          baseProperty       = typeof(GenericInterfaceWithAllKindsOfMembers <int>).GetProperty("Property");
            CustomPropertyEmitter overriddenProperty = classEmitter.CreateInterfacePropertyImplementation(baseProperty);

            overriddenProperty.GetMethod = classEmitter.CreateInterfaceMethodImplementation(baseProperty.GetGetMethod());
            overriddenProperty.GetMethod.AddStatement(new ReturnStatement(new ConstReference(13)));

            EventInfo          baseEvent       = typeof(GenericInterfaceWithAllKindsOfMembers <int>).GetEvent("Event");
            CustomEventEmitter overriddenEvent = classEmitter.CreateInterfaceEventImplementation(baseEvent);

            overriddenEvent.AddMethod = classEmitter.CreateInterfaceMethodImplementation(baseEvent.GetAddMethod());
            overriddenEvent.AddMethod.AddStatement(new ReturnStatement());
            overriddenEvent.RemoveMethod = classEmitter.CreateInterfaceMethodImplementation(baseEvent.GetRemoveMethod());
            overriddenEvent.RemoveMethod.AddStatement(new ReturnStatement());

            Type builtType = classEmitter.BuildType();
            GenericInterfaceWithAllKindsOfMembers <int> instance = (GenericInterfaceWithAllKindsOfMembers <int>)Activator.CreateInstance(builtType);

            instance.Method(7);
            Assert.That(instance.Property, Is.EqualTo(13));
            instance.Event += delegate { return(0); };
            instance.Event -= delegate { return(0); };
        }
Ejemplo n.º 15
0
        public void CreateEventOverride()
        {
            var classEmitter = new CustomClassEmitter(Scope, "CreateEventOverride", typeof(ClassWithAllKindsOfMembers), Type.EmptyTypes,
                                                      TypeAttributes.Public | TypeAttributes.Class, false);

            CustomEventEmitter eventEmitter =
                classEmitter.CreateEventOverride(typeof(ClassWithAllKindsOfMembers).GetEvent("Event", _declaredInstanceBindingFlags));

            eventEmitter.AddMethod =
                classEmitter.CreateMethodOverride(typeof(ClassWithAllKindsOfMembers).GetMethod("add_Event", _declaredInstanceBindingFlags));
            eventEmitter.AddMethod.AddStatement(new ReturnStatement());

            eventEmitter.RemoveMethod =
                classEmitter.CreateMethodOverride(typeof(ClassWithAllKindsOfMembers).GetMethod("remove_Event", _declaredInstanceBindingFlags));
            eventEmitter.RemoveMethod.AddStatement(new ReturnStatement());

            Type builtType = classEmitter.BuildType();
            var  instance  = (ClassWithAllKindsOfMembers)Activator.CreateInstance(builtType);

            EventHandler eventHandler = delegate { };

            instance.Event += eventHandler;
            instance.Event -= eventHandler;
        }
Ejemplo n.º 16
0
        public void CreatePublicInterfaceEventImplementation()
        {
            var classEmitter = new CustomClassEmitter(Scope, "CreatePublicInterfaceEventImplementation", typeof(object), new[] { typeof(IInterfaceWithEvent) },
                                                      TypeAttributes.Public | TypeAttributes.Class, false);

            CustomEventEmitter eventEmitter = classEmitter.CreatePublicInterfaceEventImplementation(
                typeof(IInterfaceWithEvent).GetEvent("Event", _declaredInstanceBindingFlags));

            eventEmitter.AddMethod = classEmitter.CreateInterfaceMethodImplementation(
                typeof(IInterfaceWithEvent).GetMethod("add_Event", _declaredInstanceBindingFlags));
            eventEmitter.AddMethod.AddStatement(new ReturnStatement());

            eventEmitter.RemoveMethod = classEmitter.CreateInterfaceMethodImplementation(
                typeof(IInterfaceWithEvent).GetMethod("remove_Event", _declaredInstanceBindingFlags));
            eventEmitter.RemoveMethod.AddStatement(new ReturnStatement());

            Type builtType = classEmitter.BuildType();

            var          instance     = (IInterfaceWithEvent)Activator.CreateInstance(builtType);
            EventHandler eventHandler = delegate { };

            instance.Event += eventHandler;
            instance.Event -= eventHandler;
        }
Ejemplo n.º 17
0
 // Start is called before the first frame update
 void Start()
 {
     line           = GetComponent <LineRenderer>();
     eventEmitter   = CustomEventEmitter.instance;
     isControllable = photonView.IsMine || !PhotonNetwork.InRoom;
 }
Ejemplo n.º 18
0
 // Start is called before the first frame update
 void Start()
 {
     instance = this;
 }
Ejemplo n.º 19
0
 private EventInfo GetEvent(Type builtType, CustomEventEmitter eventEmitter)
 {
     return(builtType.GetEvent(eventEmitter.Name, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic));
 }
Ejemplo n.º 20
0
 private EventInfo GetEvent(object instance, CustomEventEmitter eventEmitter)
 {
     return(GetEvent(instance.GetType(), eventEmitter));
 }
Ejemplo n.º 21
0
 private void RemoveEventMethod(Type type, CustomEventEmitter eventEmitter, object method)
 {
     GetEvent(type, eventEmitter).GetRemoveMethod(true).Invoke(null, new object[] { method });
 }
Ejemplo n.º 22
0
 private void RemoveEventMethod(object instance, CustomEventEmitter eventEmitter, object method)
 {
     GetEvent(instance, eventEmitter).GetRemoveMethod(true).Invoke(instance, new object[] { method });
 }
Ejemplo n.º 23
0
 private void AddEventMethod(object instance, CustomEventEmitter eventEmitter, object method)
 {
     GetEvent(instance, eventEmitter).GetAddMethod(true).Invoke(instance, new[] { method });
 }
Ejemplo n.º 24
0
 // Start is called before the first frame update
 void Start()
 {
     //PhotonMapper list of player
     //Placeholder stuff
     eventEmitter = CustomEventEmitter.instance;
 }
Ejemplo n.º 25
0
        public void RemoveMethodCannotBeSetToNull()
        {
            CustomEventEmitter eventEmitter = _classEmitter.CreateEvent("RemoveMethodCannotBeSetToNull", EventKind.Static, typeof(string));

            eventEmitter.RemoveMethod = null;
        }