Skip to content

Commit b7bb414

Browse files
added tests and better type finding
1 parent dd3d650 commit b7bb414

File tree

2 files changed

+107
-1
lines changed

2 files changed

+107
-1
lines changed

Aikido.Zen.Core/Helpers/ReflectionHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public static MethodInfo GetMethodFromAssembly(string assemblyName, string typeN
4949
var typeKey = $"{assemblyName}.{typeName}";
5050
if (!_types.TryGetValue(typeKey, out var type))
5151
{
52-
type = assembly.ExportedTypes.FirstOrDefault(t => t.Name == typeName);
52+
type = assembly.ExportedTypes.FirstOrDefault(t => t.Name == typeName || t.FullName == typeName);
5353
if (type == null) return null;
5454
_types[typeKey] = type;
5555
}
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
using Aikido.Zen.Core.Helpers;
2+
using NUnit.Framework;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Reflection;
6+
7+
namespace Aikido.Zen.Test
8+
{
9+
/// <summary>
10+
/// Tests for the ReflectionHelper class.
11+
/// </summary>
12+
public class ReflectionHelperTests
13+
{
14+
[SetUp]
15+
public void SetUp()
16+
{
17+
// Clear the cache before each test to ensure a clean state
18+
ReflectionHelper.ClearCache();
19+
}
20+
21+
[Test]
22+
public void GetMethodFromAssembly_ValidMethod_ReturnsMethodInfo()
23+
{
24+
// Arrange
25+
var assemblyName = "System.Private.CoreLib";
26+
var typeName = "System.String";
27+
var methodName = "Contains";
28+
var parameterTypeNames = new[] { "System.String" };
29+
30+
// Act
31+
var methodInfo = ReflectionHelper.GetMethodFromAssembly(assemblyName, typeName, methodName, parameterTypeNames);
32+
33+
// Assert
34+
Assert.That(methodInfo, Is.Not.Null);
35+
Assert.That(methodInfo.Name, Is.EqualTo(methodName));
36+
}
37+
38+
[Test]
39+
public void GetMethodFromAssembly_InvalidAssembly_ReturnsNull()
40+
{
41+
// Arrange
42+
var assemblyName = "NonExistentAssembly";
43+
var typeName = "System.String";
44+
var methodName = "Contains";
45+
var parameterTypeNames = new[] { "System.String" };
46+
47+
// Act
48+
var methodInfo = ReflectionHelper.GetMethodFromAssembly(assemblyName, typeName, methodName, parameterTypeNames);
49+
50+
// Assert
51+
Assert.That(methodInfo, Is.Null);
52+
}
53+
54+
[Test]
55+
public void GetMethodFromAssembly_InvalidType_ReturnsNull()
56+
{
57+
// Arrange
58+
var assemblyName = "System.Private.CoreLib";
59+
var typeName = "NonExistentType";
60+
var methodName = "Contains";
61+
var parameterTypeNames = new[] { "System.String" };
62+
63+
// Act
64+
var methodInfo = ReflectionHelper.GetMethodFromAssembly(assemblyName, typeName, methodName, parameterTypeNames);
65+
66+
// Assert
67+
Assert.That(methodInfo, Is.Null);
68+
}
69+
70+
[Test]
71+
public void GetMethodFromAssembly_InvalidMethod_ReturnsNull()
72+
{
73+
// Arrange
74+
var assemblyName = "System.Private.CoreLib";
75+
var typeName = "System.String";
76+
var methodName = "NonExistentMethod";
77+
var parameterTypeNames = new[] { "System.String" };
78+
79+
// Act
80+
var methodInfo = ReflectionHelper.GetMethodFromAssembly(assemblyName, typeName, methodName, parameterTypeNames);
81+
82+
// Assert
83+
Assert.That(methodInfo, Is.Null);
84+
}
85+
86+
[Test]
87+
public void ClearCache_ClearsAllCachedData()
88+
{
89+
// Arrange
90+
var assemblyName = "System.Private.CoreLib";
91+
var typeName = "System.String";
92+
var methodName = "Contains";
93+
var parameterTypeNames = new[] { "System.String" };
94+
95+
// Act
96+
var methodInfo = ReflectionHelper.GetMethodFromAssembly(assemblyName, typeName, methodName, parameterTypeNames);
97+
ReflectionHelper.ClearCache();
98+
var methodInfoAfterClear = ReflectionHelper.GetMethodFromAssembly(assemblyName, typeName, methodName, parameterTypeNames);
99+
100+
// Assert
101+
Assert.That(methodInfo, Is.Not.Null);
102+
Assert.That(methodInfoAfterClear, Is.Not.Null);
103+
Assert.That(methodInfo, Is.EqualTo(methodInfoAfterClear));
104+
}
105+
}
106+
}

0 commit comments

Comments
 (0)