public void RunResourcesTestWithAsset(bool IncludeResourcesFolders)
        {
            int builtInResourceCount = ResourcesTestUtility.GetResourcesEntryCount(m_Settings, true);
            var path = GetPath("Resources/test.asset");
            var dir  = Path.GetDirectoryName(path);

            Directory.CreateDirectory(dir);
            AssetDatabase.CreateAsset(UnityEngine.AddressableAssets.Tests.TestObject.Create("test"), path);
            AssetDatabase.SaveAssets();
            m_Settings.FindGroup(g => g.HasSchema <PlayerDataGroupSchema>()).GetSchema <PlayerDataGroupSchema>().IncludeResourcesFolders = IncludeResourcesFolders;
            var locator = new AddressableAssetSettingsLocator(m_Settings);
            var res     = locator.Locate("test", null, out var locations);

            Assert.AreEqual(res, IncludeResourcesFolders);
            if (IncludeResourcesFolders)
            {
                Assert.AreEqual(1 + builtInResourceCount, locations.Count + builtInResourceCount);
            }
            else
            {
                Assert.IsNull(locations);
            }
            AssetDatabase.DeleteAsset(path);
            Directory.Delete(dir);
        }
        public void ProcessPlayerDataSchema_WhenNoResourcesAreIncluded_ShouldNotGenerateAnyResourceLocationsOrProviders()
        {
            using (new HideResourceFoldersScope())
            {
                var resourceFolder = k_SchemaTestFolderPath + "/Resources";
                int builtInPackagesResourceCount = ResourcesTestUtility.GetResourcesEntryCount(m_Settings, true);
                Directory.CreateDirectory(resourceFolder);

                var group  = m_Settings.FindGroup(AddressableAssetSettings.PlayerDataGroupName);
                var schema = group.GetSchema(typeof(PlayerDataGroupSchema)) as PlayerDataGroupSchema;
                schema.IncludeResourcesFolders = true;

                var errorStr = m_BuildScript.ProcessPlayerDataSchema(schema, group, m_BuildContext);
                Assert.True(string.IsNullOrEmpty(errorStr));

                var actualLocations = m_BuildContext.locations.Where(
                    l => l.ResourceType == typeof(GameObject) &&
                    l.Provider == typeof(LegacyResourcesProvider).FullName)
                                      .ToList();
                Assert.AreEqual(0, actualLocations.Count);

                var actualProviders = m_BuildScript.ResourceProviderData
                                      .Where(rpd => rpd.ObjectType.ClassName == typeof(LegacyResourcesProvider).FullName).ToList();
                Assert.AreEqual(builtInPackagesResourceCount > 0 ? 1 : 0, actualProviders.Count);
            }
        }
        public void GatherAllAssets_WhenResourcesExist_RecurseAllIsTrue_ReturnsEntriesRecursivelyForValidFilesOnly()
        {
            using (new HideResourceFoldersScope())
            {
                var resourcePath  = GetAssetPath("Resources");
                var subFolderPath = resourcePath + "/Subfolder";
                Directory.CreateDirectory(subFolderPath);

                var group                 = Settings.FindGroup(AddressableAssetSettings.PlayerDataGroupName);
                var resourceEntry         = Settings.CreateOrMoveEntry(AddressableAssetEntry.ResourcesName, group, false);
                int builtInResourcesCount = ResourcesTestUtility.GetResourcesEntryCount(Settings, true);

                var r1GUID = CreateAsset(resourcePath + "/testResource1.prefab", "testResource1");
                var r2GUID = CreateAsset(subFolderPath + "/testResource2.prefab", "testResource2");

                var entries = new List <AddressableAssetEntry>();
                resourceEntry.GatherAllAssets(entries, false, true, true);

                // Assert
                var subFolderGUID = AssetDatabase.AssetPathToGUID(subFolderPath);
                Assert.AreEqual(2 + builtInResourcesCount, entries.Count);
                Assert.IsTrue(entries.Any(e => e.guid == r1GUID));
                Assert.IsTrue(entries.Any(e => e.guid == r2GUID));
                Assert.IsFalse(entries.Any(e => e.guid == subFolderGUID));

                // Cleanup
                Directory.Delete(resourcePath, true);
            }
        }
        public void ResourcesEntry_AddsCorrectTreeViewItem_ForSubobjects()
        {
            using (new HideResourceFoldersScope())
            {
                //Setup
                string assetPath = "SubFolder/Cube.prefab";
                int    builtInPackagesResourcesCount = ResourcesTestUtility.GetResourcesEntryCount(Settings, true);
                CreatePrefabInResourcesSubFolder(assetPath);
                AddressableAssetEntryTreeView treeView = new AddressableAssetEntryTreeView(
                    new TreeViewState(),
                    new MultiColumnHeaderState(new MultiColumnHeaderState.Column[1]),
                    new AddressableAssetsSettingsGroupEditor(new AddressableAssetsWindow()));

                //Test
                AddressableAssetEntry  entry        = Settings.FindAssetEntry("Resources");
                AssetEntryTreeViewItem treeViewItem = new AssetEntryTreeViewItem(entry, 0);
                treeView.RecurseEntryChildren(entry, treeViewItem, 0);

                //Assert
                Assert.AreEqual(1 + builtInPackagesResourcesCount, treeViewItem.children.Count);
                Assert.AreEqual(assetPath.Replace(".prefab", ""), treeViewItem.children[0].displayName);

                //Cleanup
                AssetDatabase.DeleteAsset("Assets/Resources/");
            }
        }
        public void BuildTree_Resources_CreatesEntriesForAllFilesInResourcesFolders()
        {
            Directory.CreateDirectory(k_TreeViewTestFolderPath + "/Resources");
            Directory.CreateDirectory(k_TreeViewTestFolderPath + "/SubFolder/Resources");
            var resourceGuid1 = CreateAsset(k_TreeViewTestFolderPath + "/Resources/testResource1.prefab");
            var resourceGuid2 = CreateAsset(k_TreeViewTestFolderPath + "/SubFolder/Resources/testResource3.prefab");

            var tree = CreateExpandedTree();

            var resourcesRow   = tree.GetRows().First(c => c.displayName == AddressableAssetEntry.ResourcesName);
            var resourcesCount = ResourcesTestUtility.GetResourcesEntryCount(m_Settings, true);

            Assert.AreEqual(resourcesCount, resourcesRow.children.Count);
            Assert.True(resourcesRow.children.Any(r => r.displayName == GetName(resourceGuid1)));
            Assert.True(resourcesRow.children.Any(r => r.displayName == GetName(resourceGuid2)));
        }
        public void Locator_KeysProperty_Contains_Expected_Keys()
        {
            using (new HideResourceFoldersScope())
            {
                SetupLocatorAssets();
                var locator = new AddressableAssetSettingsLocator(m_Settings);
                if (ExpectedKeys.Count != locator.Keys.Count())
                {
                    Debug.Log("GENERATED");
                    int i = 0;
                    foreach (var k in locator.Keys)
                    {
                        Debug.Log($"[{i}] {k}");
                        i++;
                    }

                    Debug.Log("EXPECTED");
                    i = 0;
                    foreach (var k in ExpectedKeys)
                    {
                        Debug.Log($"[{i}] {k}");
                        i++;
                    }
                }

                var builtInPackageResourcesEntries = ResourcesTestUtility.GetResourcesEntries(m_Settings, true);
                foreach (var key in builtInPackageResourcesEntries)
                {
                    ExpectedKeys.Add(key.guid);
                    ExpectedKeys.Add(key.address);
                }

                Assert.AreEqual(ExpectedKeys.Count, locator.Keys.Count());
                int index = 0;
                foreach (var k in locator.Keys)
                {
                    Assert.IsTrue(ExpectedKeys.Contains(k), $"Cannot find key {k}, index={index} in expected keys");
                    index++;
                }
            }
        }
        public IEnumerator Locator_KeysProperty_Contains_Expected_Keys_ForAllBuildScripts()
        {
            using (new HideResourceFoldersScope())
            {
                SetupLocatorAssets();

                AddressablesDataBuilderInput input = new AddressablesDataBuilderInput(m_Settings);
                input.Logger = new BuildLog();

                var fastMode       = ScriptableObject.CreateInstance <BuildScriptFastMode>();
                var virtualMode    = ScriptableObject.CreateInstance <BuildScriptVirtualMode>();
                var packedMode     = ScriptableObject.CreateInstance <BuildScriptPackedMode>();
                var packedPlayMode = ScriptableObject.CreateInstance <BuildScriptPackedPlayMode>();

                AddressablesImpl fastModeImpl = new AddressablesImpl(new DefaultAllocationStrategy());
                fastModeImpl.AddResourceLocator(new AddressableAssetSettingsLocator(m_Settings));

                var fastModeSettingsPath       = fastMode.BuildData <AddressableAssetBuildResult>(input).OutputPath;
                var virtualModeSettingsPath    = virtualMode.BuildData <AddressableAssetBuildResult>(input).OutputPath;
                var packedModeSettingsPath     = packedMode.BuildData <AddressableAssetBuildResult>(input).OutputPath;
                var packedPlayModeSettingsPath = packedPlayMode.BuildData <AddressableAssetBuildResult>(input).OutputPath;

                AddressablesImpl fmImpl         = new AddressablesImpl(new DefaultAllocationStrategy());
                AddressablesImpl virtualImpl    = new AddressablesImpl(new DefaultAllocationStrategy());
                AddressablesImpl packedImpl     = new AddressablesImpl(new DefaultAllocationStrategy());
                AddressablesImpl packedPlayImpl = new AddressablesImpl(new DefaultAllocationStrategy());

                fmImpl.AddResourceLocator(new AddressableAssetSettingsLocator(m_Settings));
                virtualImpl.AddResourceLocator(new AddressableAssetSettingsLocator(m_Settings));
                packedImpl.AddResourceLocator(new AddressableAssetSettingsLocator(m_Settings));
                packedPlayImpl.AddResourceLocator(new AddressableAssetSettingsLocator(m_Settings));

                var fastModeHandle   = fmImpl.ResourceManager.StartOperation(new FastModeInitializationOperation(fmImpl, m_Settings), default(AsyncOperationHandle));
                var virtualHandle    = virtualImpl.InitializeAsync(virtualModeSettingsPath);
                var packedHandle     = packedImpl.InitializeAsync(packedModeSettingsPath);
                var packedPlayHandle = packedPlayImpl.InitializeAsync(packedPlayModeSettingsPath);
                while (!fastModeHandle.IsDone && !virtualHandle.IsDone && !packedHandle.IsDone &&
                       !packedPlayHandle.IsDone)
                {
                    yield return(null);
                }

                var fastModeKeys    = fmImpl.ResourceLocators.First(l => l.GetType() == typeof(AddressableAssetSettingsLocator)).Keys;
                var virtualModeKeys = virtualImpl.ResourceLocators.First(l => l.GetType() == typeof(AddressableAssetSettingsLocator)).Keys;
                var packedModeKeys  = packedImpl.ResourceLocators.First(l => l.GetType() == typeof(AddressableAssetSettingsLocator)).Keys;
                var packedPlayKeys  = packedPlayImpl.ResourceLocators.First(l => l.GetType() == typeof(AddressableAssetSettingsLocator)).Keys;


                var builtInPackageResourcesEntries = ResourcesTestUtility.GetResourcesEntries(m_Settings, true);
                foreach (var key in builtInPackageResourcesEntries)
                {
                    ExpectedKeys.Add(key.guid);
                    ExpectedKeys.Add(key.address);
                }

                //Get our baseline
                Assert.AreEqual(ExpectedKeys.Count, fastModeKeys.Count());
                foreach (var key in fastModeKeys)
                {
                    Assert.IsTrue(ExpectedKeys.Contains(key));
                }

                //Transitive property to check other build scripts
                CollectionAssert.AreEqual(fastModeKeys, virtualModeKeys);
                CollectionAssert.AreEqual(fastModeKeys, packedPlayKeys);
                CollectionAssert.AreEqual(fastModeKeys, packedModeKeys);
            }
        }