public void Apply_Create_CanCreate() { // Set up services. var addressablesEditorService = new FakeAddressablesEditorAdapter(); var assetDatabaseService = new FakeAssetDatabaseAdapter(); var service = new EntryOperationInfoApplyDomainService(addressablesEditorService, assetDatabaseService); // Set up test assets. const string address = "dummyAddress"; const string createdAssetPath = "Assets/Prefabs/prefab_test.prefab"; const string groupName = "TestPrefabs"; var labels = new[] { "DummyLabel1", "DummyLabel2" }; var groupTemplate = ScriptableObject.CreateInstance <AddressableAssetGroupTemplate>(); var groupTemplateGuid = assetDatabaseService.CreateTestAsset("Assets/TestGroupTemplate.asset", groupTemplate); var assetGuid = assetDatabaseService.CreateTestAsset(createdAssetPath, new GameObject()); // Test. var createOrMoveOperationInfo = new EntryCreateOrMoveOperationInfo(createdAssetPath, address, groupName, groupTemplateGuid, labels); var operationInfo = new EntryOperationInfo(createOrMoveOperationInfo, null); service.Apply(operationInfo); var group = addressablesEditorService.Groups.Values.First(); var entry = group.Entries.First(); Assert.That(group.Name, Is.EqualTo(groupName)); Assert.That(entry.Guid, Is.EqualTo(assetGuid)); Assert.That(entry.Address, Is.EqualTo(address)); Assert.That(entry.Labels.Length, Is.EqualTo(2)); Assert.That(entry.Labels, Contains.Item(labels[0])); Assert.That(entry.Labels, Contains.Item(labels[1])); }
/// <summary> /// Build <see cref="EntryCreateOrMoveOperationInfo" /> using <see cref="EntryRule" />. /// </summary> /// <param name="assetPath"></param> /// <param name="rule"></param> /// <param name="groupTemplateGuid"></param> /// <returns></returns> public EntryCreateOrMoveOperationInfo BuildEntryCreateOrMoveInfoByRule(string assetPath, EntryRule rule, string groupTemplateGuid) { Assert.IsNotNull(rule); Assert.IsFalse(string.IsNullOrEmpty(assetPath)); Assert.IsFalse(string.IsNullOrEmpty(_assetDatabaseAdapter.GUIDToAssetPath(groupTemplateGuid))); // Do not process the folder. if (Directory.Exists(assetPath)) { return(null); } // Do not process the invalid rule. if (!rule.Validate(out _)) { return(null); } var addressablePath = _addressablePathGenerateService.GenerateFromAssetPath(assetPath); var regex = new Regex(rule.AddressablePathRule.Value); var match = regex.Match(addressablePath); if (!match.Success) { return(null); } var address = _addressGenerateDomainService.GenerateFromAddressablePath(addressablePath, rule.AddressingMode.Value); var groupName = regex.Replace(addressablePath, rule.GroupNameRule.Value); // Replace '/' to '-' groupName = groupName.Replace("/", "-"); var labels = new List <string>(); if (rule.LabelRules.Value != null && rule.LabelRules.Value.Length >= 1) { var labelRules = rule.LabelRules.Value.Split(','); foreach (var labelRule in labelRules) { if (string.IsNullOrEmpty(labelRule)) { continue; } var label = regex.Replace(addressablePath, labelRule); labels.Add(label); } } var createOrMoveOperationInfo = new EntryCreateOrMoveOperationInfo(assetPath, address, groupName, groupTemplateGuid, labels.ToArray()); return(createOrMoveOperationInfo); }
private bool ApplyCreateOrMoveInfo(EntryCreateOrMoveOperationInfo info) { if (info == null) { throw new ArgumentNullException(nameof(info)); } Assert.IsFalse(string.IsNullOrEmpty(info.AssetPath)); Assert.IsFalse(string.IsNullOrEmpty(info.Address)); Assert.IsFalse(string.IsNullOrEmpty(info.GroupName)); Assert.IsFalse(string.IsNullOrEmpty(info.GroupTemplateGuid)); CreateGroupIfNeeded(info.GroupName, info.GroupTemplateGuid); CreateOrMoveEntry(info.AssetPath, info.GroupName, info.Address, true, info.Labels ?? new string[0]); return(true); }
public void Apply_Move_CanMove() { // Set up services. var addressablesEditorService = new FakeAddressablesEditorAdapter(); var assetDatabaseService = new FakeAssetDatabaseAdapter(); var service = new EntryOperationInfoApplyDomainService(addressablesEditorService, assetDatabaseService); // Set up test assets. const string beforeGroupName = "BeforeGroup"; const string afterGroupName = "AfterGroup"; var beforeGroupInfo = addressablesEditorService.CreateGroup(beforeGroupName, false, false, false, null, null); const string address = "dummyAddress"; const string createdAssetPath = "Assets/Prefabs/prefab_test.prefab"; var groupTemplate = ScriptableObject.CreateInstance <AddressableAssetGroupTemplate>(); var groupTemplateGuid = assetDatabaseService.CreateTestAsset("Assets/TestGroupTemplate.asset", groupTemplate); var assetGuid = assetDatabaseService.CreateTestAsset(createdAssetPath, new GameObject()); addressablesEditorService.CreateOrMoveEntry(assetGuid, beforeGroupInfo.Guid); var beforeGroup = addressablesEditorService.Groups.Values.First(x => x.Name.Equals(beforeGroupName)); Assert.That(beforeGroup.Entries.Count, Is.EqualTo(1)); // Test. var createOrMoveOperationInfo = new EntryCreateOrMoveOperationInfo(createdAssetPath, address, afterGroupName, groupTemplateGuid, null); var operationInfo = new EntryOperationInfo(createOrMoveOperationInfo, null); service.Apply(operationInfo); var afterGroup = addressablesEditorService.Groups.Values.First(x => x.Name.Equals(afterGroupName)); var entry = afterGroup.Entries.First(); Assert.That(beforeGroup.Entries.Count, Is.Zero); Assert.That(afterGroup.Entries.Count, Is.EqualTo(1)); Assert.That(entry.Guid, Is.EqualTo(assetGuid)); Assert.That(entry.Address, Is.EqualTo(address)); }