< 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:11
Coverable lines:14
Total lines:40
Line coverage:21.4% (3 of 14)
Covered branches:0
Total branches:0
Covered methods:1
Total methods:5
Method coverage:20% (1 of 5)

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;
 5using System.Threading;
 6
 7namespace DCL.ProfanityFiltering
 8{
 9    public class RegexProfanityFilter : IProfanityFilter
 10    {
 11        private readonly IProfanityWordProvider wordProvider;
 12        private Regex regex;
 13
 1914        public RegexProfanityFilter(IProfanityWordProvider wordProvider)
 15        {
 1916            this.wordProvider = wordProvider;
 1917        }
 18
 19        public void Initialize()
 20        {
 021            string explicitWords = ToRegex(wordProvider.GetExplicitWords());
 022            string nonExplicitWords = ToRegex(wordProvider.GetNonExplicitWords());
 023            regex = new Regex(@$"\b({explicitWords})\b|({nonExplicitWords})", RegexOptions.IgnoreCase);
 024        }
 25
 26        public void Dispose()
 27        {
 028        }
 29
 30        public async UniTask<string> Filter(string message, CancellationToken cancellationToken)
 31        {
 032            cancellationToken.ThrowIfCancellationRequested();
 033            if (string.IsNullOrEmpty(message)) return message;
 034            return regex.Replace(message,
 035                match => new StringBuilder().Append('*', match.Value.Length).ToString());
 036        }
 37
 038        private string ToRegex(IEnumerable<string> words) => string.Join("|", words);
 39    }
 40}