Migrate Remaining Chat Settings Commands to Helix API (#4040)

This commit is contained in:
nerix
2022-10-03 19:42:02 +02:00
committed by GitHub
parent 4c2e97bea6
commit 25bccc90b4
7 changed files with 846 additions and 39 deletions
+251
View File
@@ -3,6 +3,7 @@
#include <gtest/gtest.h>
using namespace chatterino;
using namespace _helpers_internal;
TEST(Helpers, formatUserMention)
{
@@ -250,3 +251,253 @@ TEST(Helpers, BatchDifferentInputType)
EXPECT_EQ(result, expectation);
}
TEST(Helpers, skipSpace)
{
struct TestCase {
QString input;
int startIdx;
int expected;
};
std::vector<TestCase> tests{{"foo bar", 3, 6}, {"foo bar", 3, 3},
{"foo ", 3, 3}, {"foo ", 3, 6},
{" ", 0, 2}, {" ", 0, 0}};
for (const auto &c : tests)
{
const auto actual = skipSpace(&c.input, c.startIdx);
EXPECT_EQ(actual, c.expected)
<< actual << " (" << qUtf8Printable(c.input)
<< ") did not match expected value " << c.expected;
}
}
TEST(Helpers, findUnitMultiplierToSec)
{
constexpr uint64_t sec = 1;
constexpr uint64_t min = 60;
constexpr uint64_t hour = min * 60;
constexpr uint64_t day = hour * 24;
constexpr uint64_t week = day * 7;
constexpr uint64_t month = day * 30;
constexpr uint64_t bad = 0;
struct TestCase {
QString input;
int startPos;
int expectedEndPos;
uint64_t expectedMultiplier;
};
std::vector<TestCase> tests{
{"s", 0, 0, sec},
{"m", 0, 0, min},
{"h", 0, 0, hour},
{"d", 0, 0, day},
{"w", 0, 0, week},
{"mo", 0, 1, month},
{"s alienpls", 0, 0, sec},
{"m alienpls", 0, 0, min},
{"h alienpls", 0, 0, hour},
{"d alienpls", 0, 0, day},
{"w alienpls", 0, 0, week},
{"mo alienpls", 0, 1, month},
{"alienpls s", 9, 9, sec},
{"alienpls m", 9, 9, min},
{"alienpls h", 9, 9, hour},
{"alienpls d", 9, 9, day},
{"alienpls w", 9, 9, week},
{"alienpls mo", 9, 10, month},
{"alienpls s alienpls", 9, 9, sec},
{"alienpls m alienpls", 9, 9, min},
{"alienpls h alienpls", 9, 9, hour},
{"alienpls d alienpls", 9, 9, day},
{"alienpls w alienpls", 9, 9, week},
{"alienpls mo alienpls", 9, 10, month},
{"second", 0, 5, sec},
{"minute", 0, 5, min},
{"hour", 0, 3, hour},
{"day", 0, 2, day},
{"week", 0, 3, week},
{"month", 0, 4, month},
{"alienpls2 second", 10, 15, sec},
{"alienpls2 minute", 10, 15, min},
{"alienpls2 hour", 10, 13, hour},
{"alienpls2 day", 10, 12, day},
{"alienpls2 week", 10, 13, week},
{"alienpls2 month", 10, 14, month},
{"alienpls2 second alienpls", 10, 15, sec},
{"alienpls2 minute alienpls", 10, 15, min},
{"alienpls2 hour alienpls", 10, 13, hour},
{"alienpls2 day alienpls", 10, 12, day},
{"alienpls2 week alienpls", 10, 13, week},
{"alienpls2 month alienpls", 10, 14, month},
{"seconds", 0, 6, sec},
{"minutes", 0, 6, min},
{"hours", 0, 4, hour},
{"days", 0, 3, day},
{"weeks", 0, 4, week},
{"months", 0, 5, month},
{"alienpls2 seconds", 10, 16, sec},
{"alienpls2 minutes", 10, 16, min},
{"alienpls2 hours", 10, 14, hour},
{"alienpls2 days", 10, 13, day},
{"alienpls2 weeks", 10, 14, week},
{"alienpls2 months", 10, 15, month},
{"alienpls2 seconds alienpls", 10, 16, sec},
{"alienpls2 minutes alienpls", 10, 16, min},
{"alienpls2 hours alienpls", 10, 14, hour},
{"alienpls2 days alienpls", 10, 13, day},
{"alienpls2 weeks alienpls", 10, 14, week},
{"alienpls2 months alienpls", 10, 15, month},
{"sec", 0, 0, bad},
{"min", 0, 0, bad},
{"ho", 0, 0, bad},
{"da", 0, 0, bad},
{"we", 0, 0, bad},
{"mon", 0, 0, bad},
{"foo", 0, 0, bad},
{"S", 0, 0, bad},
{"M", 0, 0, bad},
{"H", 0, 0, bad},
{"D", 0, 0, bad},
{"W", 0, 0, bad},
{"MO", 0, 1, bad},
{"alienpls2 sec", 10, 0, bad},
{"alienpls2 min", 10, 0, bad},
{"alienpls2 ho", 10, 0, bad},
{"alienpls2 da", 10, 0, bad},
{"alienpls2 we", 10, 0, bad},
{"alienpls2 mon", 10, 0, bad},
{"alienpls2 foo", 10, 0, bad},
{"alienpls2 S", 10, 0, bad},
{"alienpls2 M", 10, 0, bad},
{"alienpls2 H", 10, 0, bad},
{"alienpls2 D", 10, 0, bad},
{"alienpls2 W", 10, 0, bad},
{"alienpls2 MO", 10, 0, bad},
{"alienpls2 sec alienpls", 10, 0, bad},
{"alienpls2 min alienpls", 10, 0, bad},
{"alienpls2 ho alienpls", 10, 0, bad},
{"alienpls2 da alienpls", 10, 0, bad},
{"alienpls2 we alienpls", 10, 0, bad},
{"alienpls2 mon alienpls", 10, 0, bad},
{"alienpls2 foo alienpls", 10, 0, bad},
{"alienpls2 S alienpls", 10, 0, bad},
{"alienpls2 M alienpls", 10, 0, bad},
{"alienpls2 H alienpls", 10, 0, bad},
{"alienpls2 D alienpls", 10, 0, bad},
{"alienpls2 W alienpls", 10, 0, bad},
{"alienpls2 MO alienpls", 10, 0, bad},
};
for (const auto &c : tests)
{
int pos = c.startPos;
const auto actual = findUnitMultiplierToSec(&c.input, pos);
if (c.expectedMultiplier == bad)
{
EXPECT_FALSE(actual.second) << qUtf8Printable(c.input);
}
else
{
EXPECT_TRUE(pos == c.expectedEndPos && actual.second &&
actual.first == c.expectedMultiplier)
<< qUtf8Printable(c.input)
<< ": Expected(end: " << c.expectedEndPos
<< ", mult: " << c.expectedMultiplier << ") Actual(end: " << pos
<< ", mult: " << actual.first << ")";
}
}
}
TEST(Helpers, parseDurationToSeconds)
{
struct TestCase {
QString input;
int64_t output;
int64_t noUnitMultiplier = 1;
};
auto wrongInput = [](QString &&input) {
return TestCase{input, -1};
};
std::vector<TestCase> tests{
{"1 minutes 9s", 69},
{"22 m 17 s", 1337},
{"7d 5h 10m 52s", 623452},
{"2h 19m 5s ", 8345},
{"3d 15 h 13m 54s", 314034},
{"27s", 27},
{
"9h 36 m 29s", 34589,
7, // should be unused
},
{"1h 59s", 3659},
{"12d2h22m25s", 1045345},
{"2h22m25s12d", 1045345},
{"1d32s", 86432},
{"0", 0},
{"0 s", 0},
{"1weeks", 604800},
{"2 day5days", 604800},
{"1 day", 86400},
{"4 hours 30m 19h 30 minute", 86400},
{"3 months", 7776000},
{"1 mo 2month", 7776000},
// from documentation
{"1w 2h", 612000},
{"1w 1w 0s 4d", 1555200},
{"5s3h4w", 2430005},
// from twitch response
{"30m", 1800},
{"1 week", 604800},
{"5 days 12 hours", 475200},
// noUnitMultiplier
{"0", 0, 60},
{
"60", 3600,
60, // minute
},
{
"1",
86400, // 1d
86400,
},
// wrong input
wrongInput("1min"),
wrongInput(""),
wrongInput("1m5w+5"),
wrongInput("1h30"),
wrongInput("12 34w"),
wrongInput("4W"),
wrongInput("1min"),
wrongInput("4Min"),
wrongInput("4sec"),
};
for (const auto &c : tests)
{
const auto actual = parseDurationToSeconds(c.input, c.noUnitMultiplier);
EXPECT_EQ(actual, c.output)
<< actual << " (" << qUtf8Printable(c.input)
<< ") did not match expected value " << c.output;
}
}