taskwarrior/test/dates.t.cpp
2015-10-16 15:55:17 -04:00

174 lines
7.2 KiB
C++

////////////////////////////////////////////////////////////////////////////////
//
// Copyright 2013 - 2015, Göteborg Bit Factory.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// http://www.opensource.org/licenses/mit-license.php
//
////////////////////////////////////////////////////////////////////////////////
#include <cmake.h>
#include <test.h>
#include <Dates.h>
#include <Context.h>
Context context;
////////////////////////////////////////////////////////////////////////////////
void testInit (UnitTest& t, const std::string& value, Variant& var)
{
try
{
namedDates (value, var);
t.pass (value + " --> valid");
}
catch (const std::string& e)
{
t.fail (value + " --> valid");
t.diag (e);
}
catch (...)
{
t.fail (value + " --> valid");
}
}
////////////////////////////////////////////////////////////////////////////////
int main (int, char**)
{
UnitTest t (98);
Variant sunday; testInit (t, "sunday", sunday);
Variant monday; testInit (t, "monday", monday);
Variant tuesday; testInit (t, "tuesday", tuesday);
Variant wednesday; testInit (t, "wednesday", wednesday);
Variant thursday; testInit (t, "thursday", thursday);
Variant friday; testInit (t, "friday", friday);
Variant saturday; testInit (t, "saturday", saturday);
Variant sun; testInit (t, "sun", sun);
Variant mon; testInit (t, "mon", mon);
Variant tue; testInit (t, "tue", tue);
Variant wed; testInit (t, "wed", wed);
Variant thu; testInit (t, "thu", thu);
Variant fri; testInit (t, "fri", fri);
Variant sat; testInit (t, "sat", sat);
t.ok (sunday == sun, "sunday == sun");
t.ok (monday == mon, "monday == mon");
t.ok (tuesday == tue, "tuesday == tue");
t.ok (wednesday == wed, "wednesday == wed");
t.ok (thursday == thu, "thursday == thu");
t.ok (friday == fri, "friday == fri");
t.ok (saturday == sat, "saturday == sat");
Variant january; testInit (t, "january", january);
Variant february; testInit (t, "february", february);
Variant march; testInit (t, "march", march);
Variant april; testInit (t, "april", april);
Variant may; testInit (t, "may", may);
Variant june; testInit (t, "june", june);
Variant july; testInit (t, "july", july);
Variant august; testInit (t, "august", august);
Variant september; testInit (t, "september", september);
Variant october; testInit (t, "october", october);
Variant november; testInit (t, "november", november);
Variant december; testInit (t, "december", december);
Variant jan; testInit (t, "jan", jan);
Variant feb; testInit (t, "feb", feb);
Variant mar; testInit (t, "mar", mar);
Variant apr; testInit (t, "apr", apr);
Variant jun; testInit (t, "jun", jun);
Variant jul; testInit (t, "jul", jul);
Variant aug; testInit (t, "aug", aug);
Variant sep; testInit (t, "sep", sep);
Variant oct; testInit (t, "oct", oct);
Variant nov; testInit (t, "nov", nov);
Variant dec; testInit (t, "dec", dec);
t.ok (january == jan, "january == jan");
t.ok (february == feb, "february == feb");
t.ok (march == mar, "march == mar");
t.ok (april == apr, "april == apr");
// May has only three letters.
t.ok (june == jun, "june == jun");
t.ok (july == jul, "july == jul");
t.ok (august == aug, "august == aug");
t.ok (september == sep, "september == sep");
t.ok (october == oct, "october == oct");
t.ok (november == nov, "november == nov");
t.ok (december == dec, "december == dec");
// Simply instantiate these for now. Test later.
Variant now; testInit (t, "now", now);
Variant today; testInit (t, "today", today);
Variant sod; testInit (t, "sod", sod);
Variant yesterday; testInit (t, "yesterday", yesterday);
Variant tomorrow; testInit (t, "tomorrow", tomorrow);
Variant eod; testInit (t, "eod", eod);
Variant soy; testInit (t, "soy", soy);
Variant eoy; testInit (t, "eoy", eoy);
Variant socm; testInit (t, "socm", socm);
Variant eocm; testInit (t, "eocm", eocm);
Variant som; testInit (t, "som", som);
Variant eom; testInit (t, "eom", eom);
Variant later; testInit (t, "later", later);
Variant someday; testInit (t, "someday", someday);
Variant easter; testInit (t, "easter", easter);
Variant eastermonday; testInit (t, "eastermonday", eastermonday);
Variant ascension; testInit (t, "ascension", ascension);
Variant pentecost; testInit (t, "pentecost", pentecost);
Variant goodfriday; testInit (t, "goodfriday", goodfriday);
Variant pi; testInit (t, "pi", pi);
Variant var_true; testInit (t, "true", var_true);
Variant var_false; testInit (t, "false", var_false);
Variant midsommar; testInit (t, "midsommar", midsommar);
Variant midsommarafton; testInit (t, "midsommarafton", midsommarafton);
// Check abbreviations.
// TW-1515: abbreviation.minimum does not apply to date recognition
Variant yesterday2; testInit (t, "yesterday", yesterday2);
Variant yesterday3; testInit (t, "yesterda", yesterday3);
Variant yesterday4; testInit (t, "yesterd", yesterday4);
Variant yesterday5; testInit (t, "yester", yesterday5);
Variant yesterday6; testInit (t, "yeste", yesterday6);
Variant yesterday7; testInit (t, "yest", yesterday7);
Variant yesterday8; testInit (t, "yes", yesterday8);
t.ok (now >= today, "now >= today");
t.ok (sod == tomorrow, "sod == tomorrow");
t.ok (sod > eod, "sod > eod");
t.ok (yesterday < today, "yesterday < today");
t.ok (today < tomorrow, "today < tomorrow");
t.ok (socm < eocm, "socm < eocm");
t.ok (now < later, "now < later");
t.ok (now < someday, "now < someday");
t.ok (goodfriday < easter, "goodfriday < easter");
t.ok (easter < eastermonday, "easter < eastermonday");
t.ok (easter < midsommarafton, "easter < midsommarafton");
t.ok (midsommarafton < midsommar, "midsommarafton < midsommar");
return 0;
}
////////////////////////////////////////////////////////////////////////////////