diff options
| author | cvium <clausvium@gmail.com> | 2021-08-18 20:11:28 +0200 |
|---|---|---|
| committer | cvium <clausvium@gmail.com> | 2021-08-18 20:11:28 +0200 |
| commit | 468283bfb2cd7120b53e32cea67fd0c055d38812 (patch) | |
| tree | 1ccc7a6b302e2ad1cdcc88989bdd65b2581d34c7 /tests/Jellyfin.Server.Implementations.Tests/TypedBaseItem | |
| parent | 663c79cba8be58196ec210bd792388b9cf86830c (diff) | |
Move test to TypedBaseItem folder to avoid conflicts
Diffstat (limited to 'tests/Jellyfin.Server.Implementations.Tests/TypedBaseItem')
| -rw-r--r-- | tests/Jellyfin.Server.Implementations.Tests/TypedBaseItem/BaseItemKindTests.cs | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/tests/Jellyfin.Server.Implementations.Tests/TypedBaseItem/BaseItemKindTests.cs b/tests/Jellyfin.Server.Implementations.Tests/TypedBaseItem/BaseItemKindTests.cs new file mode 100644 index 000000000..63d97b3cb --- /dev/null +++ b/tests/Jellyfin.Server.Implementations.Tests/TypedBaseItem/BaseItemKindTests.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using Jellyfin.Data.Enums; +using Xunit; +using Xunit.Sdk; + +namespace Jellyfin.Server.Implementations.Tests.TypedBaseItem +{ + public class BaseItemKindTests + { + [Theory] + [ClassData(typeof(GetBaseItemDescendants))] + public void EnumParse_GivenValidBaseItemType_ReturnsEnumValue(Type baseItemType) + { + var enumValue = Enum.Parse<BaseItemKind>(baseItemType.Name); + Assert.True(Enum.IsDefined(typeof(BaseItemKind), enumValue)); + } + + [Theory] + [ClassData(typeof(GetBaseItemDescendants))] + public void GetBaseItemKind_WhenCalledAfterDefaultCtor_DoesNotThrow(Type baseItemDescendantType) + { + var defaultConstructor = baseItemDescendantType.GetConstructor(Type.EmptyTypes); + var instance = (MediaBrowser.Controller.Entities.BaseItem)defaultConstructor!.Invoke(null); + var exception = Record.Exception(() => instance.GetBaseItemKind()); + Assert.Null(exception); + } + + private class GetBaseItemDescendants : IEnumerable<object?[]> + { + private static bool IsProjectAssemblyName(string? name) + { + if (name == null) + { + return false; + } + + return name.StartsWith("Jellyfin", StringComparison.OrdinalIgnoreCase) + || name.StartsWith("Emby", StringComparison.OrdinalIgnoreCase) + || name.StartsWith("MediaBrowser", StringComparison.OrdinalIgnoreCase); + } + + public IEnumerator<object?[]> GetEnumerator() + { + var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); + foreach (var assembly in loadedAssemblies) + { + if (IsProjectAssemblyName(assembly.FullName)) + { + var baseItemTypes = assembly.GetTypes() + .Where(targetType => targetType.IsClass + && !targetType.IsAbstract + && targetType.IsSubclassOf(typeof(MediaBrowser.Controller.Entities.BaseItem))); + foreach (var baseItemType in baseItemTypes) + { + yield return new object?[] { baseItemType }; + } + } + } + + var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + if (path == null) + { + throw new NullException("Assembly location is null"); + } + + foreach (string dll in Directory.GetFiles(path, "*.dll")) + { + var assembly = Assembly.LoadFile(dll); + if (IsProjectAssemblyName(assembly.FullName)) + { + var baseItemTypes = assembly.GetTypes() + .Where(targetType => targetType.IsClass + && !targetType.IsAbstract + && targetType.IsSubclassOf(typeof(MediaBrowser.Controller.Entities.BaseItem))); + foreach (var baseItemType in baseItemTypes) + { + yield return new object?[] { baseItemType }; + } + } + } + } + + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + } + } +} |
