예제 #1
0
        public void Test_ArgumentCases()
        {
            var harmony = new Harmony("test");

            typeof(ArgumentOriginalMethods).GetMethods().Do(original =>
            {
                var name = original.Name;
                var i    = name.IndexOf("_2_");
                if (i > 0)
                {
                    var typeName        = name.Substring(i + 3);
                    var replacementName = $"To_{typeName}";
                    var replacement     = typeof(ArgumentPatchMethods).GetMethod(replacementName);
                    Assert.NotNull(replacement, $"replacement '{replacementName}'");
                    try
                    {
                        var result = harmony.Patch(original, new HarmonyMethod(replacement));
                        Assert.NotNull(result, "result");
                    }
                    catch (Exception ex)
                    {
                        Assert.Fail($"Patching {original.Name} failed:\n{ex}");
                    }
                }
            });

            var instance = new ArgumentOriginalMethods();

            ArgumentPatchMethods.Reset();

            var obj = new ArgumentTypes.Object();

            instance.Object_2_Object(obj);
            instance.Object_2_ObjectRef(obj);
            instance.ObjectRef_2_Object(ref obj);
            instance.ObjectRef_2_ObjectRef(ref obj);

            var val = new ArgumentTypes.Value()
            {
                n = 100
            };

            instance.Value_2_Value(val);
            instance.Value_2_Boxing(val);
            instance.Value_2_ValueRef(val);
            Assert.AreEqual(100, val.n);
            instance.Value_2_BoxingRef(val);
            instance.ValueRef_2_Value(ref val);
            instance.ValueRef_2_Boxing(ref val);
            instance.ValueRef_2_ValueRef(ref val);
            Assert.AreEqual(101, val.n);
            instance.ValueRef_2_BoxingRef(ref val);
            Assert.AreEqual(102, val.n);

            Assert.AreEqual("OOOOVVVVVVVV", ArgumentPatchMethods.result);
        }
예제 #2
0
 public static void To_Object(ArgumentTypes.Object p)
 {
     result += p.GetType().Name[0];
 }
예제 #3
0
 public void ObjectRef_2_ObjectRef(ref ArgumentTypes.Object p)
 {
     Console.WriteLine("ok");
 }
예제 #4
0
 public void Object_2_Object(ArgumentTypes.Object p)
 {
     Console.WriteLine("ok");
 }