< Summary

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

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
RegexProfanityFilter(...)0%110100%
Filter()0%330100%
ToRegex(...)0%110100%

File(s)

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

#LineLine coverage
 1using System.Collections.Generic;
 2using System.Text;
 3using System.Text.RegularExpressions;
 4using Cysharp.Threading.Tasks;
 5
 6public class RegexProfanityFilter : IProfanityFilter
 7{
 8    private readonly Regex regex;
 9
 6310    public RegexProfanityFilter(IProfanityWordProvider wordProvider)
 11    {
 6312        var explicitWords = ToRegex(wordProvider.GetExplicitWords());
 6313        var nonExplicitWords = ToRegex(wordProvider.GetNonExplicitWords());
 6314        regex = new Regex(@$"\b({explicitWords})\b|({nonExplicitWords})", RegexOptions.IgnoreCase);
 6315    }
 16
 17    public async UniTask<string> Filter(string message)
 18    {
 7919        if (string.IsNullOrEmpty(message)) return message;
 7320        return regex.Replace(message,
 1221            match => new StringBuilder().Append('*', match.Value.Length).ToString());
 7622    }
 23
 12624    private string ToRegex(IEnumerable<string> words) => string.Join("|", words);
 25}