mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-07-07 20:06:36 +02:00
Enhancement - Duration
- Durations can now parse '3 wks', '1 wk', '1w', and similar for yrs, qtrs, mths, wks, days. - Added unit tests.
This commit is contained in:
parent
05fd9278a6
commit
1f8f4c631d
3 changed files with 262 additions and 88 deletions
113
src/Duration.cpp
113
src/Duration.cpp
|
@ -108,22 +108,48 @@ bool Duration::valid (const std::string& input) const
|
||||||
if (autoComplete (lower_input, supported, matches) == 1)
|
if (autoComplete (lower_input, supported, matches) == 1)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Support \d+ d|w|m|q|y
|
// Support \d+ \s? s|secs?|m|mins?|h|hrs?|d|days?|wks?|mo|mths?|y|yrs?|-
|
||||||
// Verify all digits followed by d, w, m, q, or y.
|
// Note: Does not support a sign character. That must be external to
|
||||||
unsigned int length = lower_input.length ();
|
// Duration.
|
||||||
for (unsigned int i = 0; i < length; ++i)
|
Nibbler n (lower_input);
|
||||||
|
int value;
|
||||||
|
if (n.getUnsignedInt (value))
|
||||||
{
|
{
|
||||||
if (! isdigit (lower_input[i]) &&
|
n.skip (' ');
|
||||||
i == length - 1)
|
|
||||||
{
|
if (n.getLiteral ("yrs") && n.depleted ()) return true;
|
||||||
std::string type = lower_input.substr (length - 1);
|
else if (n.getLiteral ("yr") && n.depleted ()) return true;
|
||||||
if (type == "d" || // TODO i18n
|
else if (n.getLiteral ("y") && n.depleted ()) return true;
|
||||||
type == "w" || // TODO i18n
|
|
||||||
type == "m" || // TODO i18n
|
else if (n.getLiteral ("qtrs") && n.depleted ()) return true;
|
||||||
type == "q" || // TODO i18n
|
else if (n.getLiteral ("qtr") && n.depleted ()) return true;
|
||||||
type == "y") // TODO i18n
|
else if (n.getLiteral ("q") && n.depleted ()) return true;
|
||||||
return true;
|
|
||||||
}
|
else if (n.getLiteral ("mths") && n.depleted ()) return true;
|
||||||
|
else if (n.getLiteral ("mth") && n.depleted ()) return true;
|
||||||
|
else if (n.getLiteral ("mo") && n.depleted ()) return true;
|
||||||
|
|
||||||
|
else if (n.getLiteral ("wks") && n.depleted ()) return true;
|
||||||
|
else if (n.getLiteral ("wk") && n.depleted ()) return true;
|
||||||
|
else if (n.getLiteral ("w") && n.depleted ()) return true;
|
||||||
|
|
||||||
|
else if (n.getLiteral ("days") && n.depleted ()) return true;
|
||||||
|
else if (n.getLiteral ("day") && n.depleted ()) return true;
|
||||||
|
else if (n.getLiteral ("d") && n.depleted ()) return true;
|
||||||
|
|
||||||
|
else if (n.getLiteral ("hrs") && n.depleted ()) return true;
|
||||||
|
else if (n.getLiteral ("hr") && n.depleted ()) return true;
|
||||||
|
else if (n.getLiteral ("h") && n.depleted ()) return true;
|
||||||
|
|
||||||
|
else if (n.getLiteral ("mins") && n.depleted ()) return true;
|
||||||
|
else if (n.getLiteral ("min") && n.depleted ()) return true;
|
||||||
|
else if (n.getLiteral ("m") && n.depleted ()) return true;
|
||||||
|
|
||||||
|
else if (n.getLiteral ("secs") && n.depleted ()) return true;
|
||||||
|
else if (n.getLiteral ("sec") && n.depleted ()) return true;
|
||||||
|
else if (n.getLiteral ("s") && n.depleted ()) return true;
|
||||||
|
|
||||||
|
else if (n.getLiteral ("-") && n.depleted ()) return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -168,27 +194,50 @@ void Duration::parse (const std::string& input)
|
||||||
else if (found == "biannual" || found == "biyearly") mDays = 730; // TODO i18n
|
else if (found == "biannual" || found == "biyearly") mDays = 730; // TODO i18n
|
||||||
}
|
}
|
||||||
|
|
||||||
// Support \d+ d|w|m|q|y
|
// Support \d+ \s? s|secs?|m|mins?|h|hrs?|d|days?|wks?|mo|mths?|y|yrs?|-
|
||||||
|
// Note: Does not support a sign character. That must be external to
|
||||||
|
// Duration.
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Verify all digits followed by d, w, m, q, or y.
|
Nibbler n (lower_input);
|
||||||
unsigned int length = lower_input.length ();
|
int value;
|
||||||
for (unsigned int i = 0; i < length; ++i)
|
if (n.getUnsignedInt (value))
|
||||||
{
|
{
|
||||||
if (! isdigit (lower_input[i]) &&
|
n.skip (' ');
|
||||||
i == length - 1)
|
|
||||||
{
|
|
||||||
int number = atoi (lower_input.substr (0, i).c_str ());
|
|
||||||
|
|
||||||
switch (lower_input[length - 1])
|
if (n.getLiteral ("yrs") && n.depleted ()) mDays = value * 365;
|
||||||
{
|
else if (n.getLiteral ("yr") && n.depleted ()) mDays = value * 365;
|
||||||
case 'd': mDays = number * 1; break; // TODO i18n
|
else if (n.getLiteral ("y") && n.depleted ()) mDays = value * 365;
|
||||||
case 'w': mDays = number * 7; break; // TODO i18n
|
|
||||||
case 'm': mDays = number * 30; break; // TODO i18n
|
else if (n.getLiteral ("qtrs") && n.depleted ()) mDays = value * 91;
|
||||||
case 'q': mDays = number * 91; break; // TODO i18n
|
else if (n.getLiteral ("qtr") && n.depleted ()) mDays = value * 91;
|
||||||
case 'y': mDays = number * 365; break; // TODO i18n
|
else if (n.getLiteral ("q") && n.depleted ()) mDays = value * 91;
|
||||||
}
|
|
||||||
}
|
else if (n.getLiteral ("mths") && n.depleted ()) mDays = value * 30;
|
||||||
|
else if (n.getLiteral ("mth") && n.depleted ()) mDays = value * 30;
|
||||||
|
else if (n.getLiteral ("mo") && n.depleted ()) mDays = value * 30;
|
||||||
|
|
||||||
|
else if (n.getLiteral ("wks") && n.depleted ()) mDays = value * 7;
|
||||||
|
else if (n.getLiteral ("wk") && n.depleted ()) mDays = value * 7;
|
||||||
|
else if (n.getLiteral ("w") && n.depleted ()) mDays = value * 7;
|
||||||
|
|
||||||
|
else if (n.getLiteral ("days") && n.depleted ()) mDays = value * 1;
|
||||||
|
else if (n.getLiteral ("day") && n.depleted ()) mDays = value * 1;
|
||||||
|
else if (n.getLiteral ("d") && n.depleted ()) mDays = value * 1;
|
||||||
|
|
||||||
|
else if (n.getLiteral ("hrs") && n.depleted ()) mDays = 0;
|
||||||
|
else if (n.getLiteral ("hr") && n.depleted ()) mDays = 0;
|
||||||
|
else if (n.getLiteral ("h") && n.depleted ()) mDays = 0;
|
||||||
|
|
||||||
|
else if (n.getLiteral ("mins") && n.depleted ()) mDays = 0;
|
||||||
|
else if (n.getLiteral ("min") && n.depleted ()) mDays = 0;
|
||||||
|
else if (n.getLiteral ("m") && n.depleted ()) mDays = 0;
|
||||||
|
|
||||||
|
else if (n.getLiteral ("secs") && n.depleted ()) mDays = 0;
|
||||||
|
else if (n.getLiteral ("sec") && n.depleted ()) mDays = 0;
|
||||||
|
else if (n.getLiteral ("s") && n.depleted ()) mDays = 0;
|
||||||
|
|
||||||
|
else if (n.getLiteral ("-") && n.depleted ()) mDays = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -75,61 +75,61 @@ Confirmed:
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
my $output = qx{../task rc:period.rc add daily due:tomorrow recur:daily};
|
my $output = qx{../task rc:period.rc add daily due:tomorrow recur:daily};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:daily');
|
unlike ($output, qr/was not recognized/, 'recur:daily');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add day due:tomorrow recur:day};
|
$output = qx{../task rc:period.rc add day due:tomorrow recur:day};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:day');
|
unlike ($output, qr/was not recognized/, 'recur:day');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add weekly due:tomorrow recur:weekly};
|
$output = qx{../task rc:period.rc add weekly due:tomorrow recur:weekly};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:weekly');
|
unlike ($output, qr/was not recognized/, 'recur:weekly');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add sennight due:tomorrow recur:sennight};
|
$output = qx{../task rc:period.rc add sennight due:tomorrow recur:sennight};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:sennight');
|
unlike ($output, qr/was not recognized/, 'recur:sennight');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add biweekly due:tomorrow recur:biweekly};
|
$output = qx{../task rc:period.rc add biweekly due:tomorrow recur:biweekly};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:biweekly');
|
unlike ($output, qr/was not recognized/, 'recur:biweekly');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add fortnight due:tomorrow recur:fortnight};
|
$output = qx{../task rc:period.rc add fortnight due:tomorrow recur:fortnight};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:fortnight');
|
unlike ($output, qr/was not recognized/, 'recur:fortnight');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add monthly due:tomorrow recur:monthly};
|
$output = qx{../task rc:period.rc add monthly due:tomorrow recur:monthly};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:monthly');
|
unlike ($output, qr/was not recognized/, 'recur:monthly');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add quarterly due:tomorrow recur:quarterly};
|
$output = qx{../task rc:period.rc add quarterly due:tomorrow recur:quarterly};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:quarterly');
|
unlike ($output, qr/was not recognized/, 'recur:quarterly');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add semiannual due:tomorrow recur:semiannual};
|
$output = qx{../task rc:period.rc add semiannual due:tomorrow recur:semiannual};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:semiannual');
|
unlike ($output, qr/was not recognized/, 'recur:semiannual');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add bimonthly due:tomorrow recur:bimonthly};
|
$output = qx{../task rc:period.rc add bimonthly due:tomorrow recur:bimonthly};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:bimonthly');
|
unlike ($output, qr/was not recognized/, 'recur:bimonthly');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add biannual due:tomorrow recur:biannual};
|
$output = qx{../task rc:period.rc add biannual due:tomorrow recur:biannual};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:biannual');
|
unlike ($output, qr/was not recognized/, 'recur:biannual');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add biyearly due:tomorrow recur:biyearly};
|
$output = qx{../task rc:period.rc add biyearly due:tomorrow recur:biyearly};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:biyearly');
|
unlike ($output, qr/was not recognized/, 'recur:biyearly');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add annual due:tomorrow recur:annual};
|
$output = qx{../task rc:period.rc add annual due:tomorrow recur:annual};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:annual');
|
unlike ($output, qr/was not recognized/, 'recur:annual');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add yearly due:tomorrow recur:yearly};
|
$output = qx{../task rc:period.rc add yearly due:tomorrow recur:yearly};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:yearly');
|
unlike ($output, qr/was not recognized/, 'recur:yearly');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add 2d due:tomorrow recur:2d};
|
$output = qx{../task rc:period.rc add 2d due:tomorrow recur:2d};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:2m');
|
unlike ($output, qr/was not recognized/, 'recur:2d');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add 2w due:tomorrow recur:2w};
|
$output = qx{../task rc:period.rc add 2w due:tomorrow recur:2w};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:2q');
|
unlike ($output, qr/was not recognized/, 'recur:2w');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add 2m due:tomorrow recur:2m};
|
$output = qx{../task rc:period.rc add 2m due:tomorrow recur:2mo};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:2d');
|
unlike ($output, qr/was not recognized/, 'recur:2m');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add 2q due:tomorrow recur:2q};
|
$output = qx{../task rc:period.rc add 2q due:tomorrow recur:2q};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:2w');
|
unlike ($output, qr/was not recognized/, 'recur:2q');
|
||||||
|
|
||||||
$output = qx{../task rc:period.rc add 2y due:tomorrow recur:2y};
|
$output = qx{../task rc:period.rc add 2y due:tomorrow recur:2y};
|
||||||
unlike ($output, qr/was not recignized/, 'recur:2y');
|
unlike ($output, qr/was not recognized/, 'recur:2y');
|
||||||
|
|
||||||
# Verify that the recurring task instances get created. One of each.
|
# Verify that the recurring task instances get created. One of each.
|
||||||
$output = qx{../task rc:period.rc list};
|
$output = qx{../task rc:period.rc list};
|
||||||
|
|
|
@ -48,48 +48,173 @@ int convertDuration (const std::string& input)
|
||||||
|
|
||||||
int main (int argc, char** argv)
|
int main (int argc, char** argv)
|
||||||
{
|
{
|
||||||
UnitTest t (35);
|
UnitTest t (148);
|
||||||
|
|
||||||
Duration d;
|
Duration d;
|
||||||
t.ok (d.valid ("daily"), "duration daily = 1");
|
|
||||||
t.ok (d.valid ("weekdays"), "duration weekdays = 1");
|
|
||||||
t.ok (d.valid ("day"), "duration day = 1");
|
|
||||||
t.ok (d.valid ("0d"), "duration 0d = 0");
|
|
||||||
t.ok (d.valid ("1d"), "duration 1d = 1");
|
|
||||||
t.ok (d.valid ("7d"), "duration 7d = 7");
|
|
||||||
t.ok (d.valid ("10d"), "duration 10d = 10");
|
|
||||||
t.ok (d.valid ("100d"), "duration 100d = 100");
|
|
||||||
|
|
||||||
t.ok (d.valid ("weekly"), "duration weekly = 7");
|
t.ok (d.valid ("daily"), "valid duration daily = 1");
|
||||||
t.ok (d.valid ("sennight"), "duration sennight = 7");
|
t.ok (d.valid ("day"), "valid duration day = 1");
|
||||||
t.ok (d.valid ("biweekly"), "duration biweekly = 14");
|
t.ok (d.valid ("weekly"), "valid duration weekly = 7");
|
||||||
t.ok (d.valid ("fortnight"), "duration fortnight = 14");
|
t.ok (d.valid ("weekdays"), "valid duration weekdays = 1");
|
||||||
t.ok (d.valid ("0w"), "duration 0w = 0");
|
t.ok (d.valid ("sennight"), "valid duration sennight = 7");
|
||||||
t.ok (d.valid ("1w"), "duration 1w = 7");
|
t.ok (d.valid ("biweekly"), "valid duration biweekly = 14");
|
||||||
t.ok (d.valid ("7w"), "duration 7w = 49");
|
t.ok (d.valid ("fortnight"), "valid duration fortnight = 14");
|
||||||
t.ok (d.valid ("10w"), "duration 10w = 70");
|
t.ok (d.valid ("monthly"), "valid duration monthly = 30");
|
||||||
t.ok (d.valid ("100w"), "duration 100w = 700");
|
t.ok (d.valid ("bimonthly"), "valid duration bimonthly = 61");
|
||||||
|
t.ok (d.valid ("quarterly"), "valid duration quarterly = 91");
|
||||||
|
t.ok (d.valid ("annual"), "valid duration annual = 365");
|
||||||
|
t.ok (d.valid ("yearly"), "valid duration yearly = 365");
|
||||||
|
t.ok (d.valid ("semiannual"), "valid duration semiannual = 183");
|
||||||
|
t.ok (d.valid ("biannual"), "valid duration biannual = 730");
|
||||||
|
t.ok (d.valid ("biyearly"), "valid duration biyearly = 730");
|
||||||
|
|
||||||
t.notok (d.valid ("woof"), "duration woof = fail");
|
t.ok (d.valid ("0 yrs"), "valid duration 0 yrs = 0");
|
||||||
|
t.ok (d.valid ("0 yr"), "valid duration 0 yr = 0");
|
||||||
|
t.ok (d.valid ("0y"), "valid duration 0y = 0");
|
||||||
|
t.ok (d.valid ("1 yrs"), "valid duration 1 yrs = 365");
|
||||||
|
t.ok (d.valid ("1 yr"), "valid duration 1 yr = 365");
|
||||||
|
t.ok (d.valid ("1y"), "valid duration 1y = 365");
|
||||||
|
t.ok (d.valid ("10 yrs"), "valid duration 10 yrs = 3650");
|
||||||
|
t.ok (d.valid ("10 yr"), "valid duration 10 yr = 3650");
|
||||||
|
t.ok (d.valid ("10y"), "valid duration 10y = 3650");
|
||||||
|
|
||||||
t.is (convertDuration ("daily"), 1, "duration daily = 1");
|
t.ok (d.valid ("0 qtrs"), "valid duration 0 qtrs = 0");
|
||||||
t.is (convertDuration ("weekdays"), 1, "duration weekdays = 1");
|
t.ok (d.valid ("0 qtr"), "valid duration 0 qtr = 0");
|
||||||
t.is (convertDuration ("day"), 1, "duration day = 1");
|
t.ok (d.valid ("0q"), "valid duration 0q = 0");
|
||||||
t.is (convertDuration ("0d"), 0, "duration 0d = 0");
|
t.ok (d.valid ("1 qtrs"), "valid duration 1 qtrs = 91");
|
||||||
t.is (convertDuration ("1d"), 1, "duration 1d = 1");
|
t.ok (d.valid ("1 qtr"), "valid duration 1 qtr = 91");
|
||||||
t.is (convertDuration ("7d"), 7, "duration 7d = 7");
|
t.ok (d.valid ("1q"), "valid duration 1q = 91");
|
||||||
t.is (convertDuration ("10d"), 10, "duration 10d = 10");
|
t.ok (d.valid ("10 qtrs"), "valid duration 10 qtrs = 910");
|
||||||
t.is (convertDuration ("100d"), 100, "duration 100d = 100");
|
t.ok (d.valid ("10 qtr"), "valid duration 10 qtr = 910");
|
||||||
|
t.ok (d.valid ("10q"), "valid duration 10q = 910");
|
||||||
|
|
||||||
t.is (convertDuration ("weekly"), 7, "duration weekly = 7");
|
t.ok (d.valid ("0 mths"), "valid duration 0 mths = 0");
|
||||||
t.is (convertDuration ("sennight"), 7, "duration sennight = 7");
|
t.ok (d.valid ("0 mth"), "valid duration 0 mth = 0");
|
||||||
t.is (convertDuration ("biweekly"), 14, "duration biweekly = 14");
|
t.ok (d.valid ("0mo"), "valid duration 0mo = 0");
|
||||||
t.is (convertDuration ("fortnight"), 14, "duration fortnight = 14");
|
t.ok (d.valid ("1 mths"), "valid duration 1 mths = 30");
|
||||||
t.is (convertDuration ("0w"), 0, "duration 0w = 0");
|
t.ok (d.valid ("1 mth"), "valid duration 1 mth = 30");
|
||||||
t.is (convertDuration ("1w"), 7, "duration 1w = 7");
|
t.ok (d.valid ("1mo"), "valid duration 1mo = 30");
|
||||||
t.is (convertDuration ("7w"), 49, "duration 7w = 49");
|
t.ok (d.valid ("10 mths"), "valid duration 10 mths = 300");
|
||||||
t.is (convertDuration ("10w"), 70, "duration 10w = 70");
|
t.ok (d.valid ("10 mth"), "valid duration 10 mth = 300");
|
||||||
t.is (convertDuration ("100w"), 700, "duration 100w = 700");
|
t.ok (d.valid ("10mo"), "valid duration 10mo = 300");
|
||||||
|
|
||||||
|
t.ok (d.valid ("0 wks"), "valid duration 0 wks = 0");
|
||||||
|
t.ok (d.valid ("0 wk"), "valid duration 0 wk = 0");
|
||||||
|
t.ok (d.valid ("0w"), "valid duration 0w = 0");
|
||||||
|
t.ok (d.valid ("1 wks"), "valid duration 1 wks = 7");
|
||||||
|
t.ok (d.valid ("1 wk"), "valid duration 1 wk = 7");
|
||||||
|
t.ok (d.valid ("1w"), "valid duration 1w = 7");
|
||||||
|
t.ok (d.valid ("10 wks"), "valid duration 10 wks = 70");
|
||||||
|
t.ok (d.valid ("10 wk"), "valid duration 10 wk = 70");
|
||||||
|
t.ok (d.valid ("10w"), "valid duration 10w = 70");
|
||||||
|
|
||||||
|
t.ok (d.valid ("0 days"), "valid duration 0 days = 0");
|
||||||
|
t.ok (d.valid ("0 day"), "valid duration 0 day = 0");
|
||||||
|
t.ok (d.valid ("0d"), "valid duration 0d = 0");
|
||||||
|
t.ok (d.valid ("1 days"), "valid duration 1 days = 1");
|
||||||
|
t.ok (d.valid ("1 day"), "valid duration 1 day = 1");
|
||||||
|
t.ok (d.valid ("1d"), "valid duration 1d = 1");
|
||||||
|
t.ok (d.valid ("10 days"), "valid duration 10 days = 10");
|
||||||
|
t.ok (d.valid ("10 day"), "valid duration 10 day = 10");
|
||||||
|
t.ok (d.valid ("10d"), "valid duration 10d = 10");
|
||||||
|
|
||||||
|
t.ok (d.valid ("0 hrs"), "valid duration 0 hrs = 0");
|
||||||
|
t.ok (d.valid ("0 hr"), "valid duration 0 hr = 0");
|
||||||
|
t.ok (d.valid ("0h"), "valid duration 0h = 0");
|
||||||
|
t.ok (d.valid ("1 hrs"), "valid duration 1 hrs = 0");
|
||||||
|
t.ok (d.valid ("1 hr"), "valid duration 1 hr = 0");
|
||||||
|
t.ok (d.valid ("1h"), "valid duration 1h = 0");
|
||||||
|
t.ok (d.valid ("10 hrs"), "valid duration 10 hrs = 0");
|
||||||
|
t.ok (d.valid ("10 hr"), "valid duration 10 hr = 0");
|
||||||
|
t.ok (d.valid ("10h"), "valid duration 10h = 0");
|
||||||
|
|
||||||
|
t.ok (d.valid ("0 mins"), "valid duration 0 mins = 0");
|
||||||
|
t.ok (d.valid ("0 min"), "valid duration 0 min");
|
||||||
|
t.ok (d.valid ("0m"), "valid duration 0m = 0");
|
||||||
|
t.ok (d.valid ("1 mins"), "valid duration 1 mins = 0");
|
||||||
|
t.ok (d.valid ("1 min"), "valid duration 1 min = 0");
|
||||||
|
t.ok (d.valid ("1m"), "valid duration 1m = 0");
|
||||||
|
t.ok (d.valid ("10 mins"), "valid duration 10 mins = 0");
|
||||||
|
t.ok (d.valid ("10 min"), "valid duration 10 min = 0");
|
||||||
|
t.ok (d.valid ("10m"), "valid duration 10m = 0");
|
||||||
|
|
||||||
|
t.ok (d.valid ("0 secs"), "valid duration 0 secs = 0");
|
||||||
|
t.ok (d.valid ("0 sec"), "valid duration 0 sec = 0");
|
||||||
|
t.ok (d.valid ("0s"), "valid duration 0s = 0");
|
||||||
|
t.ok (d.valid ("1 secs"), "valid duration 1 secs = 0");
|
||||||
|
t.ok (d.valid ("1 sec"), "valid duration 1 sec = 0");
|
||||||
|
t.ok (d.valid ("1s"), "valid duration 1s = 0");
|
||||||
|
t.ok (d.valid ("10 secs"), "valid duration 10 secs = 0");
|
||||||
|
t.ok (d.valid ("10 sec"), "valid duration 10 sec = 0");
|
||||||
|
t.ok (d.valid ("10s"), "valid duration 10s = 0");
|
||||||
|
|
||||||
|
t.notok (d.valid ("woof"), "valid duration woof = fail");
|
||||||
|
|
||||||
|
t.is (convertDuration ("daily"), 1, "valid duration daily = 1");
|
||||||
|
t.is (convertDuration ("day"), 1, "valid duration day = 1");
|
||||||
|
t.is (convertDuration ("weekly"), 7, "valid duration weekly = 7");
|
||||||
|
t.is (convertDuration ("weekdays"), 1, "valid duration weekdays = 1");
|
||||||
|
t.is (convertDuration ("sennight"), 7, "valid duration sennight = 7");
|
||||||
|
t.is (convertDuration ("biweekly"), 14, "valid duration biweekly = 14");
|
||||||
|
t.is (convertDuration ("fortnight"), 14, "valid duration fortnight = 14");
|
||||||
|
t.is (convertDuration ("monthly"), 30, "valid duration monthly = 30");
|
||||||
|
t.is (convertDuration ("bimonthly"), 61, "valid duration bimonthly = 61");
|
||||||
|
t.is (convertDuration ("quarterly"), 91, "valid duration quarterly = 91");
|
||||||
|
t.is (convertDuration ("annual"), 365, "valid duration annual = 365");
|
||||||
|
t.is (convertDuration ("yearly"), 365, "valid duration yearly = 365");
|
||||||
|
t.is (convertDuration ("semiannual"), 183, "valid duration semiannual = 183");
|
||||||
|
t.is (convertDuration ("biannual"), 730, "valid duration biannual = 730");
|
||||||
|
t.is (convertDuration ("biyearly"), 730, "valid duration biyearly = 730");
|
||||||
|
|
||||||
|
t.is (convertDuration ("0 yrs"), 0, "valid duration 0 yrs = 0");
|
||||||
|
t.is (convertDuration ("0 yr"), 0, "valid duration 0 yr = 0");
|
||||||
|
t.is (convertDuration ("0y"), 0, "valid duration 0y = 0");
|
||||||
|
t.is (convertDuration ("1 yrs"), 365, "valid duration 1 yrs = 365");
|
||||||
|
t.is (convertDuration ("1 yr"), 365, "valid duration 1 yr = 365");
|
||||||
|
t.is (convertDuration ("1y"), 365, "valid duration 1y = 365");
|
||||||
|
t.is (convertDuration ("10 yrs"), 3650, "valid duration 10 yrs = 3650");
|
||||||
|
t.is (convertDuration ("10 yr"), 3650, "valid duration 10 yr = 3650");
|
||||||
|
t.is (convertDuration ("10y"), 3650, "valid duration 10y = 3650");
|
||||||
|
|
||||||
|
t.is (convertDuration ("0 qtrs"), 0, "valid duration 0 qtrs = 0");
|
||||||
|
t.is (convertDuration ("0 qtr"), 0, "valid duration 0 qtr = 0");
|
||||||
|
t.is (convertDuration ("0q"), 0, "valid duration 0q = 0");
|
||||||
|
t.is (convertDuration ("1 qtrs"), 91, "valid duration 1 qtrs = 91");
|
||||||
|
t.is (convertDuration ("1 qtr"), 91, "valid duration 1 qtr = 91");
|
||||||
|
t.is (convertDuration ("1q"), 91, "valid duration 1q = 91");
|
||||||
|
t.is (convertDuration ("10 qtrs"), 910, "valid duration 10 qtrs = 910");
|
||||||
|
t.is (convertDuration ("10 qtr"), 910, "valid duration 10 qtr = 910");
|
||||||
|
t.is (convertDuration ("10q"), 910, "valid duration 10q = 910");
|
||||||
|
|
||||||
|
t.is (convertDuration ("0 mths"), 0, "valid duration 0 mths = 0");
|
||||||
|
t.is (convertDuration ("0 mth"), 0, "valid duration 0 mth = 0");
|
||||||
|
t.is (convertDuration ("0mo"), 0, "valid duration 0mo = 0");
|
||||||
|
t.is (convertDuration ("1 mths"), 30, "valid duration 1 mths = 30");
|
||||||
|
t.is (convertDuration ("1 mth"), 30, "valid duration 1 mth = 30");
|
||||||
|
t.is (convertDuration ("1mo"), 30, "valid duration 1mo = 30");
|
||||||
|
t.is (convertDuration ("10 mths"), 300, "valid duration 10 mths = 300");
|
||||||
|
t.is (convertDuration ("10 mth"), 300, "valid duration 10 mth = 300");
|
||||||
|
t.is (convertDuration ("10mo"), 300, "valid duration 10mo = 300");
|
||||||
|
|
||||||
|
t.is (convertDuration ("0 wks"), 0, "valid duration 0 wks = 0");
|
||||||
|
t.is (convertDuration ("0 wk"), 0, "valid duration 0 wk = 0");
|
||||||
|
t.is (convertDuration ("0w"), 0, "valid duration 0w = 0");
|
||||||
|
t.is (convertDuration ("1 wks"), 7, "valid duration 1 wks = 7");
|
||||||
|
t.is (convertDuration ("1 wk"), 7, "valid duration 1 wk = 7");
|
||||||
|
t.is (convertDuration ("1w"), 7, "valid duration 1w = 7");
|
||||||
|
t.is (convertDuration ("10 wks"), 70, "valid duration 10 wks = 70");
|
||||||
|
t.is (convertDuration ("10 wk"), 70, "valid duration 10 wk = 70");
|
||||||
|
t.is (convertDuration ("10w"), 70, "valid duration 10w = 70");
|
||||||
|
|
||||||
|
t.is (convertDuration ("0 days"), 0, "valid duration 0 days = 0");
|
||||||
|
t.is (convertDuration ("0 day"), 0, "valid duration 0 day = 0");
|
||||||
|
t.is (convertDuration ("0d"), 0, "valid duration 0d = 0");
|
||||||
|
t.is (convertDuration ("1 days"), 1, "valid duration 1 days = 1");
|
||||||
|
t.is (convertDuration ("1 day"), 1, "valid duration 1 day = 1");
|
||||||
|
t.is (convertDuration ("1d"), 1, "valid duration 1d = 1");
|
||||||
|
t.is (convertDuration ("10 days"), 10, "valid duration 10 days = 10");
|
||||||
|
t.is (convertDuration ("10 day"), 10, "valid duration 10 day = 10");
|
||||||
|
t.is (convertDuration ("10d"), 10, "valid duration 10d = 10");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue