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 { }
}