Skip to content

Commit

Permalink
added tests and better type finding
Browse files Browse the repository at this point in the history
  • Loading branch information
Yannis Standaert committed Jan 21, 2025
1 parent dd3d650 commit b7bb414
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Aikido.Zen.Core/Helpers/ReflectionHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public static MethodInfo GetMethodFromAssembly(string assemblyName, string typeN
var typeKey = $"{assemblyName}.{typeName}";
if (!_types.TryGetValue(typeKey, out var type))
{
type = assembly.ExportedTypes.FirstOrDefault(t => t.Name == typeName);
type = assembly.ExportedTypes.FirstOrDefault(t => t.Name == typeName || t.FullName == typeName);
if (type == null) return null;
_types[typeKey] = type;
}
Expand Down
106 changes: 106 additions & 0 deletions Aikido.Zen.Test/ReflectionHelperTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
using Aikido.Zen.Core.Helpers;
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Reflection;

namespace Aikido.Zen.Test
{
/// <summary>
/// Tests for the ReflectionHelper class.
/// </summary>
public class ReflectionHelperTests
{
[SetUp]
public void SetUp()
{
// Clear the cache before each test to ensure a clean state
ReflectionHelper.ClearCache();
}

[Test]
public void GetMethodFromAssembly_ValidMethod_ReturnsMethodInfo()
{
// Arrange
var assemblyName = "System.Private.CoreLib";
var typeName = "System.String";
var methodName = "Contains";
var parameterTypeNames = new[] { "System.String" };

// Act
var methodInfo = ReflectionHelper.GetMethodFromAssembly(assemblyName, typeName, methodName, parameterTypeNames);

// Assert
Assert.That(methodInfo, Is.Not.Null);
Assert.That(methodInfo.Name, Is.EqualTo(methodName));
}

[Test]
public void GetMethodFromAssembly_InvalidAssembly_ReturnsNull()
{
// Arrange
var assemblyName = "NonExistentAssembly";
var typeName = "System.String";
var methodName = "Contains";
var parameterTypeNames = new[] { "System.String" };

// Act
var methodInfo = ReflectionHelper.GetMethodFromAssembly(assemblyName, typeName, methodName, parameterTypeNames);

// Assert
Assert.That(methodInfo, Is.Null);
}

[Test]
public void GetMethodFromAssembly_InvalidType_ReturnsNull()
{
// Arrange
var assemblyName = "System.Private.CoreLib";
var typeName = "NonExistentType";
var methodName = "Contains";
var parameterTypeNames = new[] { "System.String" };

// Act
var methodInfo = ReflectionHelper.GetMethodFromAssembly(assemblyName, typeName, methodName, parameterTypeNames);

// Assert
Assert.That(methodInfo, Is.Null);
}

[Test]
public void GetMethodFromAssembly_InvalidMethod_ReturnsNull()
{
// Arrange
var assemblyName = "System.Private.CoreLib";
var typeName = "System.String";
var methodName = "NonExistentMethod";
var parameterTypeNames = new[] { "System.String" };

// Act
var methodInfo = ReflectionHelper.GetMethodFromAssembly(assemblyName, typeName, methodName, parameterTypeNames);

// Assert
Assert.That(methodInfo, Is.Null);
}

[Test]
public void ClearCache_ClearsAllCachedData()
{
// Arrange
var assemblyName = "System.Private.CoreLib";
var typeName = "System.String";
var methodName = "Contains";
var parameterTypeNames = new[] { "System.String" };

// Act
var methodInfo = ReflectionHelper.GetMethodFromAssembly(assemblyName, typeName, methodName, parameterTypeNames);
ReflectionHelper.ClearCache();
var methodInfoAfterClear = ReflectionHelper.GetMethodFromAssembly(assemblyName, typeName, methodName, parameterTypeNames);

// Assert
Assert.That(methodInfo, Is.Not.Null);
Assert.That(methodInfoAfterClear, Is.Not.Null);
Assert.That(methodInfo, Is.EqualTo(methodInfoAfterClear));
}
}
}

0 comments on commit b7bb414

Please sign in to comment.