private string WeavePropertyChanged(string assemblyPath) { // Disable CheckForEquality, because this will rewrite all our properties and some tests will // behave differently based on whether PropertyChanged is weaved or not. // Those differences will be unlikely to affect real world scenarios, but affect the tests: // WovenCopyToRealm_ShouldAlwaysSetNullableProperties -> does not call native methods // ShouldFollowMapToAttribute -> checks for (value != this.Email_) which adds two extra entries in the LogList // Additionally, the tests don't test the exact behavior of Realm + PropertyChanged, because the check for // Fody.PropertyChanged will always return 'false' (ModuleWeaver.cs@214). var config = new XElement("PropertyChanged"); config.SetAttributeValue("CheckForEquality", false); var weaver = new propertychanged::ModuleWeaver { Config = config }; var targetPath = $"{Path.GetDirectoryName(assemblyPath)}/{Path.GetFileNameWithoutExtension(assemblyPath)}_propertychanged.dll"; weaver.ExecuteTestRun(assemblyPath, runPeVerify: false, afterExecuteCallback: module => { var parameters = new Mono.Cecil.WriterParameters { WriteSymbols = true }; module.Write(targetPath, parameters); }); return(targetPath); }
protected string WeaveRealm(string assemblyPath) { var weaver = new realm::ModuleWeaver(); var targetPath = $"{Path.GetDirectoryName(assemblyPath)}/{Path.GetFileNameWithoutExtension(assemblyPath)}_realm.dll"; var result = weaver.ExecuteTestRun(assemblyPath, runPeVerify: false, afterExecuteCallback: module => { var parameters = new Mono.Cecil.WriterParameters { WriteSymbols = true }; module.Write(targetPath, parameters); }); _warnings.AddRange(result.Warnings.Select(m => m.Text)); _errors.AddRange(result.Errors.Select(m => m.Text)); return(targetPath); }