mirror of
https://github.com/Jetsparrow/antiantiswearingbot.git
synced 2026-01-20 23:16:08 +03:00
Update name, fix tests
This commit is contained in:
parent
4090adef78
commit
98f33bba8b
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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));
|
||||
|
||||
}
|
||||
}
|
||||
22
Jetsparrow.Aasb.Tests/DefaultSettings.cs
Normal file
22
Jetsparrow.Aasb.Tests/DefaultSettings.cs
Normal 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"
|
||||
};
|
||||
}
|
||||
}
|
||||
42
Jetsparrow.Aasb.Tests/DetectTests.cs
Normal file
42
Jetsparrow.Aasb.Tests/DetectTests.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
88
Jetsparrow.Aasb.Tests/FilterTests.cs
Normal file
88
Jetsparrow.Aasb.Tests/FilterTests.cs
Normal 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));
|
||||
|
||||
}
|
||||
@ -13,7 +13,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AntiAntiSwearingBot\AntiAntiSwearingBot.csproj" />
|
||||
<ProjectReference Include="..\Jetsparrow.Aasb\Jetsparrow.Aasb.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
31
Jetsparrow.Aasb.Tests/MockOptionsMonitor.cs
Normal file
31
Jetsparrow.Aasb.Tests/MockOptionsMonitor.cs
Normal 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() { }
|
||||
}
|
||||
|
||||
}
|
||||
@ -3,9 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.28010.2036
|
||||
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
|
||||
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
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Loading…
Reference in New Issue
Block a user