Inheritance: MonoBehaviour
        public void Action2Arguments()
        {
            //-- Arrange

            Field <List <string> > logField;
            Field <DelegateTester> testerField;

            DeriveClassFrom <object>()
            .ImplementInterface <AncestorRepository.ITester>()
            .PrimaryConstructor("Log", out logField, "Tester", out testerField)
            .Method(x => x.TestAction).Implement(w => {
                testerField.Void(x => x.Acton2, w.Delegate <int, string>((ww, n, s) =>
                                                                         logField.Add(ww.Const("Action2({0},{1})").Format(n, s))
                                                                         ));
            })
            .AllMethods().Throw <NotImplementedException>();

            var log    = new List <string>();
            var tester = new DelegateTester();

            //-- Act

            var obj = CreateClassInstanceAs <AncestorRepository.ITester>().UsingConstructor(log, tester);

            obj.TestAction();

            //-- Assert

            Assert.That(log, Is.EqualTo(new[] { "Action2(123,ABC)" }));
        }
        public void LambdaAsGenericDelegate()
        {
            //-- Arrange

            Field <List <string> > logField;
            Field <DelegateTester> testerField;

            DeriveClassFrom <object>()
            .ImplementInterface <AncestorRepository.ITester>()
            .PrimaryConstructor("Log", out logField, "Tester", out testerField)
            .Method <object>(x => x.TestFunc).Implement(w => {
                var value = w.Local(initialValue: testerField.Func <Func <int, char, string>, int, char, string>(
                                        x => (f, n, c) => x.GenericFunc(f, n, c),
                                        w.Lambda <int, char, string>((n, c) => n.FuncToString() + c.FuncToString()),
                                        w.Const(555),
                                        w.Const('#')));
                w.Return(value.CastTo <object>());
            })
            .AllMethods().Throw <NotImplementedException>();

            var log    = new List <string>();
            var tester = new DelegateTester();

            //-- Act

            var obj    = CreateClassInstanceAs <AncestorRepository.ITester>().UsingConstructor(log, tester);
            var result = obj.TestFunc();

            //-- Assert

            Assert.That(result, Is.EqualTo("555#"));
        }
        public void Func4Arguments()
        {
            //-- Arrange

            Field <List <string> > logField;
            Field <DelegateTester> testerField;

            DeriveClassFrom <object>()
            .ImplementInterface <AncestorRepository.ITester>()
            .PrimaryConstructor("Log", out logField, "Tester", out testerField)
            .Method <object>(x => x.TestFunc).Implement(w => {
                var value = w.Local(initialValue: testerField.Func <Func <int, string, char, string, char>, char>(x => x.Func4, w.Delegate <int, string, char, string, char>((ww, n, s, c, s2) => {
                    logField.Add(ww.Const("Func4<int,string,char,string,char>({0},{1},{2},{3})").Format(n, s, c, s2));
                    ww.Return('#');
                })));
                w.Return(value.CastTo <object>());
            })
            .AllMethods().Throw <NotImplementedException>();

            var log    = new List <string>();
            var tester = new DelegateTester();

            //-- Act

            var obj    = CreateClassInstanceAs <AncestorRepository.ITester>().UsingConstructor(log, tester);
            var result = obj.TestFunc();

            //-- Assert

            Assert.That(result, Is.EqualTo('#'));
            Assert.That(log, Is.EqualTo(new[] { "Func4<int,string,char,string,char>(123,ABC,@,DEF)" }));
        }
        public void Lambda4Arguments()
        {
            //-- Arrange

            Field <List <string> > logField;
            Field <DelegateTester> testerField;

            DeriveClassFrom <object>()
            .ImplementInterface <AncestorRepository.ITester>()
            .PrimaryConstructor("Log", out logField, "Tester", out testerField)
            .Method <object>(x => x.TestFunc).Implement(w => {
                var value = w.Local(initialValue: testerField.Func <Func <int, string, char, string, char>, char>(
                                        x => x.Func4,
                                        w.Lambda <int, string, char, string, char>((n, s, c, s2) => (n + s.Length() + c.CastTo <int>() + s2.Length()).CastTo <char>())));
                w.Return(value.CastTo <object>());
            })
            .AllMethods().Throw <NotImplementedException>();

            var log    = new List <string>();
            var tester = new DelegateTester();

            //-- Act

            var obj    = CreateClassInstanceAs <AncestorRepository.ITester>().UsingConstructor(log, tester);
            var result = obj.TestFunc();

            //-- Assert

            Assert.That(result, Is.EqualTo((char)(123 + 3 + '@' + 3)));
        }
Ejemplo n.º 5
0
 void OnGUI()
 {
     if (GUILayout.Button("Assign delegates"))
     {
         for (int i = 0; i < tweens.Length - 1; ++i)
         {
             DelegateTester.TogglePause += tweens[i].TogglePause;
         }
     }
     if (GUILayout.Button("TogglePause via Delegate"))
     {
         if (DelegateTester.TogglePause != null)
         {
             DelegateTester.TogglePause();
         }
     }
     if (GUILayout.Button("Clear delegates"))
     {
         // DelegateTester.Clear();
         DelegateTester.TogglePause = null;
     }
 }