Files
Umbraco-CMS/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Services/AmbiguousEventTests.cs
Bjarke Berg 0f1c2f7022 Ensure no management api for v12 (#14197)
* Remove management api

* Remove actual files
2023-05-04 13:32:41 +02:00

104 lines
2.9 KiB
C#

// Copyright (c) Umbraco.
// See LICENSE for more details.
using System.Reflection;
using System.Text;
using NUnit.Framework;
using Umbraco.Cms.Core.Events;
using Umbraco.Cms.Core.Services;
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Services;
[TestFixture]
public class AmbiguousEventTests
{
[Explicit]
[TestCase(typeof(ContentService))]
[TestCase(typeof(MediaService))]
public void ListAmbiguousEvents(Type serviceType)
{
var typedEventHandler = typeof(TypedEventHandler<,>);
// get all events
var events = serviceType.GetEvents(BindingFlags.Static | BindingFlags.Public);
string TypeName(Type type)
{
if (!type.IsGenericType)
{
return type.Name;
}
var sb = new StringBuilder();
TypeNameSb(type, sb);
return sb.ToString();
}
void TypeNameSb(Type type, StringBuilder sb)
{
var name = type.Name;
var pos = name.IndexOf('`');
name = pos > 0 ? name.Substring(0, pos) : name;
sb.Append(name);
if (!type.IsGenericType)
{
return;
}
sb.Append("<");
var first = true;
foreach (var arg in type.GetGenericArguments())
{
if (first)
{
first = false;
}
else
{
sb.Append(", ");
}
TypeNameSb(arg, sb);
}
sb.Append(">");
}
foreach (var e in events)
{
// only continue if this is a TypedEventHandler
if (!e.EventHandlerType.IsGenericType)
{
continue;
}
var typeDef = e.EventHandlerType.GetGenericTypeDefinition();
if (typedEventHandler != typeDef)
{
continue;
}
// get the event args type
var eventArgsType = e.EventHandlerType.GenericTypeArguments[1];
// try to find the event back, based upon sender type + args type
// exclude -ing (eg Saving) events, we don't deal with them in EventDefinitionBase (they always trigger)
var found = EventNameExtractor.FindEvents(serviceType, eventArgsType, EventNameExtractor.MatchIngNames);
if (found.Length == 1)
{
continue;
}
if (found.Length == 0)
{
Console.WriteLine($"{typeof(ContentService).Name} {e.Name} {TypeName(eventArgsType)} NotFound");
continue;
}
Console.WriteLine($"{typeof(ContentService).Name} {e.Name} {TypeName(eventArgsType)} Ambiguous");
Console.WriteLine("\t" + string.Join(", ", found));
}
}
}