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);
        }
Exemplo n.º 3
0
        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));
        }