using UnityEditor; using NUnit.Framework; using System.IO; using System.Collections.Generic; using UnityEditor.SceneManagement; using UnityEngine.SceneManagement; using UnityEditor.Build.Pipeline; using System.Linq; using System.Text.RegularExpressions; using UnityEditor.TestTools; using UnityEngine; using System; using UnityEditor.Modules; /// /// Test fixutre for testing bundle naming and hashing /// public abstract class AppendHashToAssetBundleNameTests { const string k_outputBundleDirectory = "Assets/MyBundle"; const string k_scenePath = "Assets/TestScenes.unity"; const string k_bundleNameWithExtension = "Scenes.bundle"; const string k_bundleNamewithoutExtension = "Scenes"; /// /// Setup before each test /// [SetUp] public void Setup() { if (!File.Exists(k_scenePath)) { Scene newScene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene); EditorSceneManager.SaveScene(newScene, k_scenePath); } if (!Directory.Exists(k_outputBundleDirectory)) Directory.CreateDirectory(k_outputBundleDirectory); } // ADDR-3852 - BuildAssetBundleOptions.AppendHashToAssetBundleName returns correct format when using CompatibilityBuildPipeline.BuildOptions /// /// AppendHashToAssetBundleName_Sets_Bundle_Extension_After_HashNumber /// [Test] public void AppendHashToAssetBundleName_Sets_Bundle_Extension_After_HashNumber() { List assetBundleDefinitionList = new List(); { AssetBundleBuild assetBundleBuild = new AssetBundleBuild(); assetBundleBuild.assetBundleName = k_bundleNameWithExtension; assetBundleBuild.assetNames = new string[] { k_scenePath }; assetBundleDefinitionList.Add(assetBundleBuild); } var buildTarget = EditorUserBuildSettings.activeBuildTarget; CompatibilityBuildPipeline.BuildAssetBundles(k_outputBundleDirectory, assetBundleDefinitionList.ToArray(), BuildAssetBundleOptions.AppendHashToAssetBundleName, buildTarget); string getBundleNameWithExtension = Directory.GetFiles(k_outputBundleDirectory) .Select(Path.GetFileName) .FirstOrDefault(name => name.StartsWith(k_bundleNamewithoutExtension)); Assert.IsNotNull(getBundleNameWithExtension, $"No AssetBundle is in the name of {k_bundleNamewithoutExtension}"); bool isValidBundleName = Regex.IsMatch(getBundleNameWithExtension, @"^Scenes_[A-Za-z0-9]{32}\.bundle$"); Assert.IsTrue(isValidBundleName, $"Incorrect AssetBundle name. Expected format: 'Scenes_<32-character-hash>.bundle'. But Actual format was: 'Scenes.bundle_<32-character-hash>'"); } /// /// Cleanup after each test /// [TearDown] public void Cleanup() { EditorSceneManager.NewScene(NewSceneSetup.EmptyScene); // clear active scene if (Directory.Exists(k_outputBundleDirectory)) Directory.Delete(k_outputBundleDirectory, true); File.Delete(k_outputBundleDirectory + ".meta"); AssetDatabase.DeleteAsset(k_scenePath); } } namespace AppendHashToAssetBundleNamePerPlatformTests { /// /// Windows specific tests /// [RequirePlatformSupport(BuildTarget.StandaloneWindows, BuildTarget.StandaloneWindows64)] public class AppendHashToAssetBundleNameTestsWindows : AppendHashToAssetBundleNameTests { } /// /// OSX Specific tests /// [RequirePlatformSupport(BuildTarget.StandaloneOSX)] public class AppendHashToAssetBundleNameTestsTestsOSX : AppendHashToAssetBundleNameTests { } /// /// Linux specific tests /// [RequirePlatformSupport(BuildTarget.StandaloneLinux64)] public class AppendHashToAssetBundleNameTestsLinux : AppendHashToAssetBundleNameTests { } }