Compare commits

..

18 Commits
v2.7 ... addons

Author SHA1 Message Date
Gina Trapani
294051fe5c Birdseye: Update version and changelog 2016-03-17 20:34:07 -04:00
Gina Trapani
5c6e3a36c1 Birdseye: Tabs to spaces 2016-03-17 20:34:02 -04:00
Gina Trapani
d32b5d62ad Birdseye: whitespace 2016-03-17 20:33:55 -04:00
Gina Trapani
def2a4b7c6 Merge pull request #153 from JonathanReeve/addons
Update birdseye script for compatibility with Python 3
2016-03-17 20:20:08 -04:00
Jonathan Reeve
732e45aeb1 remove unnecessary apostrophes 2015-02-15 14:54:50 -05:00
Jonathan Reeve
a53bb81b4c update for python 3 2015-02-15 14:53:02 -05:00
Jonathan Reeve
29a470f97d make scripts executable 2015-02-15 14:41:26 -05:00
Gina Trapani
6ab0004fe8 Fix IndexError: list index out of range when there's a blank line in todo.txt (like after deleting a task) 2012-02-14 18:02:11 -08:00
bertvv
15acb054f5 Have birdseye plugin use instead of hard-coded directory 2011-07-07 23:45:48 -07:00
ginatrapani
5f3dadee5c Updated to latest in master 2009-04-26 10:04:49 -07:00
Gina Trapani
20c6f44784 Ported README to Textile 2009-04-12 02:43:57 -04:00
Gina Trapani
9bab224a29 Merge branch 'master' of git://github.com/ginatrapani/todo.txt-cli into addons
* 'master' of git://github.com/ginatrapani/todo.txt-cli:
  Bugfix: pri accepted priorities of more than a single letter
  Don't set sort command in default todo.cfg.
  Don't set colors in default todo.cfg.
  Cleanup: removing annoying trailing space on pri tasks
  Cleanup: del/depri/pri: some more $2 -> $item
  Bugfix: handling of priorities in pri/depri/do: no more globbing
  Bugfix, take 2: depri no longer wipes out entire task with other parens http://tech.groups.yahoo.com/group/todotxt/message/1828
  Bugfix: depri no longer wipes out entire task with other parens http://tech.groups.yahoo.com/group/todotxt/message/1828
  Fix misplaced quote that was blocking filename globbing in the action
  Add quotes around $action to handle cases where todo.actions.d path includes embedded spaces.
2009-04-12 02:41:57 -04:00
Gina Trapani
a075adb4ec Merge git://github.com/ginatrapani/todo.txt-cli into addons 2009-04-06 12:37:31 -07:00
Gina Trapani
01a250c702 Added symlink support, tweaked usage message 2009-04-05 18:52:42 -07:00
Gina Trapani
1f17672215 Added birdseye add-on 2009-04-05 18:08:38 -07:00
Gina Trapani
40e0da5108 more info 2009-04-05 11:45:57 -07:00
Gina Trapani
56dfae0486 first commit 2009-04-05 11:42:16 -07:00
Gina Trapani
8549eef46b first commit 2009-04-05 11:21:12 -07:00
32 changed files with 686 additions and 3140 deletions

10
.todo.actions.d/README Normal file
View File

@@ -0,0 +1,10 @@
TODO.TXT CLI Add-ons
adda (symlink to aa for fewer keystrokes)
* Adds a task and prioritizes it A in one shot
addx (symlink ax for fewer keystrokes)
* Adds a task and marks it as complete in one shot
birdseye (requires Python in path and birdseye.py file)
* Generates a textual report of open and complete tasks in all contexts and projects

20
.todo.actions.d/adda Executable file
View File

@@ -0,0 +1,20 @@
#!/bin/bash
action=$1
shift
[ "$action" = "usage" ] && {
echo " Add and prioritize A:"
curcmd=`basename $0`
echo " $curcmd \"THING I NEED TO DO +project @context\""
echo " Add an item and prioritize it A in one step"
echo ""
exit
}
if "$TODO_SH" command add "$@"; then
# figure out the line of what we just added, and prioritize it A
line=`sed -n '$ =' "$TODO_FILE"`
echo "$line"
"$TODO_SH" command pri "$line" A
fi

20
.todo.actions.d/addx Executable file
View File

@@ -0,0 +1,20 @@
#!/bin/bash
action=$1
shift
[ "$action" = "usage" ] && {
echo " Add and do:"
curcmd=`basename $0`
echo " $curcmd \"THING I DID +project @context\""
echo " Add an item and mark it as done in one step"
echo ""
exit
}
if "$TODO_SH" command add "$@"; then
# figure out the line of what we just added, and prioritize it A
line=`sed -n '$ =' "$TODO_FILE"`
echo "$line"
"$TODO_SH" command do "$line"
fi

16
.todo.actions.d/birdseye Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
action=$1
shift
[ "$action" = "usage" ] && {
echo " Bird's eye report:"
echo " birdseye"
echo " generates a textual report of pending and completed tasks in all projects and contexts"
echo ""
exit
}
[ "$action" = "birdseye" ] && {
python ${TODO_ACTIONS_DIR}/birdseye.py "$TODO_FILE" "$DONE_FILE"
}

202
.todo.actions.d/birdseye.py Executable file
View File

@@ -0,0 +1,202 @@
#!/usr/bin/python
""" TODO.TXT Bird's Eye View Reporter
USAGE:
birdseye.py [todo.txt] [done.txt]
USAGE NOTES:
Expects two text files as parameters, each of which formatted as follows:
- One todo per line, ie, "call Mom"
- with an optional project association indicated as such: "+projectname"
- with the context in which the tasks should be completed, indicated as such: "@context"
- with the task priority optionally listed at the front of the line, in parens, ie, "(A)"
For example, 4 lines of todo.txt might look like this:
+garagesale @phone schedule Goodwill pickup
(A) @phone Tell Mom I love her
+writing draft Great American Novel
(B) smell the roses
The done.txt file is a list of completed todos from todo.txt.
See more on todo.txt here:
http://todotxt.com
OUTPUT:
Displays a list of:
- working projects and their percentage complete
- contexts in which open todos exist
- contexts and projects with tasks that have been prioritized
- projects which are completely done (don't have any open todos)
CHANGELOG:
2016.03.17 - Update for Python 3. Tx, JonathanReeve!
2006.07.29 - Now supports p:, p- and + project notation. Tx, Pedro!
2006.05.02 - Released
"""
import sys
__version__ = "1.2"
__date__ = "2006/05/02"
__updated__ = "2016/03/17"
__author__ = "Gina Trapani (ginatrapani@gmail.com)"
__copyright__ = "Copyright 2006 - 2016, Gina Trapani"
__license__ = "GPL"
__history__ = """
1.2 - Update for Python 3. Tx, JonathanReeve!
1.1 - Now supports p:, p- and + project notation. Tx, Pedro!
1.0 - Released.
"""
def usage():
print("USAGE: %s [todo.txt] [done.txt]" % (sys.argv[0], ))
def printTaskGroups(title, taskDict, priorityList, percentages):
print("")
print("%s"% (title,))
separator("-")
if not taskDict:
print("No items to list.")
else:
# sort the dictionary by value
# http://python.fyxm.net/peps/pep-0265.html
items = [(v, k) for k, v in list(taskDict.items())]
items.sort()
items.reverse() # so largest is first
items = [(k, v) for v, k in items]
for item in items:
if item[0] in priorityList:
if item[0] not in percentages:
printTaskGroup(item, -1, "*")
else:
printTaskGroup(item, percentages[item[0]], "*")
for item in items:
if item[0] not in priorityList:
if item[0] not in percentages:
printTaskGroup(item, -1, " ")
else:
printTaskGroup(item, percentages[item[0]], " ")
def printTaskGroup(p, pctage, star):
if pctage > -1:
progressBar = ""
numStars = int(pctage//10)
progressBar = "=" * numStars
numSpaces = 10 - numStars
for n in range(numSpaces):
progressBar += " "
if pctage > 9:
displayTotal = " %d%%"% (pctage, );
else:
displayTotal = " %d%%"% (pctage, );
print("%s %s [%s] %s (%d todos)"% (star, displayTotal, progressBar, p[0], p[1],))
else:
print("%s %s (%d todos)"% (star, p[0], p[1], ))
def separator(c):
sep = ""
sep = c * 42
print(sep)
def main(argv):
# make sure you have all your args
if len(argv) < 2:
usage()
sys.exit(2)
# process todo.txt
try:
f = open (argv[0], "r")
projects = {}
contexts = {}
projectPriority = []
contextPriority = []
for line in f:
prioritized = False
words = line.split()
if words and words[0].startswith("("):
prioritized = True
for word in words:
if word[0:2] == "p:" or word[0:2] == "p-" or word[0:1] == "+":
if word not in projects:
projects[word] = 1
else:
projects[word] = projects.setdefault(word,0) + 1
if prioritized:
projectPriority.append(word)
if word[0:1] == "@":
if word not in contexts:
contexts[word] = 1
else:
contexts[word] = contexts.setdefault(word, 0) + 1
if prioritized:
contextPriority.append(word)
f.close()
except IOError:
print("ERROR: The file named %s could not be read."% (argv[0], ))
usage()
sys.exit(2)
# process done.txt
try:
completedTasks = {}
f = open (argv[1], "r")
for line in f:
words = line.split()
for word in words:
if word[0:2] == "p:" or word[0:2] == "p-" or word[0:1] == "+":
if word not in completedTasks:
completedTasks[word] = 1
else:
completedTasks[word] = completedTasks.setdefault(word, 0) + 1
f.close()
except IOError:
print("ERROR: The file named %s could not be read."% (argv[1], ))
usage()
sys.exit(2)
# calculate percentages
projectPercentages = {}
for project in projects:
openTasks = projects[project]
if project in completedTasks:
closedTasks = completedTasks[project]
else:
closedTasks = 0
totalTasks = openTasks + closedTasks
projectPercentages[project] = (closedTasks*100) / totalTasks
# get projects all done
projectsWithNoIncompletes = {}
for task in completedTasks:
if task not in projects:
projectsWithNoIncompletes[task] = 0
# print out useful info
#print "TODO.TXT Bird's Eye View Report %s"% ( datetime.date.today().isoformat(), )
print("")
print("TODO.TXT Bird's Eye View Report")
separator("=")
printTaskGroups("Projects with Open TODOs", projects, projectPriority, projectPercentages)
printTaskGroups("Contexts with Open TODOs", contexts, contextPriority, projectPercentages)
printTaskGroups("Completed Projects (No open TODOs)", projectsWithNoIncompletes, projectPriority, projectPercentages)
print("")
print("* Projects and contexts with an asterisk next to them denote prioritized tasks.")
print("Project with prioritized tasks are listed first, then sorted by number of open todos.")
print("")
if __name__ == "__main__":
main(sys.argv[1:])

View File

@@ -23,4 +23,4 @@ h2. Quick Links
* Licensed under the "GPL":http://www.gnu.org/copyleft/gpl.html * Licensed under the "GPL":http://www.gnu.org/copyleft/gpl.html
* "Add-on Directory":http://wiki.github.com/ginatrapani/todo.txt-cli/todosh-add-on-directory * "Add-on Directory":http://wiki.github.com/ginatrapani/todo.txt-cli/todosh-add-on-directory
* "Changelog":http://wiki.github.com/ginatrapani/todo.txt-cli/todosh-changelog * "Changelog":http://wiki.github.com/ginatrapani/todo.txt-cli/todosh-changelog
* "Known Bugs":http://github.com/ginatrapani/todo.txt-cli/issues * "Known Bugs":http://wiki.github.com/ginatrapani/todo.txt-cli/known-bugs

View File

@@ -176,23 +176,6 @@ Test harness library
There are a handful helper functions defined in the test harness There are a handful helper functions defined in the test harness
library for your script to use. library for your script to use.
- test_todo_session <message> < transcript
This takes a single string as a parameter, which is treated
as a base description of what is being tested, and then
reads from standard input a transcript of todo.sh commands
and expected output. Each command is run in the current
test environment and the output is compared with the
expected output. (See below for how to generate transcripts
easily.)
- test_tick [interval]
The test harness has an internal view of time which is
implemented by wrapping the date command. This takes a single
optional positive integer parameter which indicates how much
to advance the internal time. The default value is one day.
- test_expect_success <message> <script> - test_expect_success <message> <script>
This takes two strings as parameter, and evaluates the This takes two strings as parameter, and evaluates the
@@ -228,31 +211,9 @@ library for your script to use.
exit with an appropriate error code. exit with an appropriate error code.
Generating test transcripts
---------------------------
You can generate test scripts from screenshots as following:
$ ./testshell.sh
You'll be in a special test environment with an empty todo.txt
and the dates and timestamps will be artificially fixed.
Then the session can be used to make a unit test thanks to
test_todo_session, see the existing tests as examples.
Be careful to replace all occurences of the full path to the test
directory by $HOME as testshell.sh will explain you when you execute it
otherwise the tests will work properly only on your own computer.
Don't use "script" as this would log every keystroke, not only what's
visible!!
Credits Credits
------- -------
This test framework was derived from the framework used by This test framework was derived from the framework used by
git itself, written originally by Junio Hamano and licensed git itself, written originally by Junio Hamano and licensed
for use under the GPL. It was specialized for todo.txt-cli for use under the GPL.
by Emil Sit and Philippe Teuwen.

View File

@@ -10,7 +10,7 @@ to find it somewhere else.
# Remove the pre-created todo.cfg to test behavior in its absence # Remove the pre-created todo.cfg to test behavior in its absence
rm -f todo.cfg rm -f todo.cfg
echo "Fatal Error: Cannot read configuration file $HOME/.todo/config" > expect echo "Fatal error: Cannot read configuration file $HOME/todo.cfg" > expect
test_expect_success 'no config file' ' test_expect_success 'no config file' '
todo.sh > output 2>&1 || test_cmp expect output todo.sh > output 2>&1 || test_cmp expect output
' '
@@ -23,24 +23,15 @@ EOF
cat > test.cfg << EOF cat > test.cfg << EOF
export TODO_DIR=. export TODO_DIR=.
export TODO_FILE="\$TODO_DIR/todo.txt" export TODO_FILE="$TODO_DIR/todo.txt"
export DONE_FILE="\$TODO_DIR/done.txt" export DONE_FILE="$TODO_DIR/done.txt"
export REPORT_FILE="\$TODO_DIR/report.txt" export REPORT_FILE="$TODO_DIR/report.txt"
export TMP_FILE="\$TODO_DIR/todo.tmp" export TMP_FILE="$TODO_DIR/todo.tmp"
touch used_config touch used_config
EOF EOF
rm -f used_config rm -f used_config
test_expect_success 'config file (default location 1)' ' test_expect_success 'config file (default location 1)' '
mkdir .todo
cp test.cfg .todo/config
todo.sh > output;
test_cmp expect output && test -f used_config &&
rm -rf .todo
'
rm -f used_config
test_expect_success 'config file (default location 2)' '
cp test.cfg todo.cfg cp test.cfg todo.cfg
todo.sh > output; todo.sh > output;
test_cmp expect output && test -f used_config && test_cmp expect output && test -f used_config &&
@@ -48,7 +39,7 @@ test_expect_success 'config file (default location 2)' '
' '
rm -f used_config rm -f used_config
test_expect_success 'config file (default location 3)' ' test_expect_success 'config file (default location 2)' '
cp test.cfg .todo.cfg cp test.cfg .todo.cfg
todo.sh > output; todo.sh > output;
test_cmp expect output && test -f used_config && test_cmp expect output && test -f used_config &&

View File

@@ -12,7 +12,7 @@ when there are no todos.
# #
cat > expect <<EOF cat > expect <<EOF
-- --
TODO: 0 of 0 tasks shown TODO: 0 of 0 tasks shown from $HOME/todo.txt
EOF EOF
test_expect_success 'null ls' ' test_expect_success 'null ls' '
@@ -44,7 +44,7 @@ test_expect_success 'null listpri a' '
# #
cat > expect <<EOF cat > expect <<EOF
-- --
TODO: 0 of 0 tasks shown TODO: 0 of 0 tasks shown from $HOME/todo.tmp
EOF EOF
test_expect_success 'null lsa' ' test_expect_success 'null lsa' '

View File

@@ -1,40 +0,0 @@
#!/bin/sh
test_description='todo.sh actions.d
This test just makes sure that todo.sh can locate custom actions.
'
. ./test-lib.sh
# All the below tests will output the custom action message
cat > expect << EOF
TODO: foo
EOF
cat > foo << EOF
echo "TODO: foo"
EOF
chmod +x foo
test_expect_success 'custom action (default location 1)' '
mkdir .todo.actions.d
cp foo .todo.actions.d/
todo.sh foo > output;
test_cmp expect output && rm -rf .todo.actions.d
'
test_expect_success 'custom action (default location 2)' '
mkdir -p .todo/actions
cp foo .todo/actions/
todo.sh foo > output;
test_cmp expect output && rm -rf .todo/actions
'
test_expect_success 'custom action (env variable)' '
mkdir myactions
cp foo myactions/
TODO_ACTIONS_DIR=myactions todo.sh foo > output;
test_cmp expect output && rm -rf myactions
'
test_done

View File

@@ -1,76 +0,0 @@
#!/bin/sh
test_description='basic add and list functionality
This test just makes sure the basic add and list
command work, including support for filtering.
'
. ./test-lib.sh
#
# Add and list
#
test_todo_session 'basic add/list' <<EOF
>>> todo.sh add notice the daisies
1 notice the daisies
TODO: 1 added.
>>> todo.sh list
1 notice the daisies
--
TODO: 1 of 1 tasks shown
>>> todo.sh add smell the roses
2 smell the roses
TODO: 2 added.
>>> todo.sh list
1 notice the daisies
2 smell the roses
--
TODO: 2 of 2 tasks shown
EOF
#
# Filter
#
test_todo_session 'basic list filtering' <<EOF
>>> todo.sh list daisies
1 notice the daisies
--
TODO: 1 of 2 tasks shown
>>> todo.sh list smell
2 smell the roses
--
TODO: 1 of 2 tasks shown
EOF
test_todo_session 'case-insensitive filtering' <<EOF
>>> todo.sh add smell the uppercase Roses
3 smell the uppercase Roses
TODO: 3 added.
>>> todo.sh list roses
2 smell the roses
3 smell the uppercase Roses
--
TODO: 2 of 3 tasks shown
EOF
test_todo_session 'add with &' <<EOF
>>> todo.sh add "dig the garden & water the flowers"
4 dig the garden & water the flowers
TODO: 4 added.
>>> todo.sh list
4 dig the garden & water the flowers
1 notice the daisies
2 smell the roses
3 smell the uppercase Roses
--
TODO: 4 of 4 tasks shown
EOF
test_done

View File

@@ -1,73 +0,0 @@
#!/bin/sh
test_description='test the date on add feature
Tests paths by which we might automatically add
a date to each item.
'
. ./test-lib.sh
#
# Add and list
#
test_todo_session 'cmd line first day' <<EOF
>>> todo.sh -t add notice the daisies
1 2009-02-13 notice the daisies
TODO: 1 added.
>>> todo.sh list
1 2009-02-13 notice the daisies
--
TODO: 1 of 1 tasks shown
EOF
test_tick
test_todo_session 'cmd line second day' <<EOF
>>> todo.sh -t add smell the roses
2 2009-02-14 smell the roses
TODO: 2 added.
>>> todo.sh list
1 2009-02-13 notice the daisies
2 2009-02-14 smell the roses
--
TODO: 2 of 2 tasks shown
EOF
test_tick
test_todo_session 'cmd line third day' <<EOF
>>> todo.sh -t add mow the lawn
3 2009-02-15 mow the lawn
TODO: 3 added.
>>> todo.sh list
1 2009-02-13 notice the daisies
2 2009-02-14 smell the roses
3 2009-02-15 mow the lawn
--
TODO: 3 of 3 tasks shown
EOF
# Switch to config file
echo "export TODOTXT_DATE_ON_ADD=1" >> todo.cfg
# Bump the clock, for good measure.
test_tick 3600
test_todo_session 'config file third day' <<EOF
>>> todo.sh add take out the trash
4 2009-02-15 take out the trash
TODO: 4 added.
>>> todo.sh list
1 2009-02-13 notice the daisies
2 2009-02-14 smell the roses
3 2009-02-15 mow the lawn
4 2009-02-15 take out the trash
--
TODO: 4 of 4 tasks shown
EOF
test_done

View File

@@ -1,83 +0,0 @@
#!/bin/sh
test_description='basic addto and list functionality
This test just makes sure the basic addto and listfile
commands work, including support for filtering.
'
. ./test-lib.sh
#
# Addto and listfile
#
test_todo_session 'nonexistant file' <<EOF
>>> todo.sh addto garden.txt notice the daisies
TODO: Destination file $HOME/garden.txt does not exist.
=== 1
EOF
touch "$HOME/garden.txt"
test_todo_session 'basic addto/listfile' <<EOF
>>> todo.sh addto garden.txt notice the daisies
1 notice the daisies
GARDEN: 1 added.
>>> todo.sh listfile garden.txt
1 notice the daisies
--
GARDEN: 1 of 1 tasks shown
>>> todo.sh addto garden.txt smell the roses
2 smell the roses
GARDEN: 2 added.
>>> todo.sh listfile garden.txt
1 notice the daisies
2 smell the roses
--
GARDEN: 2 of 2 tasks shown
EOF
#
# Filter
#
test_todo_session 'basic listfile filtering' <<EOF
>>> todo.sh listfile garden.txt daisies
1 notice the daisies
--
GARDEN: 1 of 2 tasks shown
>>> todo.sh listfile garden.txt smell
2 smell the roses
--
GARDEN: 1 of 2 tasks shown
EOF
test_todo_session 'case-insensitive filtering' <<EOF
>>> todo.sh addto garden.txt smell the uppercase Roses
3 smell the uppercase Roses
GARDEN: 3 added.
>>> todo.sh listfile garden.txt roses
2 smell the roses
3 smell the uppercase Roses
--
GARDEN: 2 of 3 tasks shown
EOF
test_todo_session 'addto with &' <<EOF
>>> todo.sh addto garden.txt "dig the garden & water the flowers"
4 dig the garden & water the flowers
GARDEN: 4 added.
>>> todo.sh listfile garden.txt
4 dig the garden & water the flowers
1 notice the daisies
2 smell the roses
3 smell the uppercase Roses
--
GARDEN: 4 of 4 tasks shown
EOF
test_done

View File

@@ -1,75 +0,0 @@
#!/bin/sh
test_description='test the date on addto feature
Tests paths by which we might automatically add
a date to each item.
'
. ./test-lib.sh
touch "$HOME/garden.txt"
#
# Add and list
#
test_todo_session 'cmd line first day' <<EOF
>>> todo.sh -t addto garden.txt notice the daisies
1 2009-02-13 notice the daisies
GARDEN: 1 added.
>>> todo.sh listfile garden.txt
1 2009-02-13 notice the daisies
--
GARDEN: 1 of 1 tasks shown
EOF
test_tick
test_todo_session 'cmd line second day' <<EOF
>>> todo.sh -t addto garden.txt smell the roses
2 2009-02-14 smell the roses
GARDEN: 2 added.
>>> todo.sh listfile garden.txt
1 2009-02-13 notice the daisies
2 2009-02-14 smell the roses
--
GARDEN: 2 of 2 tasks shown
EOF
test_tick
test_todo_session 'cmd line third day' <<EOF
>>> todo.sh -t addto garden.txt mow the lawn
3 2009-02-15 mow the lawn
GARDEN: 3 added.
>>> todo.sh listfile garden.txt
1 2009-02-13 notice the daisies
2 2009-02-14 smell the roses
3 2009-02-15 mow the lawn
--
GARDEN: 3 of 3 tasks shown
EOF
# Switch to config file
echo "export TODOTXT_DATE_ON_ADD=1" >> todo.cfg
# Bump the clock, for good measure.
test_tick 3600
test_todo_session 'config file third day' <<EOF
>>> todo.sh addto garden.txt take out the trash
4 2009-02-15 take out the trash
GARDEN: 4 added.
>>> todo.sh listfile garden.txt
1 2009-02-13 notice the daisies
2 2009-02-14 smell the roses
3 2009-02-15 mow the lawn
4 2009-02-15 take out the trash
--
GARDEN: 4 of 4 tasks shown
EOF
test_done

View File

@@ -1,134 +0,0 @@
#!/bin/sh
test_description='basic replace functionality
Ensure we can replace items successfully.
'
. ./test-lib.sh
#
# Set up the basic todo.txt
#
todo.sh add notice the daisies > /dev/null
test_todo_session 'replace usage' <<EOF
>>> todo.sh replace adf asdfa
=== 1
usage: todo.sh replace ITEM# "UPDATED ITEM"
EOF
test_todo_session 'basic replace' <<EOF
>>> todo.sh replace 1 "smell the cows"
1 notice the daisies
TODO: Replaced task with:
1 smell the cows
>>> todo.sh list
1 smell the cows
--
TODO: 1 of 1 tasks shown
>>> todo.sh replace 1 smell the roses
1 smell the cows
TODO: Replaced task with:
1 smell the roses
>>> todo.sh list
1 smell the roses
--
TODO: 1 of 1 tasks shown
EOF
cat > todo.txt <<EOF
smell the cows
grow some corn
thrash some hay
chase the chickens
EOF
test_todo_session 'replace in multi-item file' <<EOF
>>> todo.sh replace 1 smell the cheese
1 smell the cows
TODO: Replaced task with:
1 smell the cheese
>>> todo.sh replace 3 jump on hay
3 thrash some hay
TODO: Replaced task with:
3 jump on hay
>>> todo.sh replace 4 collect the eggs
4 chase the chickens
TODO: Replaced task with:
4 collect the eggs
EOF
test_todo_session 'replace with priority' <<EOF
>>> todo.sh pri 4 a
4 (A) collect the eggs
TODO: 4 prioritized (A).
>>> todo.sh replace 4 "collect the bread"
4 (A) collect the eggs
TODO: Replaced task with:
4 (A) collect the bread
>>> todo.sh replace 4 collect the eggs
4 (A) collect the bread
TODO: Replaced task with:
4 (A) collect the eggs
EOF
test_todo_session 'replace with &' << EOF
>>> todo.sh replace 3 "thrash the hay & thresh the wheat"
3 jump on hay
TODO: Replaced task with:
3 thrash the hay & thresh the wheat
EOF
test_todo_session 'replace error' << EOF
>>> todo.sh replace 10 "hej!"
=== 1
TODO: No task 10.
EOF
cat /dev/null > todo.txt
test_todo_session 'replace handling prepended date on add' <<EOF
>>> todo.sh -t add "new task"
1 2009-02-13 new task
TODO: 1 added.
>>> todo.sh replace 1 this is just a new one
1 2009-02-13 new task
TODO: Replaced task with:
1 2009-02-13 this is just a new one
>>> todo.sh replace 1 2010-07-04 this also has a new date
1 2009-02-13 this is just a new one
TODO: Replaced task with:
1 2010-07-04 this also has a new date
EOF
cat /dev/null > todo.txt
test_todo_session 'replace handling priority and prepended date on add' <<EOF
>>> todo.sh -t add "new task"
1 2009-02-13 new task
TODO: 1 added.
>>> todo.sh pri 1 A
1 (A) 2009-02-13 new task
TODO: 1 prioritized (A).
>>> todo.sh replace 1 this is just a new one
1 (A) 2009-02-13 new task
TODO: Replaced task with:
1 (A) 2009-02-13 this is just a new one
EOF
test_todo_session 'replace with prepended date replaces existing date' <<EOF
>>> todo.sh replace 1 2010-07-04 this also has a new date
1 (A) 2009-02-13 this is just a new one
TODO: Replaced task with:
1 (A) 2010-07-04 this also has a new date
EOF
test_done

View File

@@ -1,90 +0,0 @@
#!/bin/sh
test_description='basic priority functionality
'
. ./test-lib.sh
test_todo_session 'priority usage' <<EOF
>>> todo.sh pri B B
usage: todo.sh pri ITEM# PRIORITY
note: PRIORITY must be anywhere from A to Z.
=== 1
EOF
cat > todo.txt <<EOF
smell the uppercase Roses +flowers @outside
notice the sunflowers
stop
EOF
test_todo_session 'basic priority' <<EOF
>>> todo.sh list
2 notice the sunflowers
1 smell the uppercase Roses +flowers @outside
3 stop
--
TODO: 3 of 3 tasks shown
>>> todo.sh pri 1 B
1 (B) smell the uppercase Roses +flowers @outside
TODO: 1 prioritized (B).
>>> todo.sh list
1 (B) smell the uppercase Roses +flowers @outside
2 notice the sunflowers
3 stop
--
TODO: 3 of 3 tasks shown
>>> todo.sh -p list
1 (B) smell the uppercase Roses +flowers @outside
2 notice the sunflowers
3 stop
--
TODO: 3 of 3 tasks shown
>>> todo.sh pri 2 C
2 (C) notice the sunflowers
TODO: 2 prioritized (C).
>>> todo.sh -p list
1 (B) smell the uppercase Roses +flowers @outside
2 (C) notice the sunflowers
3 stop
--
TODO: 3 of 3 tasks shown
>>> todo.sh pri 2 A
2 (A) notice the sunflowers
TODO: 2 prioritized (A).
>>> todo.sh -p list
2 (A) notice the sunflowers
1 (B) smell the uppercase Roses +flowers @outside
3 stop
--
TODO: 3 of 3 tasks shown
>>> todo.sh pri 2 a
2 (A) notice the sunflowers
TODO: 2 prioritized (A).
>>> todo.sh -p listpri
2 (A) notice the sunflowers
1 (B) smell the uppercase Roses +flowers @outside
--
TODO: 2 of 3 tasks shown
>>> todo.sh add "smell the coffee +wakeup"
4 smell the coffee +wakeup
TODO: 4 added.
>>> todo.sh -p list
2 (A) notice the sunflowers
1 (B) smell the uppercase Roses +flowers @outside
4 smell the coffee +wakeup
3 stop
--
TODO: 4 of 4 tasks shown
EOF
test_done

View File

@@ -1,664 +0,0 @@
#!/bin/sh
#
test_description='list functionality
This test checks various list functionality including
sorting, output filtering and line numbering.
'
. ./test-lib.sh
TEST_TODO_=todo.cfg
cat > todo.txt <<EOF
ccc xxx this line should be third.
aaa zzz this line should be first.
bbb yyy this line should be second.
EOF
#
# check the sort filter
#
TEST_TODO1_=todo1.cfg
sed -e "s/^.*export TODOTXT_SORT_COMMAND=.*$/export TODOTXT_SORT_COMMAND='env LC_COLLATE=C sort -r -f -k2'/" "${TEST_TODO_}" > "${TEST_TODO1_}"
test_todo_session 'checking TODOTXT_SORT_COMMAND' <<EOF
>>> todo.sh ls
2 aaa zzz this line should be first.
3 bbb yyy this line should be second.
1 ccc xxx this line should be third.
--
TODO: 3 of 3 tasks shown
>>> todo.sh -d "$TEST_TODO1_" ls
1 ccc xxx this line should be third.
3 bbb yyy this line should be second.
2 aaa zzz this line should be first.
--
TODO: 3 of 3 tasks shown
EOF
#
# check the final filter
#
TEST_TODO2_=todo2.cfg
sed -e "s%^.*export TODOTXT_FINAL_FILTER=.*$%export TODOTXT_FINAL_FILTER=\"sed 's/^\\\(..\\\{20\\\}\\\).....*$/\\\1.../'\"%" "${TEST_TODO_}" > "${TEST_TODO2_}"
test_todo_session 'checking TODOTXT_FINAL_FILTER' <<EOF
>>> todo.sh -d "$TEST_TODO2_" ls
2 aaa zzz this line s...
3 bbb yyy this line s...
1 ccc xxx this line s...
--
TODO: 3 of 3 tasks shown
EOF
#
# check the filtering of TERM
#
test_todo_session 'checking filtering of TERM' <<EOF
>>> todo.sh ls second
3 bbb yyy this line should be second.
--
TODO: 1 of 3 tasks shown
>>> todo.sh ls "should be f"
2 aaa zzz this line should be first.
--
TODO: 1 of 3 tasks shown
>>> todo.sh ls " zzz"
2 aaa zzz this line should be first.
--
TODO: 1 of 3 tasks shown
EOF
#
# check the filtering of TERM with regexp
#
test_todo_session 'checking filtering of TERM with regexp' <<EOF
>>> todo.sh ls "ir[ds]"
2 aaa zzz this line should be first.
1 ccc xxx this line should be third.
--
TODO: 2 of 3 tasks shown
>>> todo.sh ls "f.*t"
2 aaa zzz this line should be first.
--
TODO: 1 of 3 tasks shown
>>> todo.sh ls "ir[ds]" xxx
1 ccc xxx this line should be third.
--
TODO: 1 of 3 tasks shown
EOF
#
# check the x command line option
#
TEST_TODO3_=todo3.cfg
sed -e "s%^.*export TODOTXT_FINAL_FILTER=.*$%export TODOTXT_FINAL_FILTER=\"grep -v xxx\"%" "${TEST_TODO_}" > "${TEST_TODO3_}"
cat > todo.txt <<EOF
foo
bar xxx
baz
EOF
test_todo_session 'final filter suppression' <<EOF
>>> todo.sh -d "$TEST_TODO3_" ls
3 baz
1 foo
--
TODO: 2 of 3 tasks shown
>>> todo.sh -d "$TEST_TODO3_" -x ls
2 bar xxx
3 baz
1 foo
--
TODO: 3 of 3 tasks shown
EOF
#
# check the p command line option
#
cat > todo.txt <<EOF
(A) @con01 +prj01 -- Some project 01 task, pri A
(A) @con01 +prj02 -- Some project 02 task, pri A
(A) @con02 +prj03 -- Some project 03 task, pri A
(A) @con02 +prj04 -- Some project 04 task, pri A
(B) @con01 +prj01 -- Some project 01 task, pri B
(B) @con01 +prj02 -- Some project 02 task, pri B
(B) @con02 +prj03 -- Some project 03 task, pri B
(B) @con02 +prj04 -- Some project 04 task, pri B
(C) @con01 +prj01 -- Some project 01 task, pri C
(C) @con01 +prj02 -- Some project 02 task, pri C
(C) @con02 +prj03 -- Some project 03 task, pri C
(C) @con02 +prj04 -- Some project 04 task, pri C
(D) @con01 +prj01 -- Some project 01 task, pri D
(D) @con01 +prj02 -- Some project 02 task, pri D
(D) @con02 +prj03 -- Some project 03 task, pri D
(D) @con02 +prj04 -- Some project 04 task, pri D
@con01 +prj01 -- Some project 01 task, no priority
@con01 +prj02 -- Some project 02 task, no priority
@con02 +prj03 -- Some project 03 task, no priorty
@con02 +prj04 -- Some project 04 task, no priority
EOF
test_todo_session 'plain mode option' <<EOF
>>> todo.sh ls
01 (A) @con01 +prj01 -- Some project 01 task, pri A
02 (A) @con01 +prj02 -- Some project 02 task, pri A
03 (A) @con02 +prj03 -- Some project 03 task, pri A
04 (A) @con02 +prj04 -- Some project 04 task, pri A
05 (B) @con01 +prj01 -- Some project 01 task, pri B
06 (B) @con01 +prj02 -- Some project 02 task, pri B
07 (B) @con02 +prj03 -- Some project 03 task, pri B
08 (B) @con02 +prj04 -- Some project 04 task, pri B
09 (C) @con01 +prj01 -- Some project 01 task, pri C
10 (C) @con01 +prj02 -- Some project 02 task, pri C
11 (C) @con02 +prj03 -- Some project 03 task, pri C
12 (C) @con02 +prj04 -- Some project 04 task, pri C
13 (D) @con01 +prj01 -- Some project 01 task, pri D
14 (D) @con01 +prj02 -- Some project 02 task, pri D
15 (D) @con02 +prj03 -- Some project 03 task, pri D
16 (D) @con02 +prj04 -- Some project 04 task, pri D
17 @con01 +prj01 -- Some project 01 task, no priority
18 @con01 +prj02 -- Some project 02 task, no priority
19 @con02 +prj03 -- Some project 03 task, no priorty
20 @con02 +prj04 -- Some project 04 task, no priority
--
TODO: 20 of 20 tasks shown
>>> todo.sh -p ls
01 (A) @con01 +prj01 -- Some project 01 task, pri A
02 (A) @con01 +prj02 -- Some project 02 task, pri A
03 (A) @con02 +prj03 -- Some project 03 task, pri A
04 (A) @con02 +prj04 -- Some project 04 task, pri A
05 (B) @con01 +prj01 -- Some project 01 task, pri B
06 (B) @con01 +prj02 -- Some project 02 task, pri B
07 (B) @con02 +prj03 -- Some project 03 task, pri B
08 (B) @con02 +prj04 -- Some project 04 task, pri B
09 (C) @con01 +prj01 -- Some project 01 task, pri C
10 (C) @con01 +prj02 -- Some project 02 task, pri C
11 (C) @con02 +prj03 -- Some project 03 task, pri C
12 (C) @con02 +prj04 -- Some project 04 task, pri C
13 (D) @con01 +prj01 -- Some project 01 task, pri D
14 (D) @con01 +prj02 -- Some project 02 task, pri D
15 (D) @con02 +prj03 -- Some project 03 task, pri D
16 (D) @con02 +prj04 -- Some project 04 task, pri D
17 @con01 +prj01 -- Some project 01 task, no priority
18 @con01 +prj02 -- Some project 02 task, no priority
19 @con02 +prj03 -- Some project 03 task, no priorty
20 @con02 +prj04 -- Some project 04 task, no priority
--
TODO: 20 of 20 tasks shown
EOF
#
# check the P,@,+ command line options
#
cat > todo.txt <<EOF
(A) @con01 +prj01 -- Some project 01 task, pri A
(A) @con01 +prj02 -- Some project 02 task, pri A
(A) @con02 +prj03 -- Some project 03 task, pri A
(A) @con02 +prj04 -- Some project 04 task, pri A
(B) @con01 +prj01 -- Some project 01 task, pri B
(B) @con01 +prj02 -- Some project 02 task, pri B
(B) @con02 +prj03 -- Some project 03 task, pri B
(B) @con02 +prj04 -- Some project 04 task, pri B
(C) @con01 +prj01 -- Some project 01 task, pri C
(C) @con01 +prj02 -- Some project 02 task, pri C
(C) @con02 +prj03 -- Some project 03 task, pri C
(C) @con02 +prj04 -- Some project 04 task, pri C
(D) @con01 +prj01 -- Some project 01 task, pri D
(D) @con01 +prj02 -- Some project 02 task, pri D
(D) @con02 +prj03 -- Some project 03 task, pri D
(D) @con02 +prj04 -- Some project 04 task, pri D
@con01 +prj01 -- Some project 01 task, no priority
@con01 +prj02 -- Some project 02 task, no priority
@con02 +prj03 -- Some project 03 task, no priorty
@con02 +prj04 -- Some project 04 task, no priority
EOF
test_todo_session 'context, project, and priority suppression' <<EOF
>>> todo.sh ls
01 (A) @con01 +prj01 -- Some project 01 task, pri A
02 (A) @con01 +prj02 -- Some project 02 task, pri A
03 (A) @con02 +prj03 -- Some project 03 task, pri A
04 (A) @con02 +prj04 -- Some project 04 task, pri A
05 (B) @con01 +prj01 -- Some project 01 task, pri B
06 (B) @con01 +prj02 -- Some project 02 task, pri B
07 (B) @con02 +prj03 -- Some project 03 task, pri B
08 (B) @con02 +prj04 -- Some project 04 task, pri B
09 (C) @con01 +prj01 -- Some project 01 task, pri C
10 (C) @con01 +prj02 -- Some project 02 task, pri C
11 (C) @con02 +prj03 -- Some project 03 task, pri C
12 (C) @con02 +prj04 -- Some project 04 task, pri C
13 (D) @con01 +prj01 -- Some project 01 task, pri D
14 (D) @con01 +prj02 -- Some project 02 task, pri D
15 (D) @con02 +prj03 -- Some project 03 task, pri D
16 (D) @con02 +prj04 -- Some project 04 task, pri D
17 @con01 +prj01 -- Some project 01 task, no priority
18 @con01 +prj02 -- Some project 02 task, no priority
19 @con02 +prj03 -- Some project 03 task, no priorty
20 @con02 +prj04 -- Some project 04 task, no priority
--
TODO: 20 of 20 tasks shown
>>> todo.sh ls @con01
01 (A) @con01 +prj01 -- Some project 01 task, pri A
02 (A) @con01 +prj02 -- Some project 02 task, pri A
05 (B) @con01 +prj01 -- Some project 01 task, pri B
06 (B) @con01 +prj02 -- Some project 02 task, pri B
09 (C) @con01 +prj01 -- Some project 01 task, pri C
10 (C) @con01 +prj02 -- Some project 02 task, pri C
13 (D) @con01 +prj01 -- Some project 01 task, pri D
14 (D) @con01 +prj02 -- Some project 02 task, pri D
17 @con01 +prj01 -- Some project 01 task, no priority
18 @con01 +prj02 -- Some project 02 task, no priority
--
TODO: 10 of 20 tasks shown
>>> todo.sh -P ls @con01
01 @con01 +prj01 -- Some project 01 task, pri A
02 @con01 +prj02 -- Some project 02 task, pri A
05 @con01 +prj01 -- Some project 01 task, pri B
06 @con01 +prj02 -- Some project 02 task, pri B
09 @con01 +prj01 -- Some project 01 task, pri C
10 @con01 +prj02 -- Some project 02 task, pri C
13 @con01 +prj01 -- Some project 01 task, pri D
14 @con01 +prj02 -- Some project 02 task, pri D
17 @con01 +prj01 -- Some project 01 task, no priority
18 @con01 +prj02 -- Some project 02 task, no priority
--
TODO: 10 of 20 tasks shown
>>> todo.sh -+ ls @con01
01 (A) @con01 -- Some project 01 task, pri A
02 (A) @con01 -- Some project 02 task, pri A
05 (B) @con01 -- Some project 01 task, pri B
06 (B) @con01 -- Some project 02 task, pri B
09 (C) @con01 -- Some project 01 task, pri C
10 (C) @con01 -- Some project 02 task, pri C
13 (D) @con01 -- Some project 01 task, pri D
14 (D) @con01 -- Some project 02 task, pri D
17 @con01 -- Some project 01 task, no priority
18 @con01 -- Some project 02 task, no priority
--
TODO: 10 of 20 tasks shown
>>> todo.sh -@ ls @con01
01 (A) +prj01 -- Some project 01 task, pri A
02 (A) +prj02 -- Some project 02 task, pri A
05 (B) +prj01 -- Some project 01 task, pri B
06 (B) +prj02 -- Some project 02 task, pri B
09 (C) +prj01 -- Some project 01 task, pri C
10 (C) +prj02 -- Some project 02 task, pri C
13 (D) +prj01 -- Some project 01 task, pri D
14 (D) +prj02 -- Some project 02 task, pri D
17 +prj01 -- Some project 01 task, no priority
18 +prj02 -- Some project 02 task, no priority
--
TODO: 10 of 20 tasks shown
>>> todo.sh -P -@ ls @con01
01 +prj01 -- Some project 01 task, pri A
02 +prj02 -- Some project 02 task, pri A
05 +prj01 -- Some project 01 task, pri B
06 +prj02 -- Some project 02 task, pri B
09 +prj01 -- Some project 01 task, pri C
10 +prj02 -- Some project 02 task, pri C
13 +prj01 -- Some project 01 task, pri D
14 +prj02 -- Some project 02 task, pri D
17 +prj01 -- Some project 01 task, no priority
18 +prj02 -- Some project 02 task, no priority
--
TODO: 10 of 20 tasks shown
>>> todo.sh -P -@ -+ -P -@ -+ ls @con01
01 (A) @con01 +prj01 -- Some project 01 task, pri A
02 (A) @con01 +prj02 -- Some project 02 task, pri A
05 (B) @con01 +prj01 -- Some project 01 task, pri B
06 (B) @con01 +prj02 -- Some project 02 task, pri B
09 (C) @con01 +prj01 -- Some project 01 task, pri C
10 (C) @con01 +prj02 -- Some project 02 task, pri C
13 (D) @con01 +prj01 -- Some project 01 task, pri D
14 (D) @con01 +prj02 -- Some project 02 task, pri D
17 @con01 +prj01 -- Some project 01 task, no priority
18 @con01 +prj02 -- Some project 02 task, no priority
--
TODO: 10 of 20 tasks shown
>>> todo.sh -P -@ -+ -P -@ -+ -P -@ -+ ls @con01
01 -- Some project 01 task, pri A
02 -- Some project 02 task, pri A
05 -- Some project 01 task, pri B
06 -- Some project 02 task, pri B
09 -- Some project 01 task, pri C
10 -- Some project 02 task, pri C
13 -- Some project 01 task, pri D
14 -- Some project 02 task, pri D
17 -- Some project 01 task, no priority
18 -- Some project 02 task, no priority
--
TODO: 10 of 20 tasks shown
EOF
#
# check the line number padding
#
cat > todo.txt <<EOF
hex00 this is one line
hex01 this is another line
hex02 this is another line
hex03 this is another line
hex04 this is another line
hex05 this is another line
hex06 this is another line
hex07 this is another line
hex08 this is another line
hex09 this is another line
hex0A this is another line
hex0B this is another line
hex0C this is another line
hex0D this is another line
hex0E this is another line
hex0F this is another line
hex10 this is line is a multiple of 16
hex11 this is another line
hex12 this is another line
hex13 this is another line
hex14 this is another line
hex15 this is another line
hex16 this is another line
hex17 this is another line
hex18 this is another line
hex19 this is another line
hex1A this is another line
hex1B this is another line
hex1C this is another line
hex1D this is another line
hex1E this is another line
hex1F this is another line
hex20 this is line is a multiple of 16
hex21 this is another line
hex22 this is another line
hex23 this is another line
hex24 this is another line
hex25 this is another line
hex26 this is another line
hex27 this is another line
hex28 this is another line
hex29 this is another line
hex2A this is another line
hex2B this is another line
hex2C this is another line
hex2D this is another line
hex2E this is another line
hex2F this is another line
hex30 this is line is a multiple of 16
hex31 this is another line
hex32 this is another line
hex33 this is another line
hex34 this is another line
hex35 this is another line
hex36 this is another line
hex37 this is another line
hex38 this is another line
hex39 this is another line
hex3A this is another line
hex3B this is another line
hex3C this is another line
hex3D this is another line
hex3E this is another line
hex3F this is another line
hex40 this is line is a multiple of 16
hex41 this is another line
hex42 this is another line
hex43 this is another line
hex44 this is another line
hex45 this is another line
hex46 this is another line
hex47 this is another line
hex48 this is another line
hex49 this is another line
hex4A this is another line
hex4B this is another line
hex4C this is another line
hex4D this is another line
hex4E this is another line
hex4F this is another line
hex50 this is line is a multiple of 16
hex51 this is another line
hex52 this is another line
hex53 this is another line
hex54 this is another line
hex55 this is another line
hex56 this is another line
hex57 this is another line
hex58 this is another line
hex59 this is another line
hex5A this is another line
hex5B this is another line
hex5C this is another line
hex5D this is another line
hex5E this is another line
hex5F this is another line
hex60 this is line is a multiple of 16
hex61 this is another line
hex62 this is another line
hex63 this is another line
hex64 this is another line
hex65 this is another line
hex66 this is another line
hex67 this is another line
hex68 this is another line
hex69 this is another line
hex6A this is another line
hex6B this is another line
hex6C this is another line
hex6D this is another line
hex6E this is another line
hex6F this is another line
EOF
test_todo_session 'check line number padding, out to 3 digits' <<EOF
>>> todo.sh ls
001 hex00 this is one line
002 hex01 this is another line
003 hex02 this is another line
004 hex03 this is another line
005 hex04 this is another line
006 hex05 this is another line
007 hex06 this is another line
008 hex07 this is another line
009 hex08 this is another line
010 hex09 this is another line
011 hex0A this is another line
012 hex0B this is another line
013 hex0C this is another line
014 hex0D this is another line
015 hex0E this is another line
016 hex0F this is another line
017 hex10 this is line is a multiple of 16
018 hex11 this is another line
019 hex12 this is another line
020 hex13 this is another line
021 hex14 this is another line
022 hex15 this is another line
023 hex16 this is another line
024 hex17 this is another line
025 hex18 this is another line
026 hex19 this is another line
027 hex1A this is another line
028 hex1B this is another line
029 hex1C this is another line
030 hex1D this is another line
031 hex1E this is another line
032 hex1F this is another line
033 hex20 this is line is a multiple of 16
034 hex21 this is another line
035 hex22 this is another line
036 hex23 this is another line
037 hex24 this is another line
038 hex25 this is another line
039 hex26 this is another line
040 hex27 this is another line
041 hex28 this is another line
042 hex29 this is another line
043 hex2A this is another line
044 hex2B this is another line
045 hex2C this is another line
046 hex2D this is another line
047 hex2E this is another line
048 hex2F this is another line
049 hex30 this is line is a multiple of 16
050 hex31 this is another line
051 hex32 this is another line
052 hex33 this is another line
053 hex34 this is another line
054 hex35 this is another line
055 hex36 this is another line
056 hex37 this is another line
057 hex38 this is another line
058 hex39 this is another line
059 hex3A this is another line
060 hex3B this is another line
061 hex3C this is another line
062 hex3D this is another line
063 hex3E this is another line
064 hex3F this is another line
065 hex40 this is line is a multiple of 16
066 hex41 this is another line
067 hex42 this is another line
068 hex43 this is another line
069 hex44 this is another line
070 hex45 this is another line
071 hex46 this is another line
072 hex47 this is another line
073 hex48 this is another line
074 hex49 this is another line
075 hex4A this is another line
076 hex4B this is another line
077 hex4C this is another line
078 hex4D this is another line
079 hex4E this is another line
080 hex4F this is another line
081 hex50 this is line is a multiple of 16
082 hex51 this is another line
083 hex52 this is another line
084 hex53 this is another line
085 hex54 this is another line
086 hex55 this is another line
087 hex56 this is another line
088 hex57 this is another line
089 hex58 this is another line
090 hex59 this is another line
091 hex5A this is another line
092 hex5B this is another line
093 hex5C this is another line
094 hex5D this is another line
095 hex5E this is another line
096 hex5F this is another line
097 hex60 this is line is a multiple of 16
098 hex61 this is another line
099 hex62 this is another line
100 hex63 this is another line
101 hex64 this is another line
102 hex65 this is another line
103 hex66 this is another line
104 hex67 this is another line
105 hex68 this is another line
106 hex69 this is another line
107 hex6A this is another line
108 hex6B this is another line
109 hex6C this is another line
110 hex6D this is another line
111 hex6E this is another line
112 hex6F this is another line
--
TODO: 112 of 112 tasks shown
EOF
#
# check that blank lines are ignored.
#
# Less than 10
cat > todo.txt <<EOF
hex00 this is one line
hex02 this is another line
hex03 this is another line
hex04 this is another line
hex05 this is another line
hex06 this is another line
hex07 this is another line
EOF
test_todo_session 'check that blank lines are ignored for less than 10 items' <<EOF
>>> todo.sh ls
1 hex00 this is one line
3 hex02 this is another line
4 hex03 this is another line
5 hex04 this is another line
6 hex05 this is another line
7 hex06 this is another line
8 hex07 this is another line
--
TODO: 7 of 7 tasks shown
EOF
# More than 10
cat > todo.txt <<EOF
hex00 this is one line
hex02 this is another line
hex03 this is another line
hex04 this is another line
hex05 this is another line
hex06 this is another line
hex07 this is another line
hex08 this is another line
hex09 this is another line
EOF
test_todo_session 'check that blank lines are ignored for blank lines whose ID begins with `0` (one blank)' <<EOF
>>> todo.sh ls
01 hex00 this is one line
03 hex02 this is another line
04 hex03 this is another line
05 hex04 this is another line
06 hex05 this is another line
07 hex06 this is another line
08 hex07 this is another line
09 hex08 this is another line
10 hex09 this is another line
--
TODO: 9 of 9 tasks shown
EOF
cat > todo.txt <<EOF
hex00 this is one line
hex02 this is another line
hex03 this is another line
hex04 this is another line
hex05 this is another line
hex07 this is another line
hex08 this is another line
hex09 this is another line
EOF
test_todo_session 'check that blank lines are ignored for blank lines whose ID begins with `0` (many blanks)' <<EOF
>>> todo.sh ls
01 hex00 this is one line
03 hex02 this is another line
04 hex03 this is another line
05 hex04 this is another line
06 hex05 this is another line
08 hex07 this is another line
09 hex08 this is another line
10 hex09 this is another line
--
TODO: 8 of 8 tasks shown
EOF
test_done

View File

@@ -1,58 +0,0 @@
#!/bin/sh
#
test_description='listcon functionality
This test checks basic context listing functionality
'
. ./test-lib.sh
cat > todo.txt <<EOF
item 1
item 2
item 3
EOF
test_expect_success 'listcon no contexts' '
todo.sh listcon > output && ! test -s output
'
cat > todo.txt <<EOF
(A) @1 -- Some context 1 task, whitespace, one char
(A) @c2 -- Some context 2 task, whitespace, two char
@con03 -- Some context 3 task, no whitespace
@con04 -- Some context 4 task, no whitespace
@con05@con06 -- weird context
EOF
test_todo_session 'Single context per line' <<EOF
>>> todo.sh listcon
@1
@c2
@con03
@con04
@con05@con06
EOF
cat > todo.txt <<EOF
@con01 -- Some context 1 task
@con02 -- Some context 2 task
@con02 @con03 -- Multi-context task
EOF
test_todo_session 'Multi-context per line' <<EOF
>>> todo.sh listcon
@con01
@con02
@con03
EOF
cat > todo.txt <<EOF
@con01 -- Some context 1 task
@con02 -- Some context 2 task
@con02 ginatrapani@gmail.com -- Some context 2 task
EOF
test_todo_session 'listcon e-mail address test' <<EOF
>>> todo.sh listcon
@con01
@con02
EOF
test_done

View File

@@ -1,58 +0,0 @@
#!/bin/sh
#
test_description='listproj functionality
This test checks basic project listing functionality
'
. ./test-lib.sh
cat > todo.txt <<EOF
item 1
item 2
item 3
EOF
test_expect_success 'listproj no projects' '
todo.sh listproj > output && ! test -s output
'
cat > todo.txt <<EOF
(A) +1 -- Some project 1 task, whitespace, one char
(A) +p2 -- Some project 2 task, whitespace, two char
+prj03 -- Some project 3 task, no whitespace
+prj04 -- Some project 4 task, no whitespace
+prj05+prj06 -- weird project
EOF
test_todo_session 'Single project per line' <<EOF
>>> todo.sh listproj
+1
+p2
+prj03
+prj04
+prj05+prj06
EOF
cat > todo.txt <<EOF
+prj01 -- Some project 1 task
+prj02 -- Some project 2 task
+prj02 +prj03 -- Multi-project task
EOF
test_todo_session 'Multi-project per line' <<EOF
>>> todo.sh listproj
+prj01
+prj02
+prj03
EOF
cat > todo.txt <<EOF
+prj01 -- Some project 1 task
+prj02 -- Some project 2 task
+prj02 ginatrapani+todo@gmail.com -- Some project 2 task
EOF
test_todo_session 'listproj embedded + test' <<EOF
>>> todo.sh listproj
+prj01
+prj02
EOF
test_done

View File

@@ -1,151 +0,0 @@
#!/bin/sh
#
test_description='list highlighting
This test checks the highlighting (with colors) of prioritized tasks.
'
. ./test-lib.sh
TEST_TODO_=todo.cfg
#
# check the highlighting of prioritized tasks
#
cat > todo.txt <<EOF
(A) @con01 +prj01 -- Some project 01 task, pri A
(B) @con02 +prj02 -- Some project 02 task, pri B
(C) @con01 +prj01 -- Some project 01 task, pri C
(D) @con02 +prj02 -- Some project 02 task, pri D
(E) @con01 +prj01 -- Some project 01 task, pri E
(Z) @con02 +prj02 -- Some project 02 task, pri Z
@con01 +prj01 -- Some project 01 task, no priority
@con02 +prj02 -- Some project 02 task, no priority
EOF
test_todo_session 'default highlighting' <<EOF
>>> todo.sh ls
1 (A) @con01 +prj01 -- Some project 01 task, pri A
2 (B) @con02 +prj02 -- Some project 02 task, pri B
3 (C) @con01 +prj01 -- Some project 01 task, pri C
4 (D) @con02 +prj02 -- Some project 02 task, pri D
5 (E) @con01 +prj01 -- Some project 01 task, pri E
6 (Z) @con02 +prj02 -- Some project 02 task, pri Z
7 @con01 +prj01 -- Some project 01 task, no priority
8 @con02 +prj02 -- Some project 02 task, no priority
--
TODO: 8 of 8 tasks shown
EOF
#
# check changing the color definitions into something other than ANSI color
# escape sequences
#
TEST_TODO_CUSTOM=todo-custom.cfg
cat todo.cfg > "$TEST_TODO_CUSTOM"
cat >> "$TEST_TODO_CUSTOM" <<'EOF'
export YELLOW='${color yellow}'
export GREEN='${color green}'
export LIGHT_BLUE='${color LightBlue}'
export WHITE='${color white}'
export DEFAULT='${color}'
export PRI_A=$YELLOW
export PRI_B=$GREEN
export PRI_C=$LIGHT_BLUE
export PRI_X=$WHITE
EOF
test_todo_session 'customized highlighting' <<'EOF'
>>> todo.sh -d "$TEST_TODO_CUSTOM" ls
${color yellow}1 (A) @con01 +prj01 -- Some project 01 task, pri A${color}
${color green}2 (B) @con02 +prj02 -- Some project 02 task, pri B${color}
${color LightBlue}3 (C) @con01 +prj01 -- Some project 01 task, pri C${color}
${color white}4 (D) @con02 +prj02 -- Some project 02 task, pri D${color}
${color white}5 (E) @con01 +prj01 -- Some project 01 task, pri E${color}
${color white}6 (Z) @con02 +prj02 -- Some project 02 task, pri Z${color}
7 @con01 +prj01 -- Some project 01 task, no priority
8 @con02 +prj02 -- Some project 02 task, no priority
--
TODO: 8 of 8 tasks shown
EOF
#
# check defining highlightings for more priorities than the default A, B, C
#
TEST_TODO_ADDITIONAL=todo-additional.cfg
cat todo.cfg > "$TEST_TODO_ADDITIONAL"
cat >> "$TEST_TODO_ADDITIONAL" <<'EOF'
export PRI_E=$BROWN
export PRI_Z=$LIGHT_PURPLE
EOF
test_todo_session 'additional highlighting pri E+Z' <<'EOF'
>>> todo.sh -d "$TEST_TODO_ADDITIONAL" ls
1 (A) @con01 +prj01 -- Some project 01 task, pri A
2 (B) @con02 +prj02 -- Some project 02 task, pri B
3 (C) @con01 +prj01 -- Some project 01 task, pri C
4 (D) @con02 +prj02 -- Some project 02 task, pri D
5 (E) @con01 +prj01 -- Some project 01 task, pri E
6 (Z) @con02 +prj02 -- Some project 02 task, pri Z
7 @con01 +prj01 -- Some project 01 task, no priority
8 @con02 +prj02 -- Some project 02 task, no priority
--
TODO: 8 of 8 tasks shown
EOF
# check changing the fallback highlighting for undefined priorities
#
TEST_TODO_PRI_X=todo-pri-x.cfg
cat todo.cfg > "$TEST_TODO_PRI_X"
cat >> "$TEST_TODO_PRI_X" <<'EOF'
export PRI_X=$BROWN
EOF
test_todo_session 'different highlighting for pri X' <<'EOF'
>>> todo.sh -d "$TEST_TODO_PRI_X" ls
1 (A) @con01 +prj01 -- Some project 01 task, pri A
2 (B) @con02 +prj02 -- Some project 02 task, pri B
3 (C) @con01 +prj01 -- Some project 01 task, pri C
4 (D) @con02 +prj02 -- Some project 02 task, pri D
5 (E) @con01 +prj01 -- Some project 01 task, pri E
6 (Z) @con02 +prj02 -- Some project 02 task, pri Z
7 @con01 +prj01 -- Some project 01 task, no priority
8 @con02 +prj02 -- Some project 02 task, no priority
--
TODO: 8 of 8 tasks shown
EOF
# check highlighting of done (but not yet archived) tasks
#
cat > todo.txt <<EOF
(A) smell the uppercase Roses +flowers @outside
remove1
notice the sunflowers
remove2
stop
EOF
test_todo_session 'highlighting of done tasks' <<EOF
>>> todo.sh -a do 2
2 x 2009-02-13 remove1
TODO: 2 marked as done.
>>> todo.sh list
1 (A) smell the uppercase Roses +flowers @outside
3 notice the sunflowers
4 remove2
5 stop
2 x 2009-02-13 remove1
--
TODO: 5 of 5 tasks shown
>>> todo.sh -a do 4
4 x 2009-02-13 remove2
TODO: 4 marked as done.
>>> todo.sh list
1 (A) smell the uppercase Roses +flowers @outside
3 notice the sunflowers
5 stop
2 x 2009-02-13 remove1
4 x 2009-02-13 remove2
--
TODO: 5 of 5 tasks shown
EOF
test_done

View File

@@ -1,94 +0,0 @@
#!/bin/sh
test_description='basic prepend functionality
'
. ./test-lib.sh
test_todo_session 'prepend usage' <<EOF
>>> todo.sh prepend B B
usage: todo.sh prepend ITEM# "TEXT TO PREPEND"
=== 1
EOF
cat > todo.txt <<EOF
(B) smell the uppercase Roses +flowers @outside
notice the sunflowers
stop
EOF
test_todo_session 'basic prepend' <<EOF
>>> todo.sh list
1 (B) smell the uppercase Roses +flowers @outside
2 notice the sunflowers
3 stop
--
TODO: 3 of 3 tasks shown
>>> todo.sh -p list
1 (B) smell the uppercase Roses +flowers @outside
2 notice the sunflowers
3 stop
--
TODO: 3 of 3 tasks shown
>>> todo.sh prepend 2 test
2 test notice the sunflowers
>>> todo.sh -p list
1 (B) smell the uppercase Roses +flowers @outside
3 stop
2 test notice the sunflowers
--
TODO: 3 of 3 tasks shown
>>> todo.sh prepend 1 test
1 (B) test smell the uppercase Roses +flowers @outside
>>> todo.sh -p list
1 (B) test smell the uppercase Roses +flowers @outside
3 stop
2 test notice the sunflowers
--
TODO: 3 of 3 tasks shown
EOF
test_todo_session 'prepend with &' <<EOF
>>> todo.sh prepend 3 "no running & jumping now"
3 no running & jumping now stop
EOF
cat /dev/null > todo.txt
test_todo_session 'prepend handling prepended date on add' <<EOF
>>> todo.sh -t add "new task"
1 2009-02-13 new task
TODO: 1 added.
>>> todo.sh prepend 1 "this is just a"
1 2009-02-13 this is just a new task
EOF
cat /dev/null > todo.txt
test_todo_session 'prepend handling priority and prepended date on add' <<EOF
>>> todo.sh -t add "new task"
1 2009-02-13 new task
TODO: 1 added.
>>> todo.sh pri 1 A
1 (A) 2009-02-13 new task
TODO: 1 prioritized (A).
>>> todo.sh prepend 1 "this is just a"
1 (A) 2009-02-13 this is just a new task
EOF
cat /dev/null > todo.txt
test_todo_session 'prepend with prepended date keeps both' <<EOF
>>> todo.sh -t add "new task"
1 2009-02-13 new task
TODO: 1 added.
>>> todo.sh prepend 1 "2010-07-04 this is just a"
1 2009-02-13 2010-07-04 this is just a new task
EOF
test_done

View File

@@ -1,86 +0,0 @@
#!/bin/sh
test_description='do functionality
'
. ./test-lib.sh
#DATE=`date '+%Y-%m-%d'`
test_todo_session 'do usage' <<EOF
>>> todo.sh do B B
usage: todo.sh do ITEM#[, ITEM#, ITEM#, ...]
=== 1
EOF
test_todo_session 'do missing ITEM#' <<EOF
>>> todo.sh do
usage: todo.sh do ITEM#[, ITEM#, ITEM#, ...]
=== 1
EOF
cat > todo.txt <<EOF
smell the uppercase Roses +flowers @outside
notice the sunflowers
stop
remove1
remove2
remove3
remove4
EOF
test_todo_session 'basic do' <<EOF
>>> todo.sh list
2 notice the sunflowers
4 remove1
5 remove2
6 remove3
7 remove4
1 smell the uppercase Roses +flowers @outside
3 stop
--
TODO: 7 of 7 tasks shown
>>> todo.sh do 7,6
7 x 2009-02-13 remove4
TODO: 7 marked as done.
6 x 2009-02-13 remove3
TODO: 6 marked as done.
x 2009-02-13 remove3
x 2009-02-13 remove4
TODO: $HOME/todo.txt archived.
>>> todo.sh -p list
2 notice the sunflowers
4 remove1
5 remove2
1 smell the uppercase Roses +flowers @outside
3 stop
--
TODO: 5 of 5 tasks shown
>>> todo.sh do 5 4
5 x 2009-02-13 remove2
TODO: 5 marked as done.
4 x 2009-02-13 remove1
TODO: 4 marked as done.
x 2009-02-13 remove1
x 2009-02-13 remove2
TODO: $HOME/todo.txt archived.
>>> todo.sh -p list
2 notice the sunflowers
1 smell the uppercase Roses +flowers @outside
3 stop
--
TODO: 3 of 3 tasks shown
EOF
test_todo_session 'fail multiple do attempts' <<EOF
>>> todo.sh -a do 3
3 x 2009-02-13 stop
TODO: 3 marked as done.
>>> todo.sh -a do 3
3 is already marked done
EOF
test_done

View File

@@ -1,76 +0,0 @@
#!/bin/sh
test_description='basic append functionality
Ensure we can append items successfully.
'
. ./test-lib.sh
#
# Set up the basic todo.txt
#
todo.sh add notice the daisies > /dev/null
test_todo_session 'append usage' <<EOF
>>> todo.sh append adf asdfa
=== 1
usage: todo.sh append ITEM# "TEXT TO APPEND"
EOF
test_todo_session 'basic append' <<EOF
>>> todo.sh append 1 "smell the roses"
1 notice the daisies smell the roses
>>> todo.sh list
1 notice the daisies smell the roses
--
TODO: 1 of 1 tasks shown
EOF
test_todo_session 'basic append with &' <<EOF
>>> todo.sh append 1 "see the wasps & bees"
1 notice the daisies smell the roses see the wasps & bees
>>> todo.sh list
1 notice the daisies smell the roses see the wasps & bees
--
TODO: 1 of 1 tasks shown
EOF
test_todo_session 'append error' << EOF
>>> todo.sh append 10 "hej!"
=== 1
TODO: No task 10.
EOF
cat > todo.txt <<EOF
notice the daisies
EOF
test_todo_session 'append of current sentence' <<EOF
>>> todo.sh append 1 ", lilies and roses"
1 notice the daisies, lilies and roses
>>> todo.sh append 1 "; see the wasps"
1 notice the daisies, lilies and roses; see the wasps
>>> todo.sh append 1 "& bees"
1 notice the daisies, lilies and roses; see the wasps & bees
EOF
cp todo.cfg special-delimiters.cfg
cat >> special-delimiters.cfg <<EOF
export SENTENCE_DELIMITERS='*,.:;&'
EOF
test_todo_session 'append of current sentence SENTENCE_DELIMITERS' <<EOF
>>> todo.sh -d special-delimiters.cfg append 1 "&beans"
1 notice the daisies, lilies and roses; see the wasps & bees&beans
>>> todo.sh -d special-delimiters.cfg append 1 "%foo"
1 notice the daisies, lilies and roses; see the wasps & bees&beans %foo
>>> todo.sh -d special-delimiters.cfg append 1 "*2"
1 notice the daisies, lilies and roses; see the wasps & bees&beans %foo*2
EOF
test_done

View File

@@ -1,71 +0,0 @@
#!/bin/sh
test_description='basic depriority functionality
'
. ./test-lib.sh
test_todo_session 'depriority usage' <<EOF
>>> todo.sh depri B B
usage: todo.sh depri ITEM#[, ITEM#, ITEM#, ...]
=== 1
EOF
test_todo_session 'depriority nonexistant item' <<EOF
>>> todo.sh depri 42
TODO: No task 42.
=== 1
EOF
cat > todo.txt <<EOF
(B) smell the uppercase Roses +flowers @outside
(A) notice the sunflowers
stop
EOF
test_todo_session 'basic depriority' <<EOF
>>> todo.sh -p list
2 (A) notice the sunflowers
1 (B) smell the uppercase Roses +flowers @outside
3 stop
--
TODO: 3 of 3 tasks shown
>>> todo.sh depri 1
1 smell the uppercase Roses +flowers @outside
TODO: 1 deprioritized.
>>> todo.sh -p list
2 (A) notice the sunflowers
1 smell the uppercase Roses +flowers @outside
3 stop
--
TODO: 3 of 3 tasks shown
EOF
cat > todo.txt <<EOF
(B) smell the uppercase Roses +flowers @outside
(A) notice the sunflowers
(C) stop
EOF
test_todo_session 'multiple depriority' <<EOF
>>> todo.sh -p list
2 (A) notice the sunflowers
1 (B) smell the uppercase Roses +flowers @outside
3 (C) stop
--
TODO: 3 of 3 tasks shown
>>> todo.sh depri 3 2
3 stop
TODO: 3 deprioritized.
2 notice the sunflowers
TODO: 2 deprioritized.
>>> todo.sh -p list
1 (B) smell the uppercase Roses +flowers @outside
2 notice the sunflowers
3 stop
--
TODO: 3 of 3 tasks shown
EOF
test_done

View File

@@ -1,153 +0,0 @@
#!/bin/sh
test_description='basic del functionality
'
. ./test-lib.sh
test_todo_session 'del usage' <<EOF
>>> todo.sh del B
usage: todo.sh del ITEM# [TERM]
=== 1
EOF
test_todo_session 'del nonexistant item' <<EOF
>>> todo.sh -f del 42
TODO: No task 42.
=== 1
>>> todo.sh -f del 42 Roses
TODO: No task 42.
=== 1
EOF
cat > todo.txt <<EOF
(B) smell the uppercase Roses +flowers @outside
(A) notice the sunflowers
stop
EOF
test_todo_session 'basic del' <<EOF
>>> todo.sh -p list
2 (A) notice the sunflowers
1 (B) smell the uppercase Roses +flowers @outside
3 stop
--
TODO: 3 of 3 tasks shown
>>> todo.sh -f del 1
1 (B) smell the uppercase Roses +flowers @outside
TODO: 1 deleted.
>>> todo.sh -p list
2 (A) notice the sunflowers
3 stop
--
TODO: 2 of 2 tasks shown
EOF
cat > todo.txt <<EOF
(B) smell the uppercase Roses +flowers @outside
(A) notice the sunflowers
stop
EOF
test_todo_session 'del preserving line numbers' <<EOF
>>> todo.sh -f del 1
1 (B) smell the uppercase Roses +flowers @outside
TODO: 1 deleted.
>>> todo.sh -f del 1
TODO: No task 1.
=== 1
>>> todo.sh add A new task
4 A new task
TODO: 4 added.
>>> todo.sh -p list
2 (A) notice the sunflowers
4 A new task
3 stop
--
TODO: 3 of 3 tasks shown
>>> todo.sh -f -n del 2
2 (A) notice the sunflowers
TODO: 2 deleted.
>>> todo.sh add Another new task
3 Another new task
TODO: 3 added.
>>> todo.sh -p list
2 A new task
3 Another new task
1 stop
--
TODO: 3 of 3 tasks shown
EOF
cat > todo.txt <<EOF
(B) smell the uppercase Roses +flowers @outside
(A) notice the sunflowers
(C) stop
EOF
test_todo_session 'basic del TERM' <<EOF
>>> todo.sh -p list
2 (A) notice the sunflowers
1 (B) smell the uppercase Roses +flowers @outside
3 (C) stop
--
TODO: 3 of 3 tasks shown
>>> todo.sh del 1 uppercase
1 (B) smell the uppercase Roses +flowers @outside
TODO: Removed 'uppercase' from task.
1 (B) smell the Roses +flowers @outside
>>> todo.sh -p list
2 (A) notice the sunflowers
1 (B) smell the Roses +flowers @outside
3 (C) stop
--
TODO: 3 of 3 tasks shown
>>> todo.sh del 1 "the Roses"
1 (B) smell the Roses +flowers @outside
TODO: Removed 'the Roses' from task.
1 (B) smell +flowers @outside
>>> todo.sh del 1 m
1 (B) smell +flowers @outside
TODO: Removed 'm' from task.
1 (B) sell +flowers @outside
>>> todo.sh del 1 @outside
1 (B) sell +flowers @outside
TODO: Removed '@outside' from task.
1 (B) sell +flowers
>>> todo.sh del 1 sell
1 (B) sell +flowers
TODO: Removed 'sell' from task.
1 (B) +flowers
EOF
cat > todo.txt <<EOF
(B) smell the uppercase Roses +flowers @outside
(A) notice the sunflowers
(C) stop
EOF
test_todo_session 'del nonexistant TERM' <<EOF
>>> todo.sh del 1 dung
1 (B) smell the uppercase Roses +flowers @outside
TODO: 'dung' not found; no removal done.
=== 1
>>> todo.sh -p list
2 (A) notice the sunflowers
1 (B) smell the uppercase Roses +flowers @outside
3 (C) stop
--
TODO: 3 of 3 tasks shown
EOF
test_done

View File

@@ -1,136 +0,0 @@
#!/bin/sh
test_description='Multi-line functionality'
. ./test-lib.sh
## Replace test
# Create the expected file
echo "1 smell the cheese
TODO: Replaced task with:
1 eat apples eat oranges drink milk">$HOME/expect.multi
test_expect_success 'multiline squash item replace' '
(
# Prepare single line todo file
cat /dev/null > $HOME/todo.txt
"$HOME/bin/todo.sh" add smell the cheese
# Run replace
"$HOME/bin/todo.sh" replace 1 "eat apples
eat oranges
drink milk" > $HOME/output.multi
# Test output against expected
diff "$HOME/output.multi" "$HOME/expect.multi"
if [ $? -ne 0 ]; then
exit 1
else
exit 0
fi
)
'
## Add test
# Create the expected file
echo "2 eat apples eat oranges drink milk
TODO: 2 added.">$HOME/expect.multi
test_expect_success 'multiline squash item add' '
(
# Prepare single line todo file
cat /dev/null > $HOME/todo.txt
"$HOME/bin/todo.sh" add smell the cheese
# Run add
"$HOME/bin/todo.sh" add "eat apples
eat oranges
drink milk" > $HOME/output.multi
# Test output against expected
diff "$HOME/output.multi" "$HOME/expect.multi"
if [ $? -ne 0 ]; then
exit 1
else
exit 0
fi
)
'
## Append test
# Create the expected file
echo "1 smell the cheese eat apples eat oranges drink milk">$HOME/expect.multi
test_expect_success 'multiline squash item append' '
(
# Prepare single line todo file
cat /dev/null > $HOME/todo.txt
"$HOME/bin/todo.sh" add smell the cheese
# Run append
"$HOME/bin/todo.sh" append 1 "eat apples
eat oranges
drink milk" > $HOME/output.multi
# Test output against expected
diff "$HOME/output.multi" "$HOME/expect.multi"
if [ $? -ne 0 ]; then
exit 1
else
exit 0
fi
)
'
## Prepend test
# Create the expected file
echo "1 eat apples eat oranges drink milk smell the cheese">$HOME/expect.multi
test_expect_success 'multiline squash item prepend' '
(
# Prepare single line todo file
cat /dev/null > $HOME/todo.txt
"$HOME/bin/todo.sh" add smell the cheese
# Run prepend
"$HOME/bin/todo.sh" prepend 1 "eat apples
eat oranges
drink milk" > $HOME/output.multi
# Test output against expected
diff "$HOME/output.multi" "$HOME/expect.multi"
if [ $? -ne 0 ]; then
exit 1
else
exit 0
fi
)
'
## Multiple line addition
# Create the expected file
echo "2 eat apples
TODO: 2 added." > $HOME/expect.multi
echo "3 eat oranges
TODO: 3 added." >>$HOME/expect.multi
echo "4 drink milk
TODO: 4 added." >> $HOME/expect.multi
test_expect_success 'actual multiline add' '
(
# Run addm
"$HOME/bin/todo.sh" addm "eat apples
eat oranges
drink milk" > $HOME/output.multi
# Test output against expected
diff "$HOME/output.multi" "$HOME/expect.multi"
if [ $? -ne 0 ]; then
exit 1
else
exit 0
fi
)
'
test_done

View File

@@ -1,52 +0,0 @@
#!/bin/sh
test_description='custom actions functionality
This test covers the contract between todo.sh and custom actions.
'
. ./test-lib.sh
unset TODO_ACTIONS_DIR
mkdir .todo.actions.d
cat > .todo.actions.d/foo << EOF
echo "TODO: foo"
EOF
test_todo_session 'nonexecutable action' <<EOF
>>> todo.sh foo
Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description]
Try 'todo.sh -h' for more information.
=== 1
EOF
chmod +x .todo.actions.d/foo
test_todo_session 'executable action' <<EOF
>>> todo.sh foo
TODO: foo
EOF
cat > .todo.actions.d/ls << EOF
echo "TODO: my ls"
EOF
chmod +x .todo.actions.d/ls
test_todo_session 'overriding built-in action' <<EOF
>>> todo.sh ls
TODO: my ls
>>> todo.sh command ls
--
TODO: 0 of 0 tasks shown
EOF
cat > .todo.actions.d/bad << EOF
echo "TODO: bad"
exit 42
EOF
chmod +x .todo.actions.d/bad
test_todo_session 'failing action' <<EOF
>>> todo.sh bad
TODO: bad
=== 42
EOF
test_done

View File

@@ -1,171 +0,0 @@
#!/bin/sh
test_description='basic tests imported from previous framework
'
. ./test-lib.sh
cat > todo.txt <<EOF
(B) smell the uppercase Roses +flowers @outside
(A) notice the sunflowers
stop
smell the coffee +wakeup
EOF
test_todo_session 'basic tests' <<EOF
>>> todo.sh -p list
2 (A) notice the sunflowers
1 (B) smell the uppercase Roses +flowers @outside
4 smell the coffee +wakeup
3 stop
--
TODO: 4 of 4 tasks shown
>>> todo.sh -p list +flowers
1 (B) smell the uppercase Roses +flowers @outside
--
TODO: 1 of 4 tasks shown
>>> todo.sh -p list flowers
2 (A) notice the sunflowers
1 (B) smell the uppercase Roses +flowers @outside
--
TODO: 2 of 4 tasks shown
>>> todo.sh -p list flowers out
1 (B) smell the uppercase Roses +flowers @outside
--
TODO: 1 of 4 tasks shown
>>> todo.sh -a do 2
2 x 2009-02-13 notice the sunflowers
TODO: 2 marked as done.
>>> todo.sh -p list
1 (B) smell the uppercase Roses +flowers @outside
4 smell the coffee +wakeup
3 stop
2 x 2009-02-13 notice the sunflowers
--
TODO: 4 of 4 tasks shown
>>> todo.sh add "make the coffee +wakeup"
5 make the coffee +wakeup
TODO: 5 added.
>>> todo.sh -p list coffee
5 make the coffee +wakeup
4 smell the coffee +wakeup
--
TODO: 2 of 5 tasks shown
>>> todo.sh add "visit http://example.com"
6 visit http://example.com
TODO: 6 added.
>>> todo.sh -p list
1 (B) smell the uppercase Roses +flowers @outside
5 make the coffee +wakeup
4 smell the coffee +wakeup
3 stop
6 visit http://example.com
2 x 2009-02-13 notice the sunflowers
--
TODO: 6 of 6 tasks shown
>>> todo.sh archive
x 2009-02-13 notice the sunflowers
TODO: $HOME/todo.txt archived.
>>> todo.sh -p list
1 (B) smell the uppercase Roses +flowers @outside
4 make the coffee +wakeup
3 smell the coffee +wakeup
2 stop
5 visit http://example.com
--
TODO: 5 of 5 tasks shown
>>> todo.sh report
TODO: Report file updated.
2009-02-13-04:40:00 5 1
>>> todo.sh report
TODO: Report file updated.
2009-02-13-04:40:00 5 1
2009-02-13-04:40:00 5 1
>>> todo.sh append g a
usage: todo.sh append ITEM# "TEXT TO APPEND"
=== 1
>>> todo.sh append 2 and think
2 stop and think
>>> todo.sh -p list
1 (B) smell the uppercase Roses +flowers @outside
4 make the coffee +wakeup
3 smell the coffee +wakeup
2 stop and think
5 visit http://example.com
--
TODO: 5 of 5 tasks shown
>>> todo.sh append 10 "hej!"
TODO: No task 10.
=== 1
>>> todo.sh -p list
1 (B) smell the uppercase Roses +flowers @outside
4 make the coffee +wakeup
3 smell the coffee +wakeup
2 stop and think
5 visit http://example.com
--
TODO: 5 of 5 tasks shown
>>> todo.sh do 10
TODO: No task 10.
=== 1
>>> todo.sh -p list
1 (B) smell the uppercase Roses +flowers @outside
4 make the coffee +wakeup
3 smell the coffee +wakeup
2 stop and think
5 visit http://example.com
--
TODO: 5 of 5 tasks shown
>>> todo.sh add "the coffee +wakeup"
6 the coffee +wakeup
TODO: 6 added.
>>> todo.sh -p list
1 (B) smell the uppercase Roses +flowers @outside
4 make the coffee +wakeup
3 smell the coffee +wakeup
2 stop and think
6 the coffee +wakeup
5 visit http://example.com
--
TODO: 6 of 6 tasks shown
>>> todo.sh prepend 6 "make"
6 make the coffee +wakeup
>>> todo.sh -p list
1 (B) smell the uppercase Roses +flowers @outside
4 make the coffee +wakeup
6 make the coffee +wakeup
3 smell the coffee +wakeup
2 stop and think
5 visit http://example.com
--
TODO: 6 of 6 tasks shown
>>> todo.sh remdup
Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description]
Try 'todo.sh -h' for more information.
=== 1
EOF
test_done

View File

@@ -37,9 +37,7 @@ VISUAL=:
unset CDPATH unset CDPATH
# Protect ourselves from using predefined TODOTXT_CFG_FILE # Protect ourselves from using predefined TODOTXT_CFG_FILE
unset TODOTXT_CFG_FILE $(set|sed '/^TODOTXT_/!d;s/=.*//') unset TODOTXT_CFG_FILE
# To prevent any damage if someone has still those exported somehow in his env:
unset TODO_FILE DONE_FILE REPORT_FILE TMP_FILE
# Each test should start with something like this, after copyright notices: # Each test should start with something like this, after copyright notices:
# #
@@ -409,12 +407,9 @@ test_done () {
esac esac
} }
# Use -P to resolve symlinks in our working directory so that the pwd # Make sure we are testing the latest version.
# in subprocesses equals our $PWD (for pathname comparisons).
cd -P .
# Record our location for reference.
TEST_DIRECTORY=$(pwd) TEST_DIRECTORY=$(pwd)
PATH=$TEST_DIRECTORY/..:$PATH
# Test repository # Test repository
test="trash directory.$(basename "$0" .sh)" test="trash directory.$(basename "$0" .sh)"
@@ -436,149 +431,12 @@ test_init_todo () {
cd "$root" || error "Cannot setup todo dir in $root" cd "$root" || error "Cannot setup todo dir in $root"
# Initialize the configuration file. Carefully quoted. # Initialize the configuration file. Carefully quoted.
sed -e 's|TODO_DIR=.*$|TODO_DIR="'"$TEST_DIRECTORY/$test"'"|' $TEST_DIRECTORY/../todo.cfg > todo.cfg sed -e 's|TODO_DIR=.*$|TODO_DIR="'"$TEST_DIRECTORY/$test"'"|' $TEST_DIRECTORY/../todo.cfg > todo.cfg
# Install latest todo.sh
mkdir bin
ln -s "$TEST_DIRECTORY/../todo.sh" bin/todo.sh
# Initialize a hack date script
TODO_TEST_REAL_DATE=$(which date)
TODO_TEST_TIME=1234500000
export PATH TODO_TEST_REAL_DATE TODO_TEST_TIME
# Trying to detect the version of "date" on current system
DATE_STYLE=unknown
# on GNU systems (versions may vary):
#date --version
#date (GNU coreutils) 6.10
#...
if date --version 2>&1 | grep -q "GNU"; then
DATE_STYLE=GNU
# on Mac OS X 10.5:
#date --version
#date: illegal option -- -
#usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
#[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
elif date --version 2>&1 | grep -q -e "-jnu"; then
DATE_STYLE=Mac10.5
# on Mac OS X 10.4:
#date --version
#date: illegal option -- -
#usage: date [-nu] [-r seconds] [+format]
# date [[[[[cc]yy]mm]dd]hh]mm[.ss]
elif date --version 2>&1 | grep -q -e "-nu"; then
DATE_STYLE=Mac10.4
fi
case $DATE_STYLE in
GNU)
cat > bin/date <<-EOF
#!/bin/sh
exec "$TODO_TEST_REAL_DATE" -d @\$TODO_TEST_TIME \$@
EOF
chmod 755 bin/date
;;
Mac10.5)
cat > bin/date <<-EOF
#!/bin/sh
exec "$TODO_TEST_REAL_DATE" -j -f %s \$TODO_TEST_TIME \$@
EOF
chmod 755 bin/date
;;
Mac10.4)
cat > bin/date <<-EOF
#!/bin/sh
exec "$TODO_TEST_REAL_DATE" -r \$TODO_TEST_TIME \$@
EOF
chmod 755 bin/date
;;
*)
echo "WARNING: Current date executable not recognized"
echo "So today date will be used, expect false negative tests..."
;;
esac
# Ensure a correct PATH for testing.
PATH=$owd/$root/bin:$PATH
export PATH
cd "$owd" cd "$owd"
} }
# Usage: test_tick [increment]
test_tick () {
TODO_TEST_TIME=$(($TODO_TEST_TIME + ${1:-86400}))
}
# Generate and run a series of tests based on a transcript.
# Usage: test_todo_session "description" <<EOF
# >>> command
# output1
# output2
# >>> command
# === exit status
# output3
# output4
# EOF
test_todo_session () {
test "$#" = 1 ||
error "bug in the test script: extra args to test_todo_session"
subnum=1
cmd=""
status=0
> expect
while read line
do
case $line in
">>> "*)
test -z "$cmd" || error "bug in the test script: missing blank line separator in test_todo_session"
cmd=${line#>>> }
;;
"=== "*)
status=${line#=== }
;;
"")
if [ ! -z "$cmd" ]; then
if [ $status = 0 ]; then
test_expect_success "$1 $subnum" "$cmd > output && test_cmp expect output"
else
test_expect_success "$1 $subnum" "$cmd > output ; test \$? = $status && test_cmp expect output"
fi
subnum=$(($subnum + 1))
cmd=""
status=0
> expect
fi
;;
*)
echo $line >> expect
;;
esac
done
if [ ! -z "$cmd" ]; then
if [ $status = 0 ]; then
test_expect_success "$1 $subnum" "$cmd > output && test_cmp expect output"
else
test_expect_success "$1 $subnum" "$cmd > output ; test \$? = $status && test_cmp expect output"
fi
fi
}
test_shell () {
trap - EXIT
export PS1='$(ret_val=$?; [ "$ret_val" != "0" ] && echo -e "=== $ret_val\n\n>>> "||echo "\n>>> ")'
cat <<EOF
Do your tests session here and
don't forget to replace the hardcoded path with \$HOME in the transcript:
$HOME/todo.txt => \$HOME/todo.txt
EOF
bash --noprofile --norc
exit 0
}
test_init_todo "$test" test_init_todo "$test"
# Use -P to resolve symlinks in our working directory so that the pwd # Use -P to resolve symlinks in our working directory so that the cwd
# in subprocesses equals our $PWD (for pathname comparisons). # in subprocesses equals our $PWD (for pathname comparisons).
cd -P "$test" || exit 1 cd -P "$test" || exit 1

View File

@@ -1,6 +0,0 @@
#!/bin/sh
test_description='Providing an interactive shell in the proper environment'
. ./test-lib.sh
test_shell

View File

@@ -17,13 +17,8 @@ export TMP_FILE="$TODO_DIR/todo.tmp"
# === COLOR MAP === # === COLOR MAP ===
## Text coloring and formatting is done by inserting ANSI escape codes. ## If you have re-mapped your color codes, you may need to
## If you have re-mapped your color codes, or use the todo.txt
## output in another output system (like Conky), you may need to
## over-ride by uncommenting and editing these defaults. ## over-ride by uncommenting and editing these defaults.
## If you change any of these here, you also need to uncomment
## the defaults in the COLORS section below. Otherwise, todo.txt
## will still use the defaults!
# export BLACK='\\033[0;30m' # export BLACK='\\033[0;30m'
# export RED='\\033[0;31m' # export RED='\\033[0;31m'
@@ -43,38 +38,18 @@ export TMP_FILE="$TODO_DIR/todo.tmp"
# export WHITE='\\033[1;37m' # export WHITE='\\033[1;37m'
# export DEFAULT='\\033[0m' # export DEFAULT='\\033[0m'
# === COLORS === # === PRIORITY COLORS ===
## Priorities can be any upper-case letter.
## Colors are supported for the first three.
## Uncomment and edit to override these defaults. ## Uncomment and edit to override these defaults.
## Reference the constants from the color map above,
## or use $NONE to disable highlighting.
#
# Priorities can be any upper-case letter.
# A,B,C are highlighted; you can add coloring for more.
#
# export PRI_A=$YELLOW # color for A priority # export PRI_A=$YELLOW # color for A priority
# export PRI_B=$GREEN # color for B priority # export PRI_B=$GREEN # color for B priority
# export PRI_C=$LIGHT_BLUE # color for C priority # export PRI_C=$LIGHT_BLUE # color for C priority
# export PRI_D=... # define your own # export PRI_X=$WHITE # color for rest of them
# export PRI_X=$WHITE # color unless explicitly defined
# There is highlighting for tasks that have been done,
# but haven't been archived yet.
#
# export COLOR_DONE=$LIGHT_GREY
# === BEHAVIOR === # === BEHAVIOR ===
## customize list output ## customize list output
#
# TODOTXT_SORT_COMMAND will filter after line numbers are
# inserted, but before colorization, and before hiding of
# priority, context, and project.
#
# export TODOTXT_SORT_COMMAND='env LC_COLLATE=C sort -f -k2' # export TODOTXT_SORT_COMMAND='env LC_COLLATE=C sort -f -k2'
# TODOTXT_FINAL_FILTER will filter list output after colorization,
# priority hiding, context hiding, and project hiding. That is,
# just before the list output is displayed.
#
# export TODOTXT_FINAL_FILTER='cat'

600
todo.sh

File diff suppressed because it is too large Load Diff