From d9769140133b28a31f496e123dd20e1c76aaf4ae Mon Sep 17 00:00:00 2001 From: Renato Alves Date: Fri, 5 Jun 2015 23:29:23 +0100 Subject: [PATCH] Tests: verbose.t now in Python and with more tests --- test/verbose.t | 176 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 114 insertions(+), 62 deletions(-) diff --git a/test/verbose.t b/test/verbose.t index 6ee53bece..707e3a020 100755 --- a/test/verbose.t +++ b/test/verbose.t @@ -1,73 +1,125 @@ -#! /usr/bin/env perl -################################################################################ -## -## Copyright 2006 - 2015, 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 -## -################################################################################ +#!/usr/bin/env python2.7 +# -*- coding: utf-8 -*- +############################################################################### +# +# Copyright 2006 - 2015, 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 +# +############################################################################### -use strict; -use warnings; -use Test::More tests => 6; +import sys +import os +import re +import unittest +import operator -# Ensure environment has no influence. -delete $ENV{'TASKDATA'}; -delete $ENV{'TASKRC'}; +# Ensure python finds the local simpletap module +sys.path.append(os.path.dirname(os.path.abspath(__file__))) -# Create the rc file. -if (open my $fh, '>', 'verbose.rc') -{ - print $fh "data.location=.\n", - "print.empty.columns=yes\n"; - close $fh; -} +from basetest import Task, TestCase -# Verbosity: 'new-id' -my $output = qx{../src/task rc:verbose.rc rc.verbose:new-id add Sample1 2>&1}; -like ($output, qr/Created task \d/, '\'new-id\' verbosity good'); -$output = qx{../src/task rc:verbose.rc rc.verbose:nothing add Sample2 2>&1}; -unlike ($output, qr/Created task \d/, '\'new-id\' verbosity good'); +class TestVerbosity(TestCase): + def setUp(self): + self.t = Task() + self.t.config("print.empty.columns", "yes") -# Verbosity: 'label' -$output = qx{../src/task rc:verbose.rc ls rc.verbose:label 2>&1}; -like ($output, qr/ID.+A.+D.+Project.+Tags.+R.+Wait.+S.+Due.+Until.+Description/, '\'label\' verbosity good'); + self.t(("add", "Sample")) -# Verbosity: 'affected' -$output = qx{../src/task rc:verbose.rc ls rc.verbose:affected 2>&1}; -like ($output, qr/^\d+ tasks$/ms, '\'affected\' verbosity good'); + # TODO Verbosity: 'edit' -# Off -$output = qx{../src/task rc:verbose.rc ls rc.verbose:nothing 2>&1}; -unlike ($output, qr/^\d+ tasks$/ms, '\'affected\' verbosity good'); -unlike ($output, qr/ID.+Project.+Pri.+Description/, '\'label\' verbosity good'); + def test_verbosity_new_id(self): + """Verbosity new-id""" + code, out, err = self.t(("rc.verbose:new-id", "add", "Sample1")) + self.assertRegexpMatches(out, r"Created task \d") -# TODO Verbosity: 'blank' -# TODO Verbosity: 'header' -# TODO Verbosity: 'edit' -# TODO Verbosity: 'special' -# TODO Verbosity: 'project' + code, out, err = self.t(("rc.verbose:nothing", "add", "Sample2")) + self.assertNotRegexpMatches(out, r"Created task \d") -# Cleanup. -unlink qw(pending.data completed.data undo.data backlog.data verbose.rc); -exit 0; + def test_verbosity_label(self): + """Verbosity label""" + code, out, err = self.t(("rc.verbose:label", "ls")) + self.assertRegexpMatches( + out, + "ID.+A.+D.+Project.+Tags.+R.+Wait.+S.+Due.+Until.+Description" + ) + def test_verbosity_affected(self): + """Verbosity affected""" + code, out, err = self.t(("rc.verbose:affected", "ls")) + + expected = re.compile(r"^\d+ tasks?$", re.MULTILINE) + self.assertRegexpMatches(out, expected) + + def test_verbosity_off(self): + """Verbosity off""" + code, out, err = self.t(("rc.verbose:nothing", "ls")) + + expected = re.compile(r"^\d+ tasks?$", re.MULTILINE) + self.assertNotRegexpMatches(out, expected) + self.assertNotRegexpMatches(out, "ID.+Project.+Pri.+Description") + + def test_verbosity_special(self): + """Verbosity special""" + code, out, err = self.t(("rc.verbose:special", "1", "mod", "+next")) + + self.assertIn("The 'next' special tag will boost the urgency of this " + "task so it appears on the 'next' report.", out) + + def test_verbosity_blank(self): + """Verbosity blank""" + + def count_blank_lines(x): + return len(filter(operator.not_, x.splitlines())) + + code, out, err = self.t(("rc.verbose:nothing", "ls")) + self.assertEqual(count_blank_lines(out), 0) + + code, out, err = self.t(("rc.verbose:blank", "ls")) + self.assertEqual(count_blank_lines(out), 2) + + def test_verbosity_header(self): + """Verbosity header""" + + code, out, err = self.t(("rc.verbose:nothing", "ls")) + self.assertNotIn("TASKRC override:", err) + self.assertNotIn("TASKDATA override:", err) + + code, out, err = self.t(("rc.verbose:header", "ls")) + self.assertIn("TASKRC override:", err) + self.assertIn("TASKDATA override:", err) + + def test_verbosity_project(self): + """Verbosity project""" + + code, out, err = self.t(("rc.verbose:nothing", "add", "proj:T", "one")) + self.assertNotIn("The project 'T' has changed.", err) + + code, out, err = self.t(("rc.verbose:project", "add", "proj:T", "two")) + self.assertIn("The project 'T' has changed.", err) + + +if __name__ == "__main__": + from simpletap import TAPTestRunner + unittest.main(testRunner=TAPTestRunner()) + +# vim: ai sts=4 et sw=4