Update name, fix tests

This commit is contained in:
jetsparrow 2023-03-14 00:21:55 +03:00
parent 4090adef78
commit 98f33bba8b
29 changed files with 186 additions and 138 deletions

View File

@ -1,45 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Extensions.Options;
using Xunit;
namespace AntiAntiSwearingBot.Tests
{
public class DetectTests
{
Unbleeper ubl { get; }
SearchDictionary dict { get; }
public DetectTests()
{
dict = new SearchDictionary(OptionsMonitor );
ubl = new Unbleeper(dict, cfg.Unbleeper);
}
[Theory]
[InlineData("бл**ь", "*блядь")]
[InlineData("ж**а", "*жопа")]
public void UnbleepSimpleSwears(string word, string expected)
{
var unbleep = ubl.UnbleepSwears(word).TrimEnd(Environment.NewLine.ToCharArray());
Assert.Equal(expected, unbleep);
}
[Theory]
[InlineData("Просто пи**ец, как хочется кушать.", "*пиздец")]
[InlineData("Ужас на*уй!", "*нахуй")]
[InlineData("еб*ть-колотить", "*ебать")]
[InlineData("еб*ть—колотить", "*ебать")]
[InlineData("Получилась полная х**ня: даже не знаю, что и сказать, б**.", "*херня\n**бля")]
[InlineData("Сергей опять вы**нулся своим знанием тонкостей русского языка; в окно еб*шил стылый ноябрьский ветер. ", "*выебнулся\n**ебашил")]
public void DetectWordsWithPunctuation(string text, string expected)
{
var unbleep = ubl.UnbleepSwears(text).Replace("\r\n", "\n").Trim();
Assert.Equal(expected, unbleep);
}
}
}

View File

@ -1,90 +0,0 @@
using System;
using Xunit;
namespace AntiAntiSwearingBot.Tests
{
public class FilterTests
{
Unbleeper ubl { get; }
Config cfg { get; }
SearchDictionary dict { get; }
public FilterTests()
{
cfg = Config.Load<Config>("aasb.cfg.json", "aasb.cfg.secret.json");
dict = new SearchDictionary(cfg);
ubl = new Unbleeper(dict, cfg.Unbleeper);
}
[Theory]
[InlineData("*")]
[InlineData("**#")]
[InlineData("@*#")]
public void IgnoreShortGrawlixesWithoutLetters(string text)
{
if (text.Length < cfg.Unbleeper.MinAmbiguousWordLength)
Assert.Null(ubl.UnbleepSwears(text));
}
[Theory]
[InlineData("*")]
[InlineData("*б")]
[InlineData("х#")]
public void IgnoreShortWords(string text)
{
if (text.Length < cfg.Unbleeper.MinWordLength)
Assert.Null(ubl.UnbleepSwears(text));
}
[Theory]
[InlineData("@pvkuznetsov https://github.com/jacksondunstan/UnityNativeScripting")]
[InlineData("@JohnnyMnemonic")]
[InlineData("@Artyom по поводу")]
[InlineData("@Laima прошу блины!")]
[InlineData("эй админ @harry0xfefecaca верни бота")]
public void IgnoreMentions(string text) => Assert.Null(ubl.UnbleepSwears(text));
[Theory]
[InlineData("x - floor(abs(x)) * sign(x) -- вроде такая формула для frac(x)")]
public void IgnoresWeirdShit(string text) => Assert.Null(ubl.UnbleepSwears(text));
[Theory]
[InlineData("/poll")]
[InlineData("/roll 2d6")]
[InlineData("/award medal")]
[InlineData("/status@MinecraftServerBot")]
[InlineData("/broadcast@MinecraftServerBot пи#*ец вы понастроили тут")]
[InlineData("/ban@MinecraftServerBot @dirty_johnny86")]
public void IgnoreCommands(string text) => Assert.Null(ubl.UnbleepSwears(text));
[Theory]
[InlineData("#UEeğitimKarazin")]
[InlineData("#KöksalBabaCafeTrabzonda")]
[InlineData("#ZehraHanımSüresizeKadro")]
[InlineData("#define")]
[InlineData("#ifndef")]
[InlineData("#trashtag")]
[InlineData("#MeToo")]
[InlineData("#инстаграм")]
[InlineData("#битваБлогеров")]
[InlineData("#зенитахмат")]
[InlineData("#HappyKWONJIYONGDay")]
[InlineData("#MCITOT")]
[InlineData("#ТамбовКраснодар")]
[InlineData("#JRockконвент2019")]
[InlineData("#DonaldTrumpAgain")]
[InlineData("#ZodiacKillerStrikesAgain")]
[InlineData("#ThanksObama")]
[InlineData("#BalıkBurcuKızıylaEvlenmek")]
public void IgnoreHashtags(string text) => Assert.Null(ubl.UnbleepSwears(text));
[Theory]
[InlineData("ipetrov@mail.ru")]
[InlineData("ipetrov@русская.mail.ru")]
[InlineData("ипетров@почта.рф")]
[InlineData("admin@local")]
[InlineData("админ@local")]
public void IgnoreEmails(string text) => Assert.Null(ubl.UnbleepSwears(text));
}
}

View File

@ -0,0 +1,22 @@
namespace AntiAntiSwearingBot.Tests;
public static class DefaultSettings
{
public static SearchDictionarySettings SearchDictionary { get; }
public static UnbleeperSettings Unbleeper { get; }
static DefaultSettings()
{
Unbleeper = new UnbleeperSettings
{
BleepedSwearsRegex = @"[а-яА-ЯёЁ@\\*#]+",
MinWordLength = 3,
MinAmbiguousWordLength = 5
};
SearchDictionary = new SearchDictionarySettings
{
DictionaryPath = "dict/ObsceneDictionaryRu.txt"
};
}
}

View File

@ -0,0 +1,42 @@
using System;
using Microsoft.Extensions.Options;
using Xunit;
namespace AntiAntiSwearingBot.Tests;
public class DetectTests
{
Unbleeper ubl { get; }
SearchDictionary dict { get; }
public DetectTests()
{
dict = new SearchDictionary(MockOptionsMonitor.Create(DefaultSettings.SearchDictionary));
ubl = new Unbleeper(dict, Options.Create(DefaultSettings.Unbleeper));
}
[Theory]
[InlineData("бл**ь", "*блядь")]
[InlineData("ж**а", "*жопа")]
public void UnbleepSimpleSwears(string word, string expected)
{
var unbleep = ubl.UnbleepSwears(word).TrimEnd(Environment.NewLine.ToCharArray());
Assert.Equal(expected, unbleep);
}
[Theory]
[InlineData("Просто пи**ец, как хочется кушать.", "*пиздец")]
[InlineData("Ужас на*уй!", "*нахуй")]
[InlineData("еб*ть-колотить", "*ебать")]
[InlineData("еб*ть—колотить", "*ебать")]
[InlineData("Получилась полная х**ня: даже не знаю, что и сказать, б**.", "*херня\n**бля")]
[InlineData("Сергей опять вы**нулся своим знанием тонкостей русского языка; в окно еб*шил стылый ноябрьский ветер. ", "*выебнулся\n**ебашил")]
public void DetectWordsWithPunctuation(string text, string expected)
{
var unbleep = ubl.UnbleepSwears(text).Replace("\r\n", "\n").Trim();
Assert.Equal(expected, unbleep);
}
}

View File

@ -0,0 +1,88 @@
using Microsoft.Extensions.Options;
using Xunit;
namespace AntiAntiSwearingBot.Tests;
public class FilterTests
{
Unbleeper ubl { get; }
SearchDictionary dict { get; }
public FilterTests()
{
dict = new SearchDictionary(MockOptionsMonitor.Create(DefaultSettings.SearchDictionary));
ubl = new Unbleeper(dict, Options.Create(DefaultSettings.Unbleeper));
}
[Theory]
[InlineData("*")]
[InlineData("**#")]
[InlineData("@*#")]
public void IgnoreShortGrawlixesWithoutLetters(string text)
{
if (text.Length < DefaultSettings.Unbleeper.MinAmbiguousWordLength)
Assert.Null(ubl.UnbleepSwears(text));
}
[Theory]
[InlineData("*")]
[InlineData("*б")]
[InlineData("х#")]
public void IgnoreShortWords(string text)
{
if (text.Length < DefaultSettings.Unbleeper.MinWordLength)
Assert.Null(ubl.UnbleepSwears(text));
}
[Theory]
[InlineData("@pvkuznetsov https://github.com/jacksondunstan/UnityNativeScripting")]
[InlineData("@JohnnyMnemonic")]
[InlineData("@Artyom по поводу")]
[InlineData("@Laima прошу блины!")]
[InlineData("эй админ @harry0xfefecaca верни бота")]
public void IgnoreMentions(string text) => Assert.Null(ubl.UnbleepSwears(text));
[Theory]
[InlineData("x - floor(abs(x)) * sign(x) -- вроде такая формула для frac(x)")]
public void IgnoresWeirdShit(string text) => Assert.Null(ubl.UnbleepSwears(text));
[Theory]
[InlineData("/poll")]
[InlineData("/roll 2d6")]
[InlineData("/award medal")]
[InlineData("/status@MinecraftServerBot")]
[InlineData("/broadcast@MinecraftServerBot пи#*ец вы понастроили тут")]
[InlineData("/ban@MinecraftServerBot @dirty_johnny86")]
public void IgnoreCommands(string text) => Assert.Null(ubl.UnbleepSwears(text));
[Theory]
[InlineData("#UEeğitimKarazin")]
[InlineData("#KöksalBabaCafeTrabzonda")]
[InlineData("#ZehraHanımSüresizeKadro")]
[InlineData("#define")]
[InlineData("#ifndef")]
[InlineData("#trashtag")]
[InlineData("#MeToo")]
[InlineData("#инстаграм")]
[InlineData("#битваБлогеров")]
[InlineData("#зенитахмат")]
[InlineData("#HappyKWONJIYONGDay")]
[InlineData("#MCITOT")]
[InlineData("#ТамбовКраснодар")]
[InlineData("#JRockконвент2019")]
[InlineData("#DonaldTrumpAgain")]
[InlineData("#ZodiacKillerStrikesAgain")]
[InlineData("#ThanksObama")]
[InlineData("#BalıkBurcuKızıylaEvlenmek")]
public void IgnoreHashtags(string text) => Assert.Null(ubl.UnbleepSwears(text));
[Theory]
[InlineData("ipetrov@mail.ru")]
[InlineData("ipetrov@русская.mail.ru")]
[InlineData("ипетров@почта.рф")]
[InlineData("admin@local")]
[InlineData("админ@local")]
public void IgnoreEmails(string text) => Assert.Null(ubl.UnbleepSwears(text));
}

View File

@ -13,7 +13,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\AntiAntiSwearingBot\AntiAntiSwearingBot.csproj" /> <ProjectReference Include="..\Jetsparrow.Aasb\Jetsparrow.Aasb.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,31 @@
using System;
using Microsoft.Extensions.Options;
public static class MockOptionsMonitor
{
public static IOptionsMonitor<T> Create<T>(T value) where T : class
=> new MockOptionsMonitor<T>(value);
}
public class MockOptionsMonitor<T> : IOptionsMonitor<T> where T : class
{
public MockOptionsMonitor(T value)
{
CurrentValue = value;
}
public T CurrentValue { get; }
public T Get(string name) => CurrentValue;
public IDisposable OnChange(Action<T, string> listener)
{
return new DummyDisposable();
}
class DummyDisposable : IDisposable
{
public void Dispose() { }
}
}

View File

@ -3,9 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15 # Visual Studio 15
VisualStudioVersion = 15.0.28010.2036 VisualStudioVersion = 15.0.28010.2036
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AntiAntiSwearingBot", "AntiAntiSwearingBot\AntiAntiSwearingBot.csproj", "{66AFFD7B-5B2D-4C85-8523-770702255511}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Jetsparrow.Aasb", "Jetsparrow.Aasb\Jetsparrow.Aasb.csproj", "{66AFFD7B-5B2D-4C85-8523-770702255511}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AntiAntiSwearingBot.Tests", "AntiAntiSwearingBot.Tests\AntiAntiSwearingBot.Tests.csproj", "{AA3CB2CB-05F1-46C4-8710-2702BD663A8B}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jetsparrow.Aasb.Tests", "Jetsparrow.Aasb.Tests\Jetsparrow.Aasb.Tests.csproj", "{AA3CB2CB-05F1-46C4-8710-2702BD663A8B}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution