From dda190703e97f582162837753a56c1b45283a28a Mon Sep 17 00:00:00 2001 From: Renato Alves Date: Mon, 9 Mar 2015 15:57:03 +0000 Subject: [PATCH] Tests - merge basic.t with version.t and convert to python * _version now outputs "2.4.2 (git-ref)" instead of only "git-ref" when building from git. * Changelog updated accordingly. --- ChangeLog | 2 + src/commands/CmdVersion.cpp | 5 ++- test/basic.t | 86 ------------------------------------- test/version.t | 69 ++++++++++++++++++++++++----- 4 files changed, 65 insertions(+), 97 deletions(-) delete mode 100755 test/basic.t diff --git a/ChangeLog b/ChangeLog index c6a422317..803595c45 100644 --- a/ChangeLog +++ b/ChangeLog @@ -24,6 +24,8 @@ - The 'info' command now shows virtual tags. - Fixed major on-modify hooks regression where hooks could no longer modify the tasks handed to them. +- 'task _version' now outputs "2.4.2 (git-ref)" when built from git. "2.4.2" + when built from release tarballs (thanks to Renato Alves). ------ current release --------------------------- diff --git a/src/commands/CmdVersion.cpp b/src/commands/CmdVersion.cpp index d5f357b2d..c20fa4234 100644 --- a/src/commands/CmdVersion.cpp +++ b/src/commands/CmdVersion.cpp @@ -135,7 +135,10 @@ CmdCompletionVersion::CmdCompletionVersion () int CmdCompletionVersion::execute (std::string& output) { #ifdef HAVE_COMMIT - output = COMMIT; + output = std::string (VERSION) + + std::string (" (") + + std::string (COMMIT) + + std::string (")"); #else output = VERSION; #endif diff --git a/test/basic.t b/test/basic.t deleted file mode 100755 index e254e0384..000000000 --- a/test/basic.t +++ /dev/null @@ -1,86 +0,0 @@ -#! /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 -## -################################################################################ - -use strict; -use warnings; -use Test::More tests => 5; - -# Ensure environment has no influence. -delete $ENV{'TASKDATA'}; -delete $ENV{'TASKRC'}; - -use File::Basename; -my $ut = basename ($0); -my $rc = $ut . '.rc'; - -# Create the rc file. -if (open my $fh, '>', $rc) -{ - print $fh "data.location=.\n", - "default.command=\n"; - close $fh; -} - -# Get the version number from configure.ac -my $version = slurp ('../CMakeLists.txt'); - -# Test the usage command. -my $output = qx{../src/task rc:$rc 2>&1 >/dev/null}; -like ($output, qr/You must specify a command or a task to modify./m, "$ut: missing command and ID"); - -# Test the version command. -$output = qx{../src/task rc:$rc version 2>&1}; -like ($output, qr/task $version/, "$ut: version - task version number"); -like ($output, qr/MIT\slicense/, "$ut: version - license"); -like ($output, qr/http:\/\/taskwarrior\.org/, "$ut: version - url"); - -# Test the _version command. -$output = qx{../src/task rc:$rc _version 2>&1}; -like ($output, qr/[a-f0-9]{7}/, "$ut: _version - task version number"); - -# Cleanup. -unlink $rc; -exit 0; - -################################################################################ -sub slurp -{ - my ($file) = @_; - if (open my $fh, '<', $file) - { - while (<$fh>) { - if (/PROJECT_VERSION/) { - chomp; - s/^set \(PROJECT_VERSION "//; - s/"\).*$//; - close $fh; - return $_; - } - } - } - ''; -} diff --git a/test/version.t b/test/version.t index 5e0324091..4fe1ab873 100755 --- a/test/version.t +++ b/test/version.t @@ -29,6 +29,7 @@ import sys import os import unittest +import re from datetime import datetime # Ensure python finds the local simpletap module sys.path.append(os.path.dirname(os.path.abspath(__file__))) @@ -41,28 +42,76 @@ class TestVersion(TestCase): def setUp(self): self.t = Task() - def test_version(self): - """Copyright is current""" - args = ("version",) + self.t.config("default.command", "") - code, out, err = self.t(args) + def test_usage_command(self): + """no_command = usage - reports failure""" + code, out, err = self.t.runError() + + self.assertIn("You must specify a command or a task to modify", err) + + def test_copyright_up_to_date(self): + """Copyright is current""" + code, out, err = self.t(("version",)) expected = "Copyright \(C\) \d{4} - %d" % (datetime.now().year,) - self.assertRegexpMatches(out.decode("utf8"), expected) + self.assertRegexpMatches(out, expected) + + def slurp(self, file="../CMakeLists.txt"): + number = "\.".join(["[0-9]+"] * 3) + ver = re.compile("^set \(PROJECT_VERSION \"({0})\"\)$".format(number)) + with open(file) as fh: + for line in fh: + if "PROJECT_VERSION" in line: + match = ver.match(line) + if match: + return match.group(1) + raise ValueError("Couldn't find matching version in {0}".format(file)) + + def test_version(self): + """version command outputs expected version and license""" + code, out, err = self.t(("version",)) + + expected = "task {0}".format(self.slurp()) + self.assertIn(expected, out) + self.assertIn("MIT license", out) + self.assertIn("http://taskwarrior.org", out) + + def slurp_git(self): + git_cmd = ("git", "rev-parse", "--short", "--verify", "HEAD") + _, hash, _ = run_cmd_wait(git_cmd) + return hash.rstrip("\n") + + def test_under_version(self): + """_version outputs expected version and syntax""" + code, out, err = self.t(("_version",)) + + # version = "x.x.x (git-hash)" or simply "x.x.x" + # corresponding to "compiled from git" or "compiled from tarball" + version = out.split() + + if 2 >= len(version) > 0: + git = version[1] + git_expected = "({0})".format(self.slurp_git()) + self.assertEqual(git_expected, git) + else: + raise ValueError("Unexpected output from _version '{0}'".format( + out)) + + ver = version[0] + ver_expected = self.slurp() + self.assertEqual(ver_expected, ver) def test_task_git_version(self): """Task binary matches the current git commit""" - - git_cmd = ("git", "rev-parse", "--short", "--verify", "HEAD") - _, hash, _ = run_cmd_wait(git_cmd) - - expected = "Commit: {0}".format(hash) + expected = "Commit: {0}".format(self.slurp_git()) args = ("diag",) code, out, err = self.t(args) self.assertIn(expected, out) + if __name__ == "__main__": from simpletap import TAPTestRunner unittest.main(testRunner=TAPTestRunner())