Migrate Remaining Chat Settings Commands to Helix API (#4040)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user