< Summary

Class:DCL.ProfanityFiltering.RegexProfanityFilter
Assembly:ProfanityFiltering
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Helpers/ProfanityFiltering/RegexProfanityFilter.cs
Covered lines:3
Uncovered lines:10
Coverable lines:13
Total lines:38
Line coverage:23% (3 of 13)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
RegexProfanityFilter(...)0%110100%
Initialize()0%2100%
Dispose()0%2100%
Filter()0%12300%
ToRegex(...)0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Helpers/ProfanityFiltering/RegexProfanityFilter.cs

#LineLine coverage
 1using Cysharp.Threading.Tasks;
 2using System.Collections.Generic;
 3using System.Text;
 4using System.Text.RegularExpressions;
 5
 6namespace DCL.ProfanityFiltering
 7{
 8    public class RegexProfanityFilter : IProfanityFilter
 9    {
 10        private readonly IProfanityWordProvider wordProvider;
 11        private Regex regex;
 12
 1313        public RegexProfanityFilter(IProfanityWordProvider wordProvider)
 14        {
 1315            this.wordProvider = wordProvider;
 1316        }
 17
 18        public void Initialize()
 19        {
 020            string explicitWords = ToRegex(wordProvider.GetExplicitWords());
 021            string nonExplicitWords = ToRegex(wordProvider.GetNonExplicitWords());
 022            regex = new Regex(@$"\b({explicitWords})\b|({nonExplicitWords})", RegexOptions.IgnoreCase);
 023        }
 24
 25        public void Dispose()
 26        {
 027        }
 28
 29        public async UniTask<string> Filter(string message)
 30        {
 031            if (string.IsNullOrEmpty(message)) return message;
 032            return regex.Replace(message,
 033                match => new StringBuilder().Append('*', match.Value.Length).ToString());
 034        }
 35
 036        private string ToRegex(IEnumerable<string> words) => string.Join("|", words);
 37    }
 38}