From 3038b11780578d6d68edaa640ec830b340c63eec Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 13 Apr 2014 09:18:58 -0400 Subject: [PATCH] TW-285 - TW-285 DUETODAY doesn't give any output (thanks to Jostein Berntsen). - Added unit tests. --- ChangeLog | 1 + src/Task.cpp | 14 +++++- test/tw-285.t | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 130 insertions(+), 1 deletion(-) create mode 100755 test/tw-285.t diff --git a/ChangeLog b/ChangeLog index cececf08f..a1c00144c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -21,6 +21,7 @@ Weber) - TW-261 Easy to create "not deletable" task (thanks to Jan Kunder). - TW-278 Cygwin throws warnings building mk_wcwidth() in wcwidth6.c. +- TW-285 DUETODAY doesn't give any output (thanks to Jostein Berntsen). - TW-1254 Calc command can segfault on negative numbers (thanks to Renato Alves). - TW-1255 New testing framework (thanks to Renato Alves). diff --git a/src/Task.cpp b/src/Task.cpp index 909538966..ccf786aa5 100644 --- a/src/Task.cpp +++ b/src/Task.cpp @@ -24,6 +24,7 @@ // //////////////////////////////////////////////////////////////////////////////// +#include // TODO Remove. #include #include #include @@ -380,7 +381,8 @@ bool Task::is_due () const status != Task::deleted) { Task::dateState state = getDateState ("due"); - if (state == dateAfterToday || + if (state == dateAfterToday || + state == dateEarlierToday || state == dateLaterToday) return true; } @@ -1184,6 +1186,16 @@ int Task::getTagCount () const } //////////////////////////////////////////////////////////////////////////////// +// +// OVERDUE YESTERDAY DUE TODAY TOMORROW WEEK MONTH YEAR +// due:-1week Y - - - - ? ? ? +// due:-1day Y Y - - - ? ? ? +// due:today Y - Y Y - ? ? ? +// due:tomorrow - - Y - Y ? ? ? +// due:3days - - Y - - ? ? ? +// due:1month - - - - - - - ? +// due:1year - - - - - - - - +// bool Task::hasTag (const std::string& tag) const { // Synthetic tags - dynamically generated, but do not occupy storage space. diff --git a/test/tw-285.t b/test/tw-285.t new file mode 100755 index 000000000..9ab25e772 --- /dev/null +++ b/test/tw-285.t @@ -0,0 +1,116 @@ +#!/usr/bin/env python2.7 +# -*- coding: utf-8 -*- +################################################################################ +## +## Copyright 2006 - 2014, Paul Beckingham, Federico Hernandez. +## +## 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 +## +################################################################################ + +import sys +import os +import signal +from glob import glob +# Ensure python finds the local simpletap and basetest modules +sys.path.append(os.path.dirname(os.path.abspath(__file__))) + +from basetest import BaseTestCase + + +class BaseTest285(BaseTestCase): + @classmethod + def prepare(cls): + with open("bug.rc", 'w') as fh: + fh.write("data.location=.\n" + "verbose=nothing\n" + "confirmation=no\n") + + def setUp(self): + """Executed before each test in the class""" + + # OVERDUE YESTERDAY DUE TODAY TOMORROW WEEK MONTH YEAR + # due:-1week Y - - - - ? ? ? + # due:-1day Y Y - - - ? ? ? + # due:today Y - Y Y - ? ? ? + # due:tomorrow - - Y - Y ? ? ? + # due:3days - - Y - - ? ? ? + # due:1month - - - - - - - ? + # due:1year - - - - - - - - + + self.callTaskSuccess(['rc:bug.rc', 'add', 'due_last_week', 'due:-1week']) + self.callTaskSuccess(['rc:bug.rc', 'add', 'due_yesterday', 'due:-1day']) + self.callTaskSuccess(['rc:bug.rc', 'add', 'due_earlier_today', 'due:today']) + self.callTaskSuccess(['rc:bug.rc', 'add', 'due_later_today', 'due:tomorrow']) + self.callTaskSuccess(['rc:bug.rc', 'add', 'due_three_days', 'due:3days']) + self.callTaskSuccess(['rc:bug.rc', 'add', 'due_next_month', 'due:1month']) + self.callTaskSuccess(['rc:bug.rc', 'add', 'due_next_year', 'due:1year']) + + def tearDown(self): + """Needed after each test or setUp will cause duplicated data at start + of the next test. + """ + for file in glob("*.data"): + os.remove(file) + + @classmethod + def cleanup(cls): + os.remove("bug.rc") + + +class Test285(BaseTest285): + def test_overdue(self): + """+OVERDUE""" + code, out, err = self.callTaskSuccess(["rc:bug.rc", "+OVERDUE", "count"]) + self.assertEqual(out, "3\n", "+OVERDUE == 3 tasks") + + def test_yesterday(self): + """+YESTERDAY""" + code, out, err = self.callTaskSuccess(["rc:bug.rc", "+YESTERDAY", "count"]) + self.assertEqual(out, "1\n", "+YESTERDAY == 1 task") + + def test_due(self): + """+DUE""" + code, out, err = self.callTaskSuccess(["rc:bug.rc", "+DUE", "count"]) + self.assertEqual(out, "3\n", "+DUE == 3 task") + + def test_today(self): + """+TODAY""" + code, out, err = self.callTaskSuccess(["rc:bug.rc", "+TODAY", "count"]) + self.assertEqual(out, "1\n", "+TODAY == 1 task") + + def test_duetoday(self): + """+DUETODAY""" + code, out, err = self.callTaskSuccess(["rc:bug.rc", "+DUETODAY", "count"]) + self.assertEqual(out, "1\n", "+DUETODAY == 1 task") + + def test_tomorrow(self): + """+TOMORROW""" + code, out, err = self.callTaskSuccess(["rc:bug.rc", "+TOMORROW", "count"]) + self.assertEqual(out, "1\n", "+TOMORROW == 1 task") + + +if __name__ == "__main__": + from simpletap import TAPTestRunner + import unittest + unittest.main(testRunner=TAPTestRunner()) + +# vim: ai sts=4 et sw=4