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>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\AntiAntiSwearingBot\AntiAntiSwearingBot.csproj" />
|
<ProjectReference Include="..\Jetsparrow.Aasb\Jetsparrow.Aasb.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</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
|
# 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
|
||||||
Loading…
Reference in New Issue
Block a user