diff options
author | AnakinSklavenwalker <Anakin@gmx-topmail.de> | 2021-04-24 00:46:14 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-24 00:46:14 +0300 |
commit | 634a37d3f2be7b8c72a612fce7b4907a12533d4c (patch) | |
tree | bca0f06f2667ef0873e8669d4e3ead6aa0c50f33 /Test | |
parent | 7b8ee049a151204997eecf587c69acc2f67c8405 (diff) |
Fix resolving from a ModuleReference (#730)
* add failing test
* Fix resolving from netmodules
Co-authored-by: Jb Evain <jb@evain.net>
Diffstat (limited to 'Test')
-rw-r--r-- | Test/Mono.Cecil.Tests/ResolveTests.cs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/Test/Mono.Cecil.Tests/ResolveTests.cs b/Test/Mono.Cecil.Tests/ResolveTests.cs index bb57570..bce0003 100644 --- a/Test/Mono.Cecil.Tests/ResolveTests.cs +++ b/Test/Mono.Cecil.Tests/ResolveTests.cs @@ -247,6 +247,41 @@ namespace Mono.Cecil.Tests { } } + [Test] + public void ResolveModuleReferenceFromMemberReferenceTest () + { + using (var mma = AssemblyDefinition.ReadAssembly (GetAssemblyResourcePath ("mma.exe"))) { + var modB = mma.Modules [2]; + var bazType = modB.GetType ("Module.B.Baz"); + var gazonkMethod = bazType.Methods.First (m => m.Name.Equals ("Gazonk")); + var callInstr = gazonkMethod.Body.Instructions [1]; + + var methodRef = callInstr.Operand as MethodReference; + var methodTypeRef = methodRef.DeclaringType; + + Assert.AreEqual (mma, methodTypeRef.Module.Assembly); + + var def = methodTypeRef.Resolve (); + Assert.IsNotNull (def); + Assert.AreEqual ("Module.A.Foo", def.FullName); + } + } + + [Test] + public void ResolveModuleReferenceFromMemberReferenceOfSingleNetModuleTest () + { + using (var modb = ModuleDefinition.ReadModule (GetAssemblyResourcePath ("modb.netmodule"))) { + var bazType = modb.GetType ("Module.B.Baz"); + var gazonkMethod = bazType.Methods.First (m => m.Name.Equals ("Gazonk")); + var callInstr = gazonkMethod.Body.Instructions [1]; + + var methodRef = callInstr.Operand as MethodReference; + var methodTypeRef = methodRef.DeclaringType; + + Assert.IsNull (methodTypeRef.Module.Assembly); + Assert.IsNull (methodTypeRef.Resolve ()); + } + } TRet GetReference<TDel, TRet> (TDel code) { var @delegate = code as Delegate; |