From 7a778ba3176a1ae1d7c82ba9438709bb9abacd2c Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 21 Aug 2011 18:38:04 -0400 Subject: [PATCH] E9 operator_equal - Fixed broken logic in operator_equal. - Fixed typos in op_and.t unit test. - Fixed descriptions in op_or.t. --- src/E9.cpp | 25 +++++++++---------------- test/op_and.t | 2 +- test/op_or.t | 32 ++++++++++++++++---------------- 3 files changed, 26 insertions(+), 33 deletions(-) diff --git a/src/E9.cpp b/src/E9.cpp index a7f81f197..d68b81af8 100644 --- a/src/E9.cpp +++ b/src/E9.cpp @@ -457,25 +457,24 @@ void E9::operator_equal ( result._value = "false"; result._type = Arg::type_bool; - // 'project' and 'recur' attributes are matched leftmost. - if (left._raw == "project" || left._raw == "recur") + // 'project' is matched leftmost. + if (left._raw == "project") { - coerce (left, Arg::type_string); - coerce (right, Arg::type_string); - - if (right._value.length () <= left._value.length () && - compare (right._value, - left._value.substr (0, right._value.length ()), + int right_len = right._value.length (); + if (compare (right._value, + (right_len < left._value.length () + ? left._value.substr (0, right_len) + : left._value), case_sensitive)) { - result._raw = "true"; + result._value = "true"; } } // Dates. Note that missing data causes processing to transfer to the generic // string comparison below. else if ((left._type == Arg::type_date || - right._type == Arg::type_date) && + right._type == Arg::type_date) && left._value != "" && right._value != "") { @@ -493,12 +492,6 @@ void E9::operator_equal ( result._value = compare (left._value, right._value, case_sensitive) ? "true" : "false"; - - if (left._value == right._value) - { - result._value = "true"; - result._type = Arg::type_bool; - } } // std::cout << "# " << left << " " << right << " --> " << result << "\n"; diff --git a/test/op_and.t b/test/op_and.t index 7d7776956..e8f07d98c 100755 --- a/test/op_and.t +++ b/test/op_and.t @@ -76,7 +76,7 @@ unlike ($output, qr/two/, 'ls project:A priority:H --> !two'); unlike ($output, qr/three/, 'ls project:A priority:H --> !three'); unlike ($output, qr/four/, 'ls project:A priority:H --> !four'); -$output = qx{../src/task rc:op.rc ls project=A and priotity!=H}; +$output = qx{../src/task rc:op.rc ls project=A and priority!=H}; unlike ($output, qr/one/, 'ls project:A priority:H --> !one'); like ($output, qr/two/, 'ls project:A priority:H --> two'); unlike ($output, qr/three/, 'ls project:A priority:H --> !three'); diff --git a/test/op_or.t b/test/op_or.t index 9e92e1d67..1ae12d255 100755 --- a/test/op_or.t +++ b/test/op_or.t @@ -47,28 +47,28 @@ qx{../src/task rc:op.rc add four }; # Test the 'or' operator. my $output = qx{../src/task rc:op.rc ls project:A or priority:H}; -like ($output, qr/one/, 'ls project:A priority:H --> one'); -like ($output, qr/two/, 'ls project:A priority:H --> two'); -like ($output, qr/three/, 'ls project:A priority:H --> three'); -unlike ($output, qr/four/, 'ls project:A priority:H --> !four'); +like ($output, qr/one/, 'ls project:A or priority:H --> one'); +like ($output, qr/two/, 'ls project:A or priority:H --> two'); +like ($output, qr/three/, 'ls project:A or priority:H --> three'); +unlike ($output, qr/four/, 'ls project:A or priority:H --> !four'); $output = qx{../src/task rc:op.rc ls project:A or priority=H}; -like ($output, qr/one/, 'ls project:A priority=H --> one'); -like ($output, qr/two/, 'ls project:A priority=H --> two'); -like ($output, qr/three/, 'ls project:A priority=H --> three'); -unlike ($output, qr/four/, 'ls project:A priority=H --> !four'); +like ($output, qr/one/, 'ls project:A or priority=H --> one'); +like ($output, qr/two/, 'ls project:A or priority=H --> two'); +like ($output, qr/three/, 'ls project:A or priority=H --> three'); +unlike ($output, qr/four/, 'ls project:A or priority=H --> !four'); $output = qx{../src/task rc:op.rc ls project=A or priority:H}; -like ($output, qr/one/, 'ls project=A priority:H --> one'); -like ($output, qr/two/, 'ls project=A priority:H --> two'); -like ($output, qr/three/, 'ls project=A priority:H --> three'); -unlike ($output, qr/four/, 'ls project=A priority:H --> !four'); +like ($output, qr/one/, 'ls project=A or priority:H --> one'); +like ($output, qr/two/, 'ls project=A or priority:H --> two'); +like ($output, qr/three/, 'ls project=A or priority:H --> three'); +unlike ($output, qr/four/, 'ls project=A or priority:H --> !four'); $output = qx{../src/task rc:op.rc ls project=A or priority=H}; -like ($output, qr/one/, 'ls project=A priority=H --> one'); -like ($output, qr/two/, 'ls project=A priority=H --> two'); -like ($output, qr/three/, 'ls project=A priority=H --> three'); -unlike ($output, qr/four/, 'ls project=A priority=H --> !four'); +like ($output, qr/one/, 'ls project=A or priority=H --> one'); +like ($output, qr/two/, 'ls project=A or priority=H --> two'); +like ($output, qr/three/, 'ls project=A or priority=H --> three'); +unlike ($output, qr/four/, 'ls project=A or priority=H --> !four'); # Cleanup. unlink 'pending.data';