Bug - A3::extract_modifications

- Broadened the list of argument categories that are downgraded to
  'word' for the purpose of task modification.
This commit is contained in:
Paul Beckingham
2011-08-13 16:24:07 -04:00
parent 7ba5e67050
commit 30034f057b
3 changed files with 64 additions and 47 deletions

View File

@@ -605,7 +605,7 @@ const A3 A3::extract_modifications () const
// lines that do not otherwise include an id, such as: // lines that do not otherwise include an id, such as:
// //
// task add Read the article on page 2 // task add Read the article on page 2
else if (arg->_category == "id" || else if (arg->_category == "id" ||
arg->_category == "uuid") arg->_category == "uuid")
{ {
Arg downgrade (*arg); Arg downgrade (*arg);

View File

@@ -418,8 +418,8 @@ void Command::modify_task (
std::string result = e.evalExpression (task); std::string result = e.evalExpression (task);
context.debug (std::string ("Eval '") + value + "' --> '" + result + "'"); context.debug (std::string ("Eval '") + value + "' --> '" + result + "'");
fragment.dump ("pre modify_task attr"); //fragment.dump ("pre modify_task attr");
std::cout << "# modify_task result='" << result << "'\n"; //std::cout << "# modify_task result='" << result << "'\n";
// Dependencies must be resolved to UUIDs. // Dependencies must be resolved to UUIDs.
if (name == "depends") if (name == "depends")
@@ -463,6 +463,7 @@ std::cout << "# modify_task result='" << result << "'\n";
task.removeTag (value); task.removeTag (value);
} }
/*
// Words and operators are aggregated into a description. // Words and operators are aggregated into a description.
else if (arg->_category == "word" || else if (arg->_category == "word" ||
arg->_category == "op") arg->_category == "op")
@@ -472,6 +473,7 @@ std::cout << "# modify_task result='" << result << "'\n";
description += arg->_raw; description += arg->_raw;
} }
*/
// Substitutions. // Substitutions.
else if (arg->_category == "subst") else if (arg->_category == "subst")
@@ -483,10 +485,22 @@ std::cout << "# modify_task result='" << result << "'\n";
task.substitute (from, to, global); task.substitute (from, to, global);
} }
/*
// Any additional argument types are indicative of a failure in // Any additional argument types are indicative of a failure in
// A3::extract_modifications. // A3::extract_modifications.
else else
throw format (STRING_CMD_MOD_UNEXPECTED, arg->_raw); throw format (STRING_CMD_MOD_UNEXPECTED, arg->_raw);
*/
// Anything else is essentially downgraded to 'word' and considered part of
// the description.
else
{
if (description.length ())
description += " ";
description += arg->_raw;
}
} }
} }

View File

@@ -28,7 +28,7 @@
use strict; use strict;
use warnings; use warnings;
use Test::More tests => 49; use Test::More tests => 50;
# Create the rc file. # Create the rc file.
if (open my $fh, '>', 'urgency.rc') if (open my $fh, '>', 'urgency.rc')
@@ -56,10 +56,10 @@ if (open my $fh, '>', 'urgency.rc')
# calculated. # calculated.
# priority # priority
qx{../src/task rc:urgency.rc add control}; # 1 qx{../src/task rc:urgency.rc add control}; # task 1
qx{../src/task rc:urgency.rc add 1a pri:H}; # 2 qx{../src/task rc:urgency.rc add 1a pri:H}; # task 2
qx{../src/task rc:urgency.rc add 1b pri:M}; # 3 qx{../src/task rc:urgency.rc add 1b pri:M}; # task 3
qx{../src/task rc:urgency.rc add 1c pri:L}; # 4 qx{../src/task rc:urgency.rc add 1c pri:L}; # task 4
# priority: 10 (pending) # priority: 10 (pending)
my $output = qx{../src/task rc:urgency.rc 1 _urgency}; my $output = qx{../src/task rc:urgency.rc 1 _urgency};
@@ -78,26 +78,26 @@ $output = qx{../src/task rc:urgency.rc 4 _urgency};
like ($output, qr/urgency 13$/ms, 'pri:L = 13'); like ($output, qr/urgency 13$/ms, 'pri:L = 13');
# project: 10 (project) + 10 (pending) # project: 10 (project) + 10 (pending)
qx{../src/task rc:urgency.rc add 2a project:P}; # 5 qx{../src/task rc:urgency.rc add 2a project:P}; # task 5
$output = qx{../src/task rc:urgency.rc 5 _urgency}; $output = qx{../src/task rc:urgency.rc 5 _urgency};
like ($output, qr/urgency 20$/ms, 'pro:P = 20'); like ($output, qr/urgency 20$/ms, 'pro:P = 20');
# active: 10 (active) + 10 (pending) # active: 10 (active) + 10 (pending)
qx{../src/task rc:urgency.rc add 3a}; # 6 qx{../src/task rc:urgency.rc add 3a}; # task 6
qx{../src/task rc:urgency.rc 6 start}; qx{../src/task rc:urgency.rc 6 start};
$output = qx{../src/task rc:urgency.rc 6 _urgency}; $output = qx{../src/task rc:urgency.rc 6 _urgency};
like ($output, qr/urgency 20$/ms, 'active = 20'); like ($output, qr/urgency 20$/ms, 'active = 20');
# next: 10 (+next) + 8 (1 tag) + 10 (pending) # next: 10 (+next) + 8 (1 tag) + 10 (pending)
qx{../src/task rc:urgency.rc add 4a +next}; # 7 qx{../src/task rc:urgency.rc add 4a +next}; # task 7
$output = qx{../src/task rc:urgency.rc 7 _urgency}; $output = qx{../src/task rc:urgency.rc 7 _urgency};
like ($output, qr/urgency 28$/ms, '+next = 28'); like ($output, qr/urgency 28$/ms, '+next = 28');
# tags # tags
qx{../src/task rc:urgency.rc add 5a +one}; # 8 qx{../src/task rc:urgency.rc add 5a +one}; # task 8
qx{../src/task rc:urgency.rc add 5b +one +two}; # 9 qx{../src/task rc:urgency.rc add 5b +one +two}; # task 9
qx{../src/task rc:urgency.rc add 5c +one +two +three}; # 10 qx{../src/task rc:urgency.rc add 5c +one +two +three}; # task 10
qx{../src/task rc:urgency.rc add 5d +one +two +three +four}; # 11 qx{../src/task rc:urgency.rc add 5d +one +two +three +four}; # task 11
# tags: 8 (1 tag) + 10 (pending) # tags: 8 (1 tag) + 10 (pending)
$output = qx{../src/task rc:urgency.rc 8 _urgency}; $output = qx{../src/task rc:urgency.rc 8 _urgency};
@@ -116,20 +116,20 @@ $output = qx{../src/task rc:urgency.rc 10 _urgency};
like ($output, qr/urgency 20$/ms, '+one +two +three +four = 20'); like ($output, qr/urgency 20$/ms, '+one +two +three +four = 20');
# annotations # annotations
qx{../src/task rc:urgency.rc add 6a}; # 12 qx{../src/task rc:urgency.rc add 6a}; # task 12
qx{../src/task rc:urgency.rc 12 annotate A}; qx{../src/task rc:urgency.rc 12 annotate A};
qx{../src/task rc:urgency.rc add 6b}; # 13 qx{../src/task rc:urgency.rc add 6b}; # task 13
qx{../src/task rc:urgency.rc 13 annotate A}; qx{../src/task rc:urgency.rc 13 annotate A};
diag ("6 second delay"); diag ("6 second delay");
sleep 1; sleep 1;
qx{../src/task rc:urgency.rc 13 annotate B}; qx{../src/task rc:urgency.rc 13 annotate B};
qx{../src/task rc:urgency.rc add 6c}; # 14 qx{../src/task rc:urgency.rc add 6c}; # task 14
qx{../src/task rc:urgency.rc 14 annotate A}; qx{../src/task rc:urgency.rc 14 annotate A};
sleep 1; sleep 1;
qx{../src/task rc:urgency.rc 14 annotate B}; qx{../src/task rc:urgency.rc 14 annotate B};
sleep 1; sleep 1;
qx{../src/task rc:urgency.rc 14 annotate C}; qx{../src/task rc:urgency.rc 14 annotate C};
qx{../src/task rc:urgency.rc add 6d}; # 15 qx{../src/task rc:urgency.rc add 6d}; # task 15
qx{../src/task rc:urgency.rc 15 annotate A}; qx{../src/task rc:urgency.rc 15 annotate A};
sleep 1; sleep 1;
qx{../src/task rc:urgency.rc 15 annotate B}; qx{../src/task rc:urgency.rc 15 annotate B};
@@ -155,12 +155,12 @@ $output = qx{../src/task rc:urgency.rc 15 _urgency};
like ($output, qr/urgency 20$/ms, '4 annotations = 20'); like ($output, qr/urgency 20$/ms, '4 annotations = 20');
# waiting: 10 # waiting: 10
qx{../src/task rc:urgency.rc add 7a wait:10s}; # 16 qx{../src/task rc:urgency.rc add 7a wait:10s}; # task 16
$output = qx{../src/task rc:urgency.rc 16 _urgency}; $output = qx{../src/task rc:urgency.rc 16 _urgency};
like ($output, qr/urgency 0$/ms, 'waiting = 0'); like ($output, qr/urgency 0$/ms, 'waiting = 0');
# blocked: 10 (pending) + 10 (blocked) # blocked: 10 (pending) + 10 (blocked)
qx{../src/task rc:urgency.rc add 8a depends:1}; # 17 qx{../src/task rc:urgency.rc add 8a depends:1}; # task 17
$output = qx{../src/task rc:urgency.rc 17 _urgency}; $output = qx{../src/task rc:urgency.rc 17 _urgency};
like ($output, qr/urgency 20$/ms, 'blocked = 20'); like ($output, qr/urgency 20$/ms, 'blocked = 20');
@@ -176,30 +176,30 @@ like ($output, qr/urgency 20$/ms, 'blocking = 20');
# has due date -> 0.3 # has due date -> 0.3
# no due date -> 0.0 # no due date -> 0.0
qx{../src/task rc:urgency.rc add 9a due:-10d}; # 18 qx{../src/task rc:urgency.rc add 9a due:-10d}; # task 18
qx{../src/task rc:urgency.rc add 9b due:-7d}; # 19 qx{../src/task rc:urgency.rc add 9b due:-7d}; # task 19
qx{../src/task rc:urgency.rc add 9c due:-6d}; # 20 qx{../src/task rc:urgency.rc add 9c due:-6d}; # task 20
qx{../src/task rc:urgency.rc add 9d due:-5d}; # 21 qx{../src/task rc:urgency.rc add 9d due:-5d}; # task 21
qx{../src/task rc:urgency.rc add 9e due:-4d}; # 22 qx{../src/task rc:urgency.rc add 9e due:-4d}; # task 22
qx{../src/task rc:urgency.rc add 9f due:-3d}; # 23 qx{../src/task rc:urgency.rc add 9f due:-3d}; # task 23
qx{../src/task rc:urgency.rc add 9g due:-2d}; # 24 qx{../src/task rc:urgency.rc add 9g due:-2d}; # task 24
qx{../src/task rc:urgency.rc add 9h due:-1d}; # 25 qx{../src/task rc:urgency.rc add 9h due:-1d}; # task 25
qx{../src/task rc:urgency.rc add 9i due:now}; # 26 qx{../src/task rc:urgency.rc add 9i due:now}; # task 26
qx{../src/task rc:urgency.rc add 9j due:25h}; # 27 qx{../src/task rc:urgency.rc add 9j due:25h}; # task 27
qx{../src/task rc:urgency.rc add 9k due:49h}; # 28 qx{../src/task rc:urgency.rc add 9k due:49h}; # task 28
qx{../src/task rc:urgency.rc add 9l due:73h}; # 29 qx{../src/task rc:urgency.rc add 9l due:73h}; # task 29
qx{../src/task rc:urgency.rc add 9m due:97h}; # 30 qx{../src/task rc:urgency.rc add 9m due:97h}; # task 30
qx{../src/task rc:urgency.rc add 9n due:121h}; # 31 qx{../src/task rc:urgency.rc add 9n due:121h}; # task 31
qx{../src/task rc:urgency.rc add 9o due:145h}; # 32 qx{../src/task rc:urgency.rc add 9o due:145h}; # task 32
qx{../src/task rc:urgency.rc add 9p due:169h}; # 33 qx{../src/task rc:urgency.rc add 9p due:169h}; # task 33
qx{../src/task rc:urgency.rc add 9q due:193h}; # 34 qx{../src/task rc:urgency.rc add 9q due:193h}; # task 34
qx{../src/task rc:urgency.rc add 9r due:217h}; # 35 qx{../src/task rc:urgency.rc add 9r due:217h}; # task 35
qx{../src/task rc:urgency.rc add 9s due:241h}; # 36 qx{../src/task rc:urgency.rc add 9s due:241h}; # task 36
qx{../src/task rc:urgency.rc add 9t due:265h}; # 37 qx{../src/task rc:urgency.rc add 9t due:265h}; # task 37
qx{../src/task rc:urgency.rc add 9u due:289h}; # 38 qx{../src/task rc:urgency.rc add 9u due:289h}; # task 38
qx{../src/task rc:urgency.rc add 9v due:313h}; # 39 qx{../src/task rc:urgency.rc add 9v due:313h}; # task 39
qx{../src/task rc:urgency.rc add 9w due:337h}; # 40 qx{../src/task rc:urgency.rc add 9w due:337h}; # task 40
qx{../src/task rc:urgency.rc add 9x due:361h}; # 41 qx{../src/task rc:urgency.rc add 9x due:361h}; # task 41
# due: 10 (due:-10d) + 10 (pending) # due: 10 (due:-10d) + 10 (pending)
$output = qx{../src/task rc:urgency.rc 18 _urgency}; $output = qx{../src/task rc:urgency.rc 18 _urgency};
@@ -298,12 +298,12 @@ $output = qx{../src/task rc:urgency.rc 41 _urgency};
like ($output, qr/urgency 11.6$/ms, 'due:20d = 11.6'); like ($output, qr/urgency 11.6$/ms, 'due:20d = 11.6');
# user.project: 10 (pro:PROJECT) + 10 (project) + 10 (pending) # user.project: 10 (pro:PROJECT) + 10 (project) + 10 (pending)
qx{../src/task rc:urgency.rc add 10a project:PROJECT}; # 42 qx{../src/task rc:urgency.rc add 10a project:PROJECT}; # task 42
$output = qx{../src/task rc:urgency.rc 42 _urgency}; $output = qx{../src/task rc:urgency.rc 42 _urgency};
like ($output, qr/urgency 30$/ms, 'pro:PROJECT = 30'); like ($output, qr/urgency 30$/ms, 'pro:PROJECT = 30');
# user.tag: 10 (+TAG) + 8 (1 tag) + 10 (pending) # user.tag: 10 (+TAG) + 8 (1 tag) + 10 (pending)
qx{../src/task rc:urgency.rc add 11a +TAG}; # 43 qx{../src/task rc:urgency.rc add 11a +TAG}; # task 43
$output = qx{../src/task rc:urgency.rc 43 _urgency}; $output = qx{../src/task rc:urgency.rc 43 _urgency};
like ($output, qr/urgency 28$/ms, '+TAG = 28'); like ($output, qr/urgency 28$/ms, '+TAG = 28');
@@ -317,6 +317,9 @@ ok (!-r 'completed.data', 'Removed completed.data');
unlink 'undo.data'; unlink 'undo.data';
ok (!-r 'undo.data', 'Removed undo.data'); ok (!-r 'undo.data', 'Removed undo.data');
unlink 'backlog.data';
ok (!-r 'backlog.data', 'Removed backlog.data');
unlink 'urgency.rc'; unlink 'urgency.rc';
ok (!-r 'urgency.rc', 'Removed urgency.rc'); ok (!-r 'urgency.rc', 'Removed urgency.rc');