From: Richard Hartmann Date: Wed, 11 Feb 2015 18:53:25 +0000 (+0100) Subject: Merge branch 'feature/tests' X-Git-Url: https://git.madduck.net/code/vcsh.git/commitdiff_plain/f0048fa3ba6c5286947137c9b829093cb8299fc8?hp=acf23397d3e19170d5d335e7b213920fe9d3db72 Merge branch 'feature/tests' --- diff --git a/Makefile b/Makefile index ca6ebe6..d939624 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,8 @@ purge: uninstall rmdir -p --ignore-fail-on-non-empty $(DESTDIR)$(ZSHDIR) test: - @if which git > /dev/null ; then :; else echo "'git' not found, exiting..."; exit 1; fi + @if which git > /dev/null; then : ; else echo "'git' not found, exiting..."; exit 1; fi + @if which prove > /dev/null; then prove; else echo "'prove' not found; not running tests"; fi moo: @ which cowsay >/dev/null 2>&1 && cowsay "I hope you're happy now..." diff --git a/t/000-tear-env.t b/t/000-tear-env.t new file mode 100644 index 0000000..6cb384f --- /dev/null +++ b/t/000-tear-env.t @@ -0,0 +1,17 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Shell::Command; +use Test::Most; + +chdir 't' or die $!; + +if (!-d 'etc') { + plan skip_all => 'No need to tear down previous env.'; +} + +ok rm_rf 'etc'; + +done_testing; diff --git a/t/001-setup-env.t b/t/001-setup-env.t new file mode 100644 index 0000000..fb59f05 --- /dev/null +++ b/t/001-setup-env.t @@ -0,0 +1,19 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Test::Most; + +system ("mkdir -p t/etc"); +ok !$?; + +system ("mkdir -p t/etc/.vcsh_home"); +ok !$?; + +chdir 't/etc/' or die $!; + +system ("ln -s '../../vcsh'"); +ok !$?; + +done_testing; diff --git a/t/100-init.t b/t/100-init.t new file mode 100644 index 0000000..f2b3a05 --- /dev/null +++ b/t/100-init.t @@ -0,0 +1,54 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Cwd 'abs_path'; +use Test::Most; + +chdir 't/etc/' or die $!; + +$ENV{'HOME'} = abs_path ('.vcsh_home'); + +my $output = `./vcsh status`; + +ok $output eq "", 'No repos set up yet.'; + +$output = `./vcsh init test1`; + +ok $output eq "Initialized empty shared Git repository in " . $ENV{'HOME'} . "/.config/vcsh/repo.d/test1.git/\n"; + +$output = `./vcsh status`; + +ok $output eq "test1:\n\n", 'Our new repo is there'; + +chdir $ENV{"HOME"} . '/.config/vcsh/repo.d/test1.git/' or die $!; + +ok -f 'HEAD'; +ok -d 'branches'; +ok -f 'config'; +ok -f 'description'; +ok -d 'hooks'; +ok -d 'info'; +ok -d 'objects'; +ok -d 'refs'; + +ok -f 'hooks/applypatch-msg.sample'; +ok -f 'hooks/commit-msg.sample'; +ok -f 'hooks/post-update.sample'; +ok -f 'hooks/pre-applypatch.sample'; +ok -f 'hooks/pre-commit.sample'; +ok -f 'hooks/pre-push.sample'; +ok -f 'hooks/pre-rebase.sample'; +ok -f 'hooks/prepare-commit-msg.sample'; +ok -f 'hooks/update.sample'; + +ok -f 'info/exclude'; + +ok -d 'objects/info'; +ok -d 'objects/pack'; + +ok -d 'refs/heads'; +ok -d 'refs/tags'; + +done_testing; diff --git a/t/300-add.t b/t/300-add.t new file mode 100644 index 0000000..24d9a8a --- /dev/null +++ b/t/300-add.t @@ -0,0 +1,33 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Cwd 'abs_path'; + +use Shell::Command; +use Test::Most; + +chdir 't/etc/' or die $!; + +$ENV{'HOME'} = abs_path ('.vcsh_home'); + +chdir '.vcsh_home' or die $!; + +eval { + touch 'a'; +}; + +die $@ if $@; + +system (".././vcsh test1 add 'a'"); + +my $output = `.././vcsh status`; + +ok $output eq "test1: +A a + +", 'Adding a file works'; + +done_testing; + diff --git a/t/950-delete.t b/t/950-delete.t new file mode 100644 index 0000000..cd07871 --- /dev/null +++ b/t/950-delete.t @@ -0,0 +1,19 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Cwd 'abs_path'; +use Test::Most; + +chdir 't/etc/' or die $!; + +$ENV{'HOME'} = abs_path ('.vcsh_home'); + +system ("echo 'Yes, do as I say' | ./vcsh delete test1"); + +my $output = `./vcsh status`; + +ok $output eq "", 'No repos set up anymore.'; + +done_testing; diff --git a/t/999-tear-env.t b/t/999-tear-env.t new file mode 100644 index 0000000..afe261a --- /dev/null +++ b/t/999-tear-env.t @@ -0,0 +1,17 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Shell::Command; +use Test::Most; + +chdir 't' or die $!; + +if (!-d 'etc') { + plan skip_all => 'No need to tear previous env.'; +} + +ok rm_rf 'etc'; + +done_testing; diff --git a/tools/hooks/pre-commit b/tools/hooks/pre-commit new file mode 100755 index 0000000..ddb0550 --- /dev/null +++ b/tools/hooks/pre-commit @@ -0,0 +1,7 @@ +#!/bin/sh + +# Unfortunately, Git decided to set those two during pre-commit +unset GIT_DIR +unset GIT_INDEX_FILE + +prove