Files
Hasebe/Library/PackageCache/com.unity.addressables@42676f2a154e/Tests/Runtime/NamespaceTests.cs
T
2026-09-21 12:15:57 +03:00

108 lines
3.9 KiB
C#

using System;
using System.Linq;
using System.Reflection;
using NUnit.Framework;
using UnityEngine;
namespace AddressableTests
{
/*
* This test exists to verify that all classes are correctly specified within a Unity namespace as developer IDEs
* like to put new files into package folder namespaces like Runtime.Initialization. If this test is failing for
* you make sure it is in a Unity specific namespace.
*/
public class NamespaceTests
{
public static Type[] defaultNamespaceTypes = new Type[]
{
typeof(PackedPlayModeBuildLogs),
#if ENABLE_CCD
typeof(CcdManager),
#endif
};
public static Type[] unityEngineTypes = new Type[]
{
typeof(AssetReferenceUIRestriction),
typeof(AssetReferenceUILabelRestriction),
};
[Test]
public void AllRuntimeClassesAreInCorrectNamespace()
{
string assemblyName = "Unity.Addressables";
// Specify the root namespace you want to check
string rootNamespace = "UnityEngine.AddressableAssets";
// Load the assembly
Assembly assembly = Assembly.Load(assemblyName);
// Get all types in the assembly
Type[] types = assembly.GetTypes();
// Filter for only classes (excluding interfaces, enums, etc.)
var classes = types.Where(t => t.IsClass && t.IsPublic);
foreach (var classType in classes)
{
if (defaultNamespaceTypes.Contains(classType))
{
Assert.IsNull(classType.Namespace,
$"Class {classType.FullName} is not in the default namespace as expected.");
continue;
}
if (unityEngineTypes.Contains(classType))
{
Assert.AreEqual(classType.Namespace, "UnityEngine",
$"Class {classType.FullName} is not in the UnityEngine namespace as expected.");
continue;
}
// Check if the class is in the correct namespace
Assert.IsTrue(IsInNamespaceOrChildren(classType, rootNamespace),
$"Class {classType.FullName} is in {classType.Namespace} which is not in the {rootNamespace} namespace or its children.");
}
}
[Test]
public void AllResourceManagerClassesAreInCorrectNamespace()
{
string assemblyName = "Unity.ResourceManager";
// Specify the root namespace you want to check
string rootNamespace = "UnityEngine.ResourceManagement";
// Load the assembly
Assembly assembly = Assembly.Load(assemblyName);
// Get all types in the assembly
Type[] types = assembly.GetTypes();
// Filter for only classes (excluding interfaces, enums, etc.)
var classes = types.Where(t => t.IsClass && t.IsPublic);
foreach (var classType in classes)
{
if (defaultNamespaceTypes.Contains(classType))
{
Assert.IsNull(classType.Namespace,
$"Class {classType.FullName} is not in the default namespace as expected.");
continue;
}
// Check if the class is in the correct namespace
Assert.IsTrue(IsInNamespaceOrChildren(classType, rootNamespace),
$"Class {classType.FullName} is in {classType.Namespace} which is not in the {rootNamespace} namespace or its children.");
}
}
private bool IsInNamespaceOrChildren(Type type, string rootNamespace)
{
string typeNamespace = type.Namespace;
// Check if the type's namespace starts with the root namespace
return typeNamespace != null && typeNamespace.StartsWith(rootNamespace);
}
}
}