Example #1
0
        public void GetTypes_ReturnsOnly_NonAbstractSubTypes()
        {
            var types = AddressableAssetUtility.GetTypes(typeof(TestBaseClass));

            Assert.AreEqual(1, types.Count);
            Assert.AreEqual(types[0], typeof(TestSubClass));
        }
            public override void OnGUI(Rect windowRect)
            {
                GUILayout.Space(5);
                Event evt      = Event.current;
                bool  hitEnter = evt.type == EventType.KeyDown && (evt.keyCode == KeyCode.Return || evt.keyCode == KeyCode.KeypadEnter);

                EditorGUIUtility.labelWidth = 90;
                m_Name  = EditorGUILayout.TextField("Variable Name", m_Name);
                m_Value = EditorGUILayout.TextField("Default Value", m_Value);

                UnityEngine.GUI.enabled = m_Name.Length != 0;
                if (GUILayout.Button("Save") || hitEnter)
                {
                    if (string.IsNullOrEmpty(m_Name))
                    {
                        Debug.LogError("Variable name cannot be empty.");
                    }
                    else if (m_Name != m_Settings.profileSettings.GetUniqueProfileEntryName(m_Name))
                    {
                        Debug.LogError("Profile variable '" + m_Name + "' already exists.");
                    }
                    else
                    {
                        Undo.RecordObject(m_Settings, "Profile Variable " + m_Name + " Created");
                        m_Settings.profileSettings.CreateValue(m_Name, m_Value);
                        AddressableAssetUtility.OpenAssetIfUsingVCIntegration(m_Settings);
                        m_ProfileTreeView.Reload();
                        editorWindow.Close();
                    }
                }
            }
Example #3
0
 public void IsInResourcesHandlesResourcesInWrongContext()
 {
     Assert.IsFalse(AddressableAssetUtility.IsInResources("resources/"));
     Assert.IsFalse(AddressableAssetUtility.IsInResources("/resources"));
     Assert.IsFalse(AddressableAssetUtility.IsInResources("path/resourcesOther/path"));
     Assert.IsFalse(AddressableAssetUtility.IsInResources("/path/res/ources/path"));
 }
Example #4
0
        void SetActiveProfile(object context)
        {
            var n = context as string;

            AddressableAssetSettingsDefaultObject.Settings.activeProfileId = AddressableAssetSettingsDefaultObject.Settings.profileSettings.GetProfileId(n);
            AddressableAssetUtility.OpenAssetIfUsingVCIntegration(AddressableAssetSettingsDefaultObject.Settings);
        }
Example #5
0
        public void GetPackages_ReturnsUnityPackages()
        {
            var packages            = AddressableAssetUtility.GetPackages();
            var addressablesPackage = packages.FirstOrDefault(p => p.name == $"com.unity.addressables");

            Assert.IsNotNull(addressablesPackage);
        }
Example #6
0
 public void IsPathValidBlocksCommonStrings()
 {
     Assert.IsFalse(AddressableAssetUtility.IsPathValidForEntry(string.Empty));
     Assert.IsFalse(AddressableAssetUtility.IsPathValidForEntry(CommonStrings.UnityEditorResourcePath));
     Assert.IsFalse(AddressableAssetUtility.IsPathValidForEntry(CommonStrings.UnityDefaultResourcePath));
     Assert.IsFalse(AddressableAssetUtility.IsPathValidForEntry(CommonStrings.UnityBuiltInExtraPath));
 }
Example #7
0
            protected override TreeViewItem BuildRoot()
            {
                var root = new TreeViewItem(-1, -1);

                var aaSettings = AddressableAssetSettingsDefaultObject.Settings;

                if (aaSettings == null)
                {
                    var message = "Use 'Window->Addressables' to initialize.";
                    root.AddChild(new AssetRefTreeViewItem(message.GetHashCode(), 0, message, string.Empty, string.Empty));
                }
                else
                {
                    if (!string.IsNullOrEmpty(m_NonAddressedAsset))
                    {
                        var item = new AssetRefTreeViewItem(m_NonAddressedAsset.GetHashCode(), 0, "Make Addressable - " + m_NonAddressedAsset, m_GUID, string.Empty);
                        item.icon = m_WarningIcon;
                        root.AddChild(item);
                    }
                    root.AddChild(new AssetRefTreeViewItem(AssetReferenceDrawer.noAssetString.GetHashCode(), 0, AssetReferenceDrawer.noAssetString, string.Empty, string.Empty));
                    var allAssets = new List <AddressableAssetEntry>();
                    aaSettings.GetAllAssets(allAssets, false);
                    foreach (var entry in allAssets)
                    {
                        if (!AddressableAssetUtility.IsInResources(entry.AssetPath) &&
                            m_Drawer.ValidateAsset(entry.AssetPath))
                        {
                            var child = new AssetRefTreeViewItem(entry.address.GetHashCode(), 0, entry.address, entry.guid, entry.AssetPath);
                            root.AddChild(child);
                        }
                    }
                }

                return(root);
            }
        void OnEnable()
        {
            // Single group editing
            if (targets.Length == 1)
            {
                m_AddressableAssetGroupTarget = target as AddressableAssetGroupTemplate;
            }
//            // Multi-group editing
//            if (targets.Length > 1)
//            {
//                m_AddressableAssetGroupTargets = new AddressableAssetGroupTemplate[targets.Length];
//                for (int i = 0; i < targets.Length; i++)
//                {
//                    m_AddressableAssetGroupTargets[i] = targets[i] as AddressableAssetGroupTemplate;
//                }
//                // use item with largest index as base
//                m_AddressableAssetGroupTarget = m_AddressableAssetGroupTargets[m_AddressableAssetGroupTargets.Length - 1];
//                InitializeMultiSelectGroupSchemas();
//            }

            if (m_AddressableAssetGroupTarget != null)
            {
                m_SchemaTypes  = AddressableAssetUtility.GetTypes <AddressableAssetGroupSchema>();
                m_FoldoutState = new bool[m_AddressableAssetGroupTarget.SchemaObjects.Count];
            }

            for (int i = 0; i < m_FoldoutState.Length; i++)
            {
                m_FoldoutState[i] = true;
            }
        }
Example #9
0
 public void IsPathValidBlocksBadExtensions()
 {
     Assert.IsFalse(AddressableAssetUtility.IsPathValidForEntry("Assets/file.cs"));
     Assert.IsFalse(AddressableAssetUtility.IsPathValidForEntry("Assets/file.js"));
     Assert.IsFalse(AddressableAssetUtility.IsPathValidForEntry("Assets/file.boo"));
     Assert.IsFalse(AddressableAssetUtility.IsPathValidForEntry("Assets/file.exe"));
     Assert.IsFalse(AddressableAssetUtility.IsPathValidForEntry("Assets/file.dll"));
 }
Example #10
0
 public void GetPathAndGUIDFromTarget_FromNullObject_Fails()
 {
     Assert.IsFalse(AddressableAssetUtility.GetPathAndGUIDFromTarget(null, out var actualPath, out var actualGUID, out var actualType));
     Assert.IsEmpty(actualPath);
     Assert.IsEmpty(actualGUID);
     Assert.IsEmpty(actualGUID);
     Assert.IsNull(actualType);
 }
Example #11
0
        static void SetAaEntry(AddressableAssetSettings aaSettings, Object[] targets, bool create)
        {
            if (create && aaSettings.DefaultGroup.ReadOnly)
            {
                Debug.LogError("Current default group is ReadOnly.  Cannot add addressable assets to it");
                return;
            }

            Undo.RecordObject(aaSettings, "AddressableAssetSettings");

            var targetInfos = new List <TargetInfo>();

            foreach (var t in targets)
            {
                if (AddressableAssetUtility.GetPathAndGUIDFromTarget(t, out var path, out var guid, out var mainAssetType))
                {
                    targetInfos.Add(new TargetInfo()
                    {
                        Guid = guid, Path = path, MainAssetType = mainAssetType
                    });
                }
            }

            if (!create)
            {
                targetInfos.ForEach(ti =>
                {
                    AddressableAssetGroup group = aaSettings.FindAssetEntry(ti.Guid).parentGroup;
                    aaSettings.RemoveAssetEntry(ti.Guid);
                    AddressableAssetUtility.OpenAssetIfUsingVCIntegration(group);
                });
            }
            else
            {
                var resourceTargets = targetInfos.Where(ti => AddressableAssetUtility.IsInResources(ti.Path));
                var resourcePaths   = resourceTargets.Select(t => t.Path).ToList();
                var resourceGuids   = resourceTargets.Select(t => t.Guid).ToList();
                AddressableAssetUtility.SafeMoveResourcesToGroup(aaSettings, aaSettings.DefaultGroup, resourcePaths, resourceGuids);

                var entriesAdded     = new List <AddressableAssetEntry>();
                var modifiedGroups   = new HashSet <AddressableAssetGroup>();
                var otherTargetInfos = targetInfos.Except(resourceTargets);
                foreach (var info in otherTargetInfos)
                {
                    var e = aaSettings.CreateOrMoveEntry(info.Guid, aaSettings.DefaultGroup, false, false);
                    entriesAdded.Add(e);
                    modifiedGroups.Add(e.parentGroup);
                }

                foreach (var g in modifiedGroups)
                {
                    g.SetDirty(AddressableAssetSettings.ModificationEvent.EntryMoved, entriesAdded, false, true);
                    AddressableAssetUtility.OpenAssetIfUsingVCIntegration(g);
                }

                aaSettings.SetDirty(AddressableAssetSettings.ModificationEvent.EntryMoved, entriesAdded, true, false);
            }
        }
        public void GetPathAndGUIDFromTarget_FromPrefabObject_Fails()
        {
            var obj = GameObject.CreatePrimitive(PrimitiveType.Cube);

            Assert.IsFalse(AddressableAssetUtility.TryGetPathAndGUIDFromTarget(obj, out var actualPath, out var actualGUID));
            Assert.IsEmpty(actualPath);
            Assert.IsEmpty(actualGUID);
            Assert.IsEmpty(actualGUID);
        }
        static List <Type> GetTypes(FieldInfo fieldInfo)
        {
            var attrs = fieldInfo.GetCustomAttributes(typeof(SerializedTypeRestrictionAttribute), false);

            if (attrs.Length == 0 || !(attrs[0] is SerializedTypeRestrictionAttribute))
            {
                return(null);
            }
            return(AddressableAssetUtility.GetTypes((attrs[0] as SerializedTypeRestrictionAttribute).type));
        }
Example #14
0
        public void GetPathAndGUIDFromTarget_FromPrefabAsset_ReturnsCorrectPathGUIDType()
        {
            var expectedGUID = CreateTestPrefabAsset(GetAssetPath("prefab1.prefab"), "prefab1");
            var expectedPath = AssetDatabase.GUIDToAssetPath(expectedGUID);
            var obj          = AssetDatabase.LoadAssetAtPath <UnityEngine.Object>(expectedPath);

            Assert.IsTrue(AddressableAssetUtility.GetPathAndGUIDFromTarget(obj, out var actualPath, out var actualGUID, out var actualType));
            Assert.AreEqual(expectedPath, actualPath);
            Assert.AreEqual(expectedGUID, actualGUID);
            Assert.AreEqual(typeof(GameObject), actualType);
            AssetDatabase.DeleteAsset(expectedPath);
        }
 internal void DataSourceDropdownValueChanged(object sender, ProfileDataSourceDropdownWindow.DropdownWindowEventArgs e)
 {
     m_CustomGroupTypes[e.GroupType.GroupTypePrefix] = e.IsCustom;
     if (!e.IsCustom)
     {
         var selectedProfile = GetSelectedProfile();
         Undo.RecordObject(settings, "Variable value changed");
         settings.profileSettings.SetValue(selectedProfile.id, e.GroupType.GetName(e.GroupType.GetVariableBySuffix(AddressableAssetSettings.kBuildPath)), e.Option.BuildPath);
         settings.profileSettings.SetValue(selectedProfile.id, e.GroupType.GetName(e.GroupType.GetVariableBySuffix(AddressableAssetSettings.kLoadPath)), e.Option.LoadPath);
         AddressableAssetUtility.OpenAssetIfUsingVCIntegration(settings);
     }
 }
Example #16
0
        static void SetAaEntry(AddressableAssetSettings aaSettings, Object[] targets, bool create)
        {
            if (create && aaSettings.DefaultGroup.ReadOnly)
            {
                Debug.LogError("Current default group is ReadOnly.  Cannot add addressable assets to it");
                return;
            }

            Undo.RecordObject(aaSettings, "AddressableAssetSettings");
            string path;
            var    guid = string.Empty;
            //if (create || EditorUtility.DisplayDialog("Remove Addressable Asset Entries", "Do you want to remove Addressable Asset entries for " + targets.Length + " items?", "Yes", "Cancel"))
            {
                var entriesAdded   = new List <AddressableAssetEntry>();
                var modifiedGroups = new HashSet <AddressableAssetGroup>();

                Type mainAssetType;
                foreach (var t in targets)
                {
                    if (AddressableAssetUtility.GetPathAndGUIDFromTarget(t, out path, ref guid, out mainAssetType))
                    {
                        if (create)
                        {
                            if (AddressableAssetUtility.IsInResources(path))
                            {
                                AddressableAssetUtility.SafeMoveResourcesToGroup(aaSettings, aaSettings.DefaultGroup, new List <string> {
                                    path
                                });
                            }
                            else
                            {
                                var e = aaSettings.CreateOrMoveEntry(guid, aaSettings.DefaultGroup, false, false);
                                entriesAdded.Add(e);
                                modifiedGroups.Add(e.parentGroup);
                            }
                        }
                        else
                        {
                            aaSettings.RemoveAssetEntry(guid);
                        }
                    }
                }

                if (create)
                {
                    foreach (var g in modifiedGroups)
                    {
                        g.SetDirty(AddressableAssetSettings.ModificationEvent.EntryMoved, entriesAdded, false, true);
                    }
                    aaSettings.SetDirty(AddressableAssetSettings.ModificationEvent.EntryMoved, entriesAdded, true, false);
                }
            }
        }
        public void GetPathAndGUIDFromTarget_FromPrefabAsset_ReturnsCorrectPathGUIDType()
        {
            var expectedGUID = CreateTestPrefabAsset(GetAssetPath("prefab1.prefab"), "prefab1");
            var expectedPath = AssetDatabase.GUIDToAssetPath(expectedGUID);
            var obj          = AssetDatabase.LoadAssetAtPath <UnityEngine.Object>(expectedPath);

            Assert.IsTrue(AddressableAssetUtility.IsPathValidForEntry(expectedPath), $"Asset is not a valid Addressable Entry path : {expectedPath}");
            Assert.IsTrue(AddressableAssetUtility.TryGetPathAndGUIDFromTarget(obj, out var actualPath, out var actualGUID), "Could not get Path and Guid from Target at expectedPath " + expectedPath);
            Assert.AreEqual(expectedPath, actualPath);
            Assert.AreEqual(expectedGUID, actualGUID);
            AssetDatabase.DeleteAsset(expectedPath);
        }
        void UseProfile(object context)
        {
            List <TreeViewItem> selectedNodes = context as List <TreeViewItem>;

            if (selectedNodes != null && selectedNodes.Count >= 1)
            {
                Undo.RecordObject(m_Window.settings, "Active Profile Changed");
                var    item            = selectedNodes.First();
                string activeProfileId = m_TreeIndexToBuildProfileMap[item.id].id;
                m_Window.settings.activeProfileId = activeProfileId;
                AddressableAssetUtility.OpenAssetIfUsingVCIntegration(m_Window.settings);
            }
        }
Example #19
0
        internal void OfferToConvert()
        {
            var bundleList = AssetDatabase.GetAllAssetBundleNames();

            if (EditorUtility.DisplayDialog("Legacy Bundles Detected", "We have detected the use of legacy bundles in this project.  Would you like to auto-convert those into Addressables? \nThis will take each asset bundle you have defined (we have detected " + bundleList.Length + " bundles), create an Addressables group with a matching name, then move all assets from those bundles into corresponding groups.  This will remove the asset bundle assignment from all assets, and remove all asset bundle definitions from this project.  This cannot be undone.", "Convert", "Ignore"))
            {
                AddressableAssetUtility.ConvertAssetBundlesToAddressables();
            }
            else
            {
                m_IgnoreLegacyBundles = true;
            }
        }
 public void IsPathValidAllowsBasicTypes()
 {
     Assert.IsTrue(AddressableAssetUtility.IsPathValidForEntry("Assets/file.asset"));
     Assert.IsTrue(AddressableAssetUtility.IsPathValidForEntry("Assets/file.png"));
     Assert.IsTrue(AddressableAssetUtility.IsPathValidForEntry("Assets/file.bin"));
     Assert.IsTrue(AddressableAssetUtility.IsPathValidForEntry("Assets/file.txt"));
     Assert.IsTrue(AddressableAssetUtility.IsPathValidForEntry("Assets/file.prefab"));
     Assert.IsTrue(AddressableAssetUtility.IsPathValidForEntry("Assets/file.mat"));
     Assert.IsTrue(AddressableAssetUtility.IsPathValidForEntry("Assets/file.wav"));
     Assert.IsTrue(AddressableAssetUtility.IsPathValidForEntry("Assets/file.jpg"));
     Assert.IsTrue(AddressableAssetUtility.IsPathValidForEntry("Assets/file.avi"));
     Assert.IsTrue(AddressableAssetUtility.IsPathValidForEntry("Assets/file.controller"));
 }
Example #21
0
        /// <summary>
        /// Stops the given <see cref="IHostingService"/>, unregisters callbacks, and removes it from management. This
        /// function does nothing if the service is not being managed by this <see cref="HostingServicesManager"/>
        /// </summary>
        /// <param name="svc"></param>
        public void RemoveHostingService(IHostingService svc)
        {
            if (!m_HostingServiceInfoMap.ContainsKey(svc))
            {
                return;
            }

            svc.StopHostingService();
            m_Settings.profileSettings.UnregisterProfileStringEvaluationFunc(svc.EvaluateProfileString);
            m_HostingServiceInfoMap.Remove(svc);
            m_Settings.SetDirty(AddressableAssetSettings.ModificationEvent.HostingServicesManagerModified, this, true, true);
            AddressableAssetUtility.OpenAssetIfUsingVCIntegration(m_Settings);
        }
 bool SafeMoveResourcesToGroup(AddressableAssetGroup targetGroup, List<AssetEntryTreeViewItem> itemList)
 {
     var guids = new List<string>();
     var paths = new List<string>();
     foreach (AssetEntryTreeViewItem child in itemList)
     {
         if (child != null)
         {
             guids.Add(child.entry.guid);
             paths.Add(child.entry.AssetPath);
         }
     }
     return AddressableAssetUtility.SafeMoveResourcesToGroup(m_Editor.settings, targetGroup, paths, guids);
 }
Example #23
0
        void OnEnable()
        {
            m_GroupTarget = target as AddressableAssetGroup;
            if (m_GroupTarget != null)
            {
                m_GroupTarget.Settings.OnModification += OnSettingsModification;
                m_SchemaTypes  = AddressableAssetUtility.GetTypes <AddressableAssetGroupSchema>();
                m_FoldoutState = new bool[m_GroupTarget.Schemas.Count];
            }

            for (int i = 0; i < m_FoldoutState.Length; i++)
            {
                m_FoldoutState[i] = true;
            }
        }
        void DeletePathPair(ProfileGroupType groupType)
        {
            var buildPathData = settings.profileSettings.GetProfileDataByName(groupType.GroupTypePrefix + ProfileGroupType.k_PrefixSeparator + AddressableAssetSettings.kBuildPath);
            var loadPathData  = settings.profileSettings.GetProfileDataByName(groupType.GroupTypePrefix + ProfileGroupType.k_PrefixSeparator + AddressableAssetSettings.kLoadPath);

            if (loadPathData == default(AddressableAssetProfileSettings.ProfileIdData) || buildPathData == default(AddressableAssetProfileSettings.ProfileIdData))
            {
                Debug.LogError("An error occured while getting one of the path pair variables.");
                return;
            }
            Undo.RecordObject(settings, "Profile Variable Deleted");
            settings.profileSettings.RemoveValue(buildPathData.Id);
            settings.profileSettings.RemoveValue(loadPathData.Id);
            AddressableAssetUtility.OpenAssetIfUsingVCIntegration(settings);
        }
Example #25
0
        void OnEnable()
        {
            m_AddressableAssetGroupTarget = target as AddressableAssetGroupTemplate;

            if (m_AddressableAssetGroupTarget != null)
            {
                m_SchemaTypes  = AddressableAssetUtility.GetTypes <AddressableAssetGroupSchema>();
                m_FoldoutState = new bool[m_AddressableAssetGroupTarget.SchemaObjects.Count];
            }

            for (int i = 0; i < m_FoldoutState.Length; i++)
            {
                m_FoldoutState[i] = true;
            }
        }
            public override void OnGUI(Rect windowRect)
            {
                GUILayout.BeginArea(windowRect);

                Event evt      = Event.current;
                bool  hitEnter = evt.type == EventType.KeyDown && (evt.keyCode == KeyCode.Return || evt.keyCode == KeyCode.KeypadEnter);

                m_NewName = GUILayout.TextField(m_NewName);
                if (GUILayout.Button("Save") || hitEnter)
                {
                    if (string.IsNullOrEmpty(m_NewName))
                    {
                        Debug.LogError("Path pair prefix cannot be empty.");
                    }
                    else if (m_NewName == m_ProfileGroupType.GroupTypePrefix)
                    {
                        editorWindow.Close();
                    }
                    else if (VariableWithNewPrefixAlreadyExists())
                    {
                        Debug.LogError("One or more build or load path variables with prefix '" + m_NewName + "' already exist. Please rename them or pick a different prefix.");
                    }
                    else if (m_NewName.Trim().Length == 0) // new name cannot only contain spaces
                    {
                        Debug.LogError("Path pair prefix cannot be only spaces");
                    }
                    else
                    {
                        var loadPathVariableData  = m_Settings.profileSettings.GetProfileDataByName(m_ProfileGroupType.GroupTypePrefix + ProfileGroupType.k_PrefixSeparator + AddressableAssetSettings.kLoadPath);
                        var buildPathVariableData = m_Settings.profileSettings.GetProfileDataByName(m_ProfileGroupType.GroupTypePrefix + ProfileGroupType.k_PrefixSeparator + AddressableAssetSettings.kBuildPath);
                        if (loadPathVariableData == default(AddressableAssetProfileSettings.ProfileIdData) || buildPathVariableData == default(AddressableAssetProfileSettings.ProfileIdData))
                        {
                            Debug.LogError("Valid path pair to rename not found.");
                        }
                        else
                        {
                            Undo.RecordObject(m_Settings, "Path pair prefix Renamed");
                            m_ProfileGroupType.GroupTypePrefix = m_NewName;
                            loadPathVariableData.SetName(m_ProfileGroupType.GroupTypePrefix + ProfileGroupType.k_PrefixSeparator + AddressableAssetSettings.kLoadPath, m_Settings.profileSettings);
                            buildPathVariableData.SetName(m_ProfileGroupType.GroupTypePrefix + ProfileGroupType.k_PrefixSeparator + AddressableAssetSettings.kBuildPath, m_Settings.profileSettings);
                            AddressableAssetUtility.OpenAssetIfUsingVCIntegration(m_Settings, true);
                            editorWindow.Close();
                        }
                    }
                }
                GUILayout.EndArea();
            }
        public void GetMD5Hash_ReturnsValidMD5Hash()
        {
            const string FilePath     = "test_file";
            var          file         = File.Create(FilePath);
            var          content      = "12345";
            var          contentBytes = Encoding.ASCII.GetBytes(content);

            file.Write(contentBytes, 0, contentBytes.Length);
            file.Close();

            var hashString = AddressableAssetUtility.GetMd5Hash(FilePath);

            File.Delete(FilePath);

            Assert.NotNull(hashString);
            Assert.AreEqual("827ccb0eea8a706c4c34a16891f84e7b", hashString);
        }
        public void SafeMoveResourcesToGroup_ResourcesMovedToNewFolderAndGroup()
        {
            var folderPath = AssetDatabase.GUIDToAssetPath(AssetDatabase.CreateFolder(TestFolder, "Resources"));
            var g1         = CreateTestPrefabAsset(folderPath + "/p1.prefab", "p1");
            var g2         = CreateTestPrefabAsset(folderPath + "/p2.prefab", "p2");

            Assert.AreEqual(0, Settings.DefaultGroup.entries.Count);
            var result = AddressableAssetUtility.SafeMoveResourcesToGroup(Settings, Settings.DefaultGroup, new List <string> {
                AssetDatabase.GUIDToAssetPath(g1), AssetDatabase.GUIDToAssetPath(g2)
            }, null, false);

            Assert.IsTrue(result);
            Assert.AreEqual(2, Settings.DefaultGroup.entries.Count);
            var ap = $"{TestFolder}_Resources_moved";

            Assert.IsTrue(AssetDatabase.IsValidFolder($"{TestFolder}/Resources_moved"));
        }
        public void AreConvertableEditorAssemblyTypesConverted()
        {
            Assembly asm = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(a => a.FullName == "UnityEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null");
            var      conversionMapping = new Dictionary <Type, Type>()
            {
                { asm.GetType("UnityEditor.Audio.AudioMixerGroupController"), typeof(AudioMixerGroup) },
                { asm.GetType("UnityEditor.Audio.AudioMixerController"), typeof(AudioMixer) },
                { typeof(UnityEditor.SceneAsset), typeof(UnityEngine.ResourceManagement.ResourceProviders.SceneInstance) },
                { typeof(UnityEditor.Animations.AnimatorController), typeof(RuntimeAnimatorController) }
            };

            foreach (Type key in conversionMapping.Keys)
            {
                var type = AddressableAssetUtility.MapEditorTypeToRuntimeType(key, false);
                Assert.AreEqual(type, conversionMapping[key]);
            }
        }
        //Creates a new BuildProfile and reloads the ProfilesPane
        void NewProfile()
        {
            var uniqueProfileName = settings.profileSettings.GetUniqueProfileName("New Profile");

            if (!string.IsNullOrEmpty(uniqueProfileName))
            {
                Undo.RecordObject(settings, "New Profile Created");
                //Either copy values from the selected profile, or if there is no selected profile, copy from the default
                string idToCopyFrom = GetSelectedProfile() != null
                    ? GetSelectedProfile().id
                    : settings.profileSettings.profiles[0].id;

                settings.profileSettings.AddProfile(uniqueProfileName, idToCopyFrom);
                AddressableAssetUtility.OpenAssetIfUsingVCIntegration(settings);
                m_ProfileTreeView.Reload();
            }
        }