Compare commits
19 Commits
v1.0
...
wip-weekly
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c963ba41ae | ||
|
|
b4ef59b637 | ||
|
|
90b80268d3 | ||
|
|
7dde1fbab6 | ||
|
|
b3e0f791a7 | ||
|
|
732e45aeb1 | ||
|
|
a53bb81b4c | ||
|
|
29a470f97d | ||
|
|
6ab0004fe8 | ||
|
|
15acb054f5 | ||
|
|
5f3dadee5c | ||
|
|
20c6f44784 | ||
|
|
9bab224a29 | ||
|
|
a075adb4ec | ||
|
|
01a250c702 | ||
|
|
1f17672215 | ||
|
|
40e0da5108 | ||
|
|
56dfae0486 | ||
|
|
8549eef46b |
6
.gitattributes
vendored
6
.gitattributes
vendored
@@ -1,6 +0,0 @@
|
|||||||
.git[ia]* export-ignore
|
|
||||||
GEN-VERSION-FILE export-ignore
|
|
||||||
Makefile export-ignore
|
|
||||||
README.textile export-ignore
|
|
||||||
VERSION-FILE export-ignore
|
|
||||||
tests export-ignore
|
|
||||||
10
.todo.actions.d/README
Normal file
10
.todo.actions.d/README
Normal 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
20
.todo.actions.d/adda
Executable 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
20
.todo.actions.d/addx
Executable 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
16
.todo.actions.d/birdseye
Executable 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
202
.todo.actions.d/birdseye.py
Executable 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:])
|
||||||
199
.todo.actions.d/weeklyreview.py
Normal file
199
.todo.actions.d/weeklyreview.py
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
""" TODO.TXT Weekly Review
|
||||||
|
USAGE:
|
||||||
|
weeklyreview.py [todo.txt] [done.txt] [projects.txt]
|
||||||
|
|
||||||
|
USAGE NOTES:
|
||||||
|
Expects three text files as parameters:
|
||||||
|
1 & 2. Properly-formatted todo.txt and done.txt files.
|
||||||
|
3. A projects.txt file which lists one project per line, and any number of #goals associated with it.
|
||||||
|
|
||||||
|
See more on todo.txt here:
|
||||||
|
http://todotxt.com
|
||||||
|
|
||||||
|
OUTPUT:
|
||||||
|
Displays a count of how many tasks were completed associated with a goal.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
__version__ = "1.2"
|
||||||
|
__date__ = "2016/03/17"
|
||||||
|
__updated__ = "2016/03/17"
|
||||||
|
__author__ = "Gina Trapani (ginatrapani@gmail.com)"
|
||||||
|
__copyright__ = "Copyright 2016, Gina Trapani"
|
||||||
|
__license__ = "GPL"
|
||||||
|
__history__ = """
|
||||||
|
0.1 - WIP
|
||||||
|
"""
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
print("USAGE: %s [todo.txt] [done.txt] [projects.txt]" % (sys.argv[0], ))
|
||||||
|
|
||||||
|
def separator(c, r=42):
|
||||||
|
sep = ""
|
||||||
|
sep = c * r
|
||||||
|
print(sep)
|
||||||
|
|
||||||
|
def printTitle(text):
|
||||||
|
print("")
|
||||||
|
r = len(text)
|
||||||
|
print(text)
|
||||||
|
separator("=", r)
|
||||||
|
|
||||||
|
def printHeader(text):
|
||||||
|
r = len(text)
|
||||||
|
print("")
|
||||||
|
print(text)
|
||||||
|
separator("-", r)
|
||||||
|
|
||||||
|
def main(argv):
|
||||||
|
# make sure you have all your args
|
||||||
|
if len(argv) < 3:
|
||||||
|
usage()
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
|
goal_projects = getGoalProjects(argv)
|
||||||
|
#print(goal_projects)
|
||||||
|
|
||||||
|
last_7_days = getLast7Days()
|
||||||
|
#print(last_7_days)
|
||||||
|
|
||||||
|
last_7_days_of_completions = getLast7DaysOfCompletions(argv, last_7_days)
|
||||||
|
#print(last_7_days_of_completions)
|
||||||
|
|
||||||
|
project_completions = getProjectCompletions(argv, last_7_days_of_completions)
|
||||||
|
#print(project_completions)
|
||||||
|
|
||||||
|
goal_completions = getGoalCompletions(goal_projects, project_completions)
|
||||||
|
# print(goal_completions)
|
||||||
|
|
||||||
|
# Print report: For each item in goal_projects, print the goal, the number of tasks completed,
|
||||||
|
# then each project and the number of tasks completed
|
||||||
|
printTitle("Weekly Review for the past 7 days")
|
||||||
|
|
||||||
|
goals_not_moved = []
|
||||||
|
goals_moved = []
|
||||||
|
for goal in goal_projects:
|
||||||
|
total_done = 0
|
||||||
|
if goal in goal_completions:
|
||||||
|
total_done = len(goal_completions[goal])
|
||||||
|
goal_header = goal + " - " + str(total_done) + " done"
|
||||||
|
if total_done > 0:
|
||||||
|
printHeader(goal_header)
|
||||||
|
for project in goal_projects[goal]:
|
||||||
|
if project in project_completions:
|
||||||
|
print(project + " - " + str(len(project_completions[project])) + " done" )
|
||||||
|
for task in project_completions[project]:
|
||||||
|
print(" " + task.strip())
|
||||||
|
goals_moved.append(goal)
|
||||||
|
else:
|
||||||
|
goals_not_moved.append(goal)
|
||||||
|
|
||||||
|
# Print a list of goals that had no movement
|
||||||
|
if len(goals_not_moved) > 0:
|
||||||
|
printTitle("Goals with no progress")
|
||||||
|
for goal in goals_not_moved:
|
||||||
|
print(goal)
|
||||||
|
|
||||||
|
# Print summary
|
||||||
|
print("")
|
||||||
|
summary = str(len(last_7_days_of_completions)) + " completed tasks moved " + str(len(goals_moved)) + " out of " + str(len(goal_projects)) + " goals forward."
|
||||||
|
separator("-", len(summary))
|
||||||
|
print(summary)
|
||||||
|
separator("-", len(summary))
|
||||||
|
|
||||||
|
# Warnings
|
||||||
|
crossCheckCompletedProjects(project_completions, goal_projects)
|
||||||
|
|
||||||
|
|
||||||
|
# Return an array of goals with total tasks completed.
|
||||||
|
def getGoalCompletions(goal_projects, project_completions):
|
||||||
|
goal_completions = {}
|
||||||
|
goals = goal_projects.keys()
|
||||||
|
for goal in goal_projects:
|
||||||
|
for project in project_completions:
|
||||||
|
if project in goal_projects[goal]:
|
||||||
|
if goal not in goal_completions:
|
||||||
|
goal_completions[goal] = project_completions[project]
|
||||||
|
else:
|
||||||
|
goal_completions[goal] = goal_completions[goal] + project_completions[project]
|
||||||
|
return goal_completions
|
||||||
|
|
||||||
|
# Return the goal/project list as an array of arrays goalProjects[goal] = projects[]
|
||||||
|
def getGoalProjects(argv):
|
||||||
|
try:
|
||||||
|
goal_projects = {}
|
||||||
|
f = open (argv[2], "r")
|
||||||
|
for line in f:
|
||||||
|
words = line.split()
|
||||||
|
for word in words:
|
||||||
|
# Project
|
||||||
|
if word[0:1] == "+":
|
||||||
|
current_project = word
|
||||||
|
# Goal
|
||||||
|
if word[0:1] == "#":
|
||||||
|
if word not in goal_projects:
|
||||||
|
goal_projects[word] = [current_project];
|
||||||
|
else:
|
||||||
|
goal_projects[word].append(current_project)
|
||||||
|
f.close()
|
||||||
|
return goal_projects
|
||||||
|
except IOError:
|
||||||
|
print("ERROR: The file named %s could not be read."% (argv[1], ))
|
||||||
|
usage()
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
|
|
||||||
|
# Get the last 7 days as an array of todo.txt-formatted dates.
|
||||||
|
def getLast7Days():
|
||||||
|
today = datetime.date.today()
|
||||||
|
last7Days = []
|
||||||
|
for d in range(8):
|
||||||
|
day_this_week = today - datetime.timedelta(days=d)
|
||||||
|
last7Days.append(day_this_week.strftime('%Y-%m-%d'))
|
||||||
|
return last7Days
|
||||||
|
|
||||||
|
# Return last 7 days of completed tasks from done.txt
|
||||||
|
def getLast7DaysOfCompletions(argv, last_7_days):
|
||||||
|
try:
|
||||||
|
last_7_days_of_completions = []
|
||||||
|
f = open (argv[1], "r")
|
||||||
|
for line in f:
|
||||||
|
words = line.split()
|
||||||
|
if len(words) > 2 and words[1] in last_7_days:
|
||||||
|
last_7_days_of_completions.append(line)
|
||||||
|
f.close()
|
||||||
|
return last_7_days_of_completions
|
||||||
|
except IOError:
|
||||||
|
print("ERROR: The file named %s could not be read."% (argv[1], ))
|
||||||
|
usage()
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
|
# Return an array of projects with the total tasks completed.
|
||||||
|
def getProjectCompletions(argv, last_7_days_of_completions):
|
||||||
|
project_completions = {}
|
||||||
|
for task in last_7_days_of_completions:
|
||||||
|
words = task.split()
|
||||||
|
for word in words:
|
||||||
|
if word[0:2] == "p:" or word[0:2] == "p-" or word[0:1] == "+":
|
||||||
|
if word not in project_completions:
|
||||||
|
project_completions[word] = [task]
|
||||||
|
else:
|
||||||
|
project_completions[word].append(task)
|
||||||
|
return project_completions
|
||||||
|
|
||||||
|
def crossCheckCompletedProjects(project_completions, goal_projects):
|
||||||
|
for project in project_completions:
|
||||||
|
goal_in_project = False
|
||||||
|
for goal in goal_projects:
|
||||||
|
if project in goal_projects[goal]:
|
||||||
|
goal_in_project = True
|
||||||
|
if goal_in_project == False:
|
||||||
|
print("WARNING: Project " + project + " not in goal.")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main(sys.argv[1:])
|
||||||
@@ -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
|
||||||
43
tests/README
43
tests/README
@@ -105,7 +105,7 @@ First digit tells the family:
|
|||||||
|
|
||||||
0 - the absolute basics and global stuff
|
0 - the absolute basics and global stuff
|
||||||
1 - basic every-day usage
|
1 - basic every-day usage
|
||||||
2 - add ins
|
2 - add ins
|
||||||
|
|
||||||
Second digit tells the particular command we are testing.
|
Second digit tells the particular command we are testing.
|
||||||
|
|
||||||
@@ -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.
|
|
||||||
|
|||||||
@@ -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 &&
|
||||||
|
|||||||
@@ -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' '
|
||||||
|
|||||||
@@ -1,72 +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
|
|
||||||
TODO: 'notice the daisies' added on line 1.
|
|
||||||
|
|
||||||
>>> todo.sh list
|
|
||||||
1 notice the daisies
|
|
||||||
--
|
|
||||||
TODO: 1 of 1 tasks shown
|
|
||||||
|
|
||||||
>>> todo.sh add smell the roses
|
|
||||||
TODO: 'smell the roses' added on line 2.
|
|
||||||
|
|
||||||
>>> 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
|
|
||||||
TODO: 'smell the uppercase Roses' added on line 3.
|
|
||||||
|
|
||||||
>>> 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"
|
|
||||||
TODO: 'dig the garden & water the flowers' added on line 4.
|
|
||||||
|
|
||||||
>>> 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
|
|
||||||
@@ -1,69 +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
|
|
||||||
TODO: '2009-02-13 notice the daisies' added on line 1.
|
|
||||||
|
|
||||||
>>> 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
|
|
||||||
TODO: '2009-02-14 smell the roses' added on line 2.
|
|
||||||
|
|
||||||
>>> 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
|
|
||||||
TODO: '2009-02-15 mow the lawn' added on line 3.
|
|
||||||
|
|
||||||
>>> 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
|
|
||||||
TODO: '2009-02-15 take out the trash' added on line 4.
|
|
||||||
|
|
||||||
>>> 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
|
|
||||||
@@ -1,78 +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.
|
|
||||||
EOF
|
|
||||||
|
|
||||||
touch "$HOME/garden.txt"
|
|
||||||
|
|
||||||
test_todo_session 'basic addto/listfile' <<EOF
|
|
||||||
>>> todo.sh addto garden.txt notice the daisies
|
|
||||||
GARDEN: 'notice the daisies' added on line 1.
|
|
||||||
|
|
||||||
>>> todo.sh listfile garden.txt
|
|
||||||
1 notice the daisies
|
|
||||||
--
|
|
||||||
GARDEN: 1 of 1 tasks shown
|
|
||||||
|
|
||||||
>>> todo.sh addto garden.txt smell the roses
|
|
||||||
GARDEN: 'smell the roses' added on line 2.
|
|
||||||
|
|
||||||
>>> 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
|
|
||||||
GARDEN: 'smell the uppercase Roses' added on line 3.
|
|
||||||
|
|
||||||
>>> 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"
|
|
||||||
GARDEN: 'dig the garden & water the flowers' added on line 4.
|
|
||||||
|
|
||||||
>>> 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
|
|
||||||
@@ -1,71 +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
|
|
||||||
GARDEN: '2009-02-13 notice the daisies' added on line 1.
|
|
||||||
|
|
||||||
>>> 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
|
|
||||||
GARDEN: '2009-02-14 smell the roses' added on line 2.
|
|
||||||
|
|
||||||
>>> 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
|
|
||||||
GARDEN: '2009-02-15 mow the lawn' added on line 3.
|
|
||||||
|
|
||||||
>>> 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
|
|
||||||
GARDEN: '2009-02-15 take out the trash' added on line 4.
|
|
||||||
|
|
||||||
>>> 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
|
|
||||||
@@ -1,88 +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
|
|
||||||
replaced 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
|
|
||||||
replaced 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
|
|
||||||
replaced with
|
|
||||||
1: smell the cheese
|
|
||||||
|
|
||||||
>>> todo.sh replace 3 jump on hay
|
|
||||||
3: thrash some hay
|
|
||||||
replaced with
|
|
||||||
3: jump on hay
|
|
||||||
|
|
||||||
>>> todo.sh replace 4 collect the eggs
|
|
||||||
4: chase the chickens
|
|
||||||
replaced 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
|
|
||||||
replaced with
|
|
||||||
4: (A) collect the bread
|
|
||||||
EOF
|
|
||||||
test_todo_session 'replace with &' << EOF
|
|
||||||
>>> todo.sh replace 3 "thrash the hay & thresh the wheat"
|
|
||||||
3: jump on hay
|
|
||||||
replaced with
|
|
||||||
3: thrash the hay & thresh the wheat
|
|
||||||
EOF
|
|
||||||
|
|
||||||
test_todo_session 'replace error' << EOF
|
|
||||||
>>> todo.sh replace 10 "hej!"
|
|
||||||
=== 1
|
|
||||||
10: No such todo.
|
|
||||||
EOF
|
|
||||||
|
|
||||||
test_done
|
|
||||||
@@ -1,89 +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
|
|
||||||
[0;32m1 (B) smell the uppercase Roses +flowers @outside[0m
|
|
||||||
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"
|
|
||||||
TODO: 'smell the coffee +wakeup' added on line 4.
|
|
||||||
|
|
||||||
>>> 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
|
|
||||||
@@ -1,623 +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 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
|
|
||||||
[1;33m01 (A) @con01 +prj01 -- Some project 01 task, pri A[0m
|
|
||||||
[1;33m02 (A) @con01 +prj02 -- Some project 02 task, pri A[0m
|
|
||||||
[1;33m03 (A) @con02 +prj03 -- Some project 03 task, pri A[0m
|
|
||||||
[1;33m04 (A) @con02 +prj04 -- Some project 04 task, pri A[0m
|
|
||||||
[0;32m05 (B) @con01 +prj01 -- Some project 01 task, pri B[0m
|
|
||||||
[0;32m06 (B) @con01 +prj02 -- Some project 02 task, pri B[0m
|
|
||||||
[0;32m07 (B) @con02 +prj03 -- Some project 03 task, pri B[0m
|
|
||||||
[0;32m08 (B) @con02 +prj04 -- Some project 04 task, pri B[0m
|
|
||||||
[1;34m09 (C) @con01 +prj01 -- Some project 01 task, pri C[0m
|
|
||||||
[1;34m10 (C) @con01 +prj02 -- Some project 02 task, pri C[0m
|
|
||||||
[1;34m11 (C) @con02 +prj03 -- Some project 03 task, pri C[0m
|
|
||||||
[1;34m12 (C) @con02 +prj04 -- Some project 04 task, pri C[0m
|
|
||||||
[1;37m13 (D) @con01 +prj01 -- Some project 01 task, pri D[0m
|
|
||||||
[1;37m14 (D) @con01 +prj02 -- Some project 02 task, pri D[0m
|
|
||||||
[1;37m15 (D) @con02 +prj03 -- Some project 03 task, pri D[0m
|
|
||||||
[1;37m16 (D) @con02 +prj04 -- Some project 04 task, pri D[0m
|
|
||||||
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
|
|
||||||
[1;33m01 (A) @con01 +prj01 -- Some project 01 task, pri A[0m
|
|
||||||
[1;33m02 (A) @con01 +prj02 -- Some project 02 task, pri A[0m
|
|
||||||
[1;33m03 (A) @con02 +prj03 -- Some project 03 task, pri A[0m
|
|
||||||
[1;33m04 (A) @con02 +prj04 -- Some project 04 task, pri A[0m
|
|
||||||
[0;32m05 (B) @con01 +prj01 -- Some project 01 task, pri B[0m
|
|
||||||
[0;32m06 (B) @con01 +prj02 -- Some project 02 task, pri B[0m
|
|
||||||
[0;32m07 (B) @con02 +prj03 -- Some project 03 task, pri B[0m
|
|
||||||
[0;32m08 (B) @con02 +prj04 -- Some project 04 task, pri B[0m
|
|
||||||
[1;34m09 (C) @con01 +prj01 -- Some project 01 task, pri C[0m
|
|
||||||
[1;34m10 (C) @con01 +prj02 -- Some project 02 task, pri C[0m
|
|
||||||
[1;34m11 (C) @con02 +prj03 -- Some project 03 task, pri C[0m
|
|
||||||
[1;34m12 (C) @con02 +prj04 -- Some project 04 task, pri C[0m
|
|
||||||
[1;37m13 (D) @con01 +prj01 -- Some project 01 task, pri D[0m
|
|
||||||
[1;37m14 (D) @con01 +prj02 -- Some project 02 task, pri D[0m
|
|
||||||
[1;37m15 (D) @con02 +prj03 -- Some project 03 task, pri D[0m
|
|
||||||
[1;37m16 (D) @con02 +prj04 -- Some project 04 task, pri D[0m
|
|
||||||
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
|
|
||||||
[1;33m01 (A) @con01 +prj01 -- Some project 01 task, pri A[0m
|
|
||||||
[1;33m02 (A) @con01 +prj02 -- Some project 02 task, pri A[0m
|
|
||||||
[0;32m05 (B) @con01 +prj01 -- Some project 01 task, pri B[0m
|
|
||||||
[0;32m06 (B) @con01 +prj02 -- Some project 02 task, pri B[0m
|
|
||||||
[1;34m09 (C) @con01 +prj01 -- Some project 01 task, pri C[0m
|
|
||||||
[1;34m10 (C) @con01 +prj02 -- Some project 02 task, pri C[0m
|
|
||||||
[1;37m13 (D) @con01 +prj01 -- Some project 01 task, pri D[0m
|
|
||||||
[1;37m14 (D) @con01 +prj02 -- Some project 02 task, pri D[0m
|
|
||||||
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
|
|
||||||
[1;33m01 @con01 +prj01 -- Some project 01 task, pri A[0m
|
|
||||||
[1;33m02 @con01 +prj02 -- Some project 02 task, pri A[0m
|
|
||||||
[0;32m05 @con01 +prj01 -- Some project 01 task, pri B[0m
|
|
||||||
[0;32m06 @con01 +prj02 -- Some project 02 task, pri B[0m
|
|
||||||
[1;34m09 @con01 +prj01 -- Some project 01 task, pri C[0m
|
|
||||||
[1;34m10 @con01 +prj02 -- Some project 02 task, pri C[0m
|
|
||||||
[1;37m13 @con01 +prj01 -- Some project 01 task, pri D[0m
|
|
||||||
[1;37m14 @con01 +prj02 -- Some project 02 task, pri D[0m
|
|
||||||
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
|
|
||||||
[1;33m01 (A) @con01 -- Some project 01 task, pri A[0m
|
|
||||||
[1;33m02 (A) @con01 -- Some project 02 task, pri A[0m
|
|
||||||
[0;32m05 (B) @con01 -- Some project 01 task, pri B[0m
|
|
||||||
[0;32m06 (B) @con01 -- Some project 02 task, pri B[0m
|
|
||||||
[1;34m09 (C) @con01 -- Some project 01 task, pri C[0m
|
|
||||||
[1;34m10 (C) @con01 -- Some project 02 task, pri C[0m
|
|
||||||
[1;37m13 (D) @con01 -- Some project 01 task, pri D[0m
|
|
||||||
[1;37m14 (D) @con01 -- Some project 02 task, pri D[0m
|
|
||||||
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
|
|
||||||
[1;33m01 (A) +prj01 -- Some project 01 task, pri A[0m
|
|
||||||
[1;33m02 (A) +prj02 -- Some project 02 task, pri A[0m
|
|
||||||
[0;32m05 (B) +prj01 -- Some project 01 task, pri B[0m
|
|
||||||
[0;32m06 (B) +prj02 -- Some project 02 task, pri B[0m
|
|
||||||
[1;34m09 (C) +prj01 -- Some project 01 task, pri C[0m
|
|
||||||
[1;34m10 (C) +prj02 -- Some project 02 task, pri C[0m
|
|
||||||
[1;37m13 (D) +prj01 -- Some project 01 task, pri D[0m
|
|
||||||
[1;37m14 (D) +prj02 -- Some project 02 task, pri D[0m
|
|
||||||
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
|
|
||||||
[1;33m01 +prj01 -- Some project 01 task, pri A[0m
|
|
||||||
[1;33m02 +prj02 -- Some project 02 task, pri A[0m
|
|
||||||
[0;32m05 +prj01 -- Some project 01 task, pri B[0m
|
|
||||||
[0;32m06 +prj02 -- Some project 02 task, pri B[0m
|
|
||||||
[1;34m09 +prj01 -- Some project 01 task, pri C[0m
|
|
||||||
[1;34m10 +prj02 -- Some project 02 task, pri C[0m
|
|
||||||
[1;37m13 +prj01 -- Some project 01 task, pri D[0m
|
|
||||||
[1;37m14 +prj02 -- Some project 02 task, pri D[0m
|
|
||||||
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
|
|
||||||
[1;33m01 (A) @con01 +prj01 -- Some project 01 task, pri A[0m
|
|
||||||
[1;33m02 (A) @con01 +prj02 -- Some project 02 task, pri A[0m
|
|
||||||
[0;32m05 (B) @con01 +prj01 -- Some project 01 task, pri B[0m
|
|
||||||
[0;32m06 (B) @con01 +prj02 -- Some project 02 task, pri B[0m
|
|
||||||
[1;34m09 (C) @con01 +prj01 -- Some project 01 task, pri C[0m
|
|
||||||
[1;34m10 (C) @con01 +prj02 -- Some project 02 task, pri C[0m
|
|
||||||
[1;37m13 (D) @con01 +prj01 -- Some project 01 task, pri D[0m
|
|
||||||
[1;37m14 (D) @con01 +prj02 -- Some project 02 task, pri D[0m
|
|
||||||
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
|
|
||||||
[1;33m01 -- Some project 01 task, pri A[0m
|
|
||||||
[1;33m02 -- Some project 02 task, pri A[0m
|
|
||||||
[0;32m05 -- Some project 01 task, pri B[0m
|
|
||||||
[0;32m06 -- Some project 02 task, pri B[0m
|
|
||||||
[1;34m09 -- Some project 01 task, pri C[0m
|
|
||||||
[1;34m10 -- Some project 02 task, pri C[0m
|
|
||||||
[1;37m13 -- Some project 01 task, pri D[0m
|
|
||||||
[1;37m14 -- Some project 02 task, pri D[0m
|
|
||||||
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
|
|
||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
@@ -1,60 +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
|
|
||||||
[0;32m1 (B) smell the uppercase Roses +flowers @outside[0m
|
|
||||||
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
|
|
||||||
|
|
||||||
test_done
|
|
||||||
@@ -1,80 +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#
|
|
||||||
=== 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
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
test_description='done functionality
|
|
||||||
'
|
|
||||||
. ./test-lib.sh
|
|
||||||
|
|
||||||
#DATE=`date '+%Y-%m-%d'`
|
|
||||||
|
|
||||||
test_todo_session 'done usage' <<EOF
|
|
||||||
>>> export TODOTXT_FORCE=1
|
|
||||||
|
|
||||||
>>> todo.sh done
|
|
||||||
usage: todo.sh done "TODO ITEM"
|
|
||||||
=== 1
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat > todo.txt <<EOF
|
|
||||||
stop
|
|
||||||
remove1
|
|
||||||
remove2
|
|
||||||
remove3
|
|
||||||
remove4
|
|
||||||
EOF
|
|
||||||
|
|
||||||
test_todo_session 'basic done' <<EOF
|
|
||||||
>>> todo.sh lsa
|
|
||||||
2 remove1
|
|
||||||
3 remove2
|
|
||||||
4 remove3
|
|
||||||
5 remove4
|
|
||||||
1 stop
|
|
||||||
--
|
|
||||||
TODO: 5 of 5 tasks shown
|
|
||||||
|
|
||||||
>>> todo.sh done smell the uppercase Roses
|
|
||||||
TODO: 'smell the uppercase Roses' marked as done.
|
|
||||||
|
|
||||||
>>> todo.sh done notice the sunflowers
|
|
||||||
TODO: 'notice the sunflowers' marked as done.
|
|
||||||
|
|
||||||
>>> todo.sh lsa
|
|
||||||
2 remove1
|
|
||||||
3 remove2
|
|
||||||
4 remove3
|
|
||||||
5 remove4
|
|
||||||
1 stop
|
|
||||||
7 x 2009-02-13 notice the sunflowers
|
|
||||||
6 x 2009-02-13 smell the uppercase Roses
|
|
||||||
--
|
|
||||||
TODO: 7 of 7 tasks shown
|
|
||||||
EOF
|
|
||||||
test_done
|
|
||||||
@@ -1,47 +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
|
|
||||||
10: No such todo.
|
|
||||||
EOF
|
|
||||||
|
|
||||||
test_done
|
|
||||||
@@ -1,132 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
test_description='Multi-line functionality'
|
|
||||||
|
|
||||||
. ./test-lib.sh
|
|
||||||
|
|
||||||
## Replace test
|
|
||||||
# Create the expected file
|
|
||||||
echo "1: smell the cheese
|
|
||||||
replaced 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 "TODO: 'eat apples eat oranges drink milk' added on line 2.">$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 "TODO: 'eat apples' added on line 2." > $HOME/expect.multi
|
|
||||||
echo "TODO: 'eat oranges' added on line 3." >>$HOME/expect.multi
|
|
||||||
echo "TODO: 'drink milk' added on line 4." >> $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
|
|
||||||
@@ -1,168 +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"
|
|
||||||
TODO: 'make the coffee +wakeup' added on line 5.
|
|
||||||
|
|
||||||
>>> 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"
|
|
||||||
TODO: 'visit http://example.com' added on line 6.
|
|
||||||
|
|
||||||
>>> 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!"
|
|
||||||
10: No such todo.
|
|
||||||
=== 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
|
|
||||||
10: No such todo.
|
|
||||||
=== 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"
|
|
||||||
TODO: 'the coffee +wakeup' added on line 6.
|
|
||||||
|
|
||||||
>>> 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
|
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
test_description='Providing an interactive shell in the proper environment'
|
|
||||||
. ./test-lib.sh
|
|
||||||
|
|
||||||
test_shell
|
|
||||||
11
todo.cfg
11
todo.cfg
@@ -52,15 +52,4 @@ export TMP_FILE="$TODO_DIR/todo.tmp"
|
|||||||
# === 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'
|
|
||||||
|
|||||||
Reference in New Issue
Block a user