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); }
public static void To_Object(ArgumentTypes.Object p) { result += p.GetType().Name[0]; }
public void ObjectRef_2_ObjectRef(ref ArgumentTypes.Object p) { Console.WriteLine("ok"); }
public void Object_2_Object(ArgumentTypes.Object p) { Console.WriteLine("ok"); }