aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/args.c23
-rw-r--r--test/Makefile.am2
-rw-r--r--test/data/apts-filter-0018
-rwxr-xr-xtest/filter-001.sh28
4 files changed, 51 insertions, 10 deletions
diff --git a/src/args.c b/src/args.c
index 4a022b5..a2fbf81 100644
--- a/src/args.c
+++ b/src/args.c
@@ -217,18 +217,18 @@ static void status_arg(void)
puts(_("calcurse is not running\n"));
}
-/* Print TODO list and exit. */
-static void todo_arg(const char *format, int *limit,
- struct item_filter *filter)
+/* Print TODO list and return the number of printed items. */
+static int todo_arg(const char *format, int *limit, struct item_filter *filter)
{
const char *titlestr =
filter->completed ? _("completed tasks:\n") : _("to do:\n");
int title = 1;
+ int n = 0;
llist_item_t *i;
LLIST_FOREACH(&todolist, i) {
if (*limit == 0)
- return;
+ break;
struct todo *todo = LLIST_TS_GET_DATA(i);
if (title) {
@@ -236,8 +236,11 @@ static void todo_arg(const char *format, int *limit,
title = 0;
}
print_todo(format, todo);
+ n++;
(*limit)--;
}
+
+ return n;
}
/* Print the next appointment within the upcoming 24 hours. */
@@ -286,11 +289,11 @@ static void arg_print_date(long date)
* If no end date is given (-1), a range of 1 day is considered.
*/
static void
-date_arg_from_to(long from, long to, const char *fmt_apt, const char *fmt_rapt,
- const char *fmt_ev, const char *fmt_rev, int *limit)
+date_arg_from_to(long from, long to, int add_line, const char *fmt_apt,
+ const char *fmt_rapt, const char *fmt_ev, const char *fmt_rev,
+ int *limit)
{
long date;
- int add_line = 0;
for (date = from; date < to; date += DAYINSEC) {
day_store_items(date, 0);
@@ -659,9 +662,9 @@ int parse_args(int argc, char **argv)
config_load(); /* To get output date format. */
io_load_app(&filter);
io_load_todo(&filter);
- date_arg_from_to(from, to, fmt_apt, fmt_rapt, fmt_ev, fmt_rev,
- &limit);
- todo_arg(fmt_todo, &limit, &filter);
+ int add_line = todo_arg(fmt_todo, &limit, &filter);
+ date_arg_from_to(from, to, add_line, fmt_apt, fmt_rapt, fmt_ev,
+ fmt_rev, &limit);
} else if (next) {
io_check_file(path_apts);
io_load_app(&filter);
diff --git a/test/Makefile.am b/test/Makefile.am
index 5e1bfca..d036a1d 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -41,6 +41,7 @@ TESTS = \
event-004.sh \
event-005.sh \
event-006.sh \
+ filter-001.sh \
ical-001.sh \
ical-002.sh \
ical-003.sh \
@@ -98,6 +99,7 @@ EXTRA_DIST = \
data/apts-event-004 \
data/apts-event-005 \
data/apts-event-006 \
+ data/apts-filter-001 \
data/apts-recur \
data/conf \
data/ical-001.ical \
diff --git a/test/data/apts-filter-001 b/test/data/apts-filter-001
new file mode 100644
index 0000000..59fe31c
--- /dev/null
+++ b/test/data/apts-filter-001
@@ -0,0 +1,8 @@
+02/22/2013 [1] Event 1
+02/23/2013 [1] Event 2
+02/24/2013 [1] Event 3
+02/25/2013 [1] Event 4
+02/22/2013 @ 10:00 -> 02/22/2013 @ 12:00 |Appointment 1
+02/23/2013 @ 10:00 -> 02/23/2013 @ 12:00 |Appointment 2
+02/24/2013 @ 10:00 -> 02/24/2013 @ 12:00 |Appointment 3
+02/25/2013 @ 10:00 -> 02/25/2013 @ 12:00 |Appointment 4
diff --git a/test/filter-001.sh b/test/filter-001.sh
new file mode 100755
index 0000000..2dcbb25
--- /dev/null
+++ b/test/filter-001.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+. "${TEST_INIT:-./test-init.sh}"
+
+if [ "$1" = 'actual' ]; then
+ "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-filter-001" \
+ -t9 -s02/23/2013 -r2
+elif [ "$1" = 'expected' ]; then
+ cat <<EOD
+to do:
+9. Gloriously slams
+9. Beefburger's
+9. Seasons
+
+02/23/13:
+ * Event 2
+ - 10:00 -> 12:00
+ Appointment 2
+
+02/24/13:
+ * Event 3
+ - 10:00 -> 12:00
+ Appointment 3
+EOD
+else
+ ./run-test "$0"
+fi
+