Feature #158
- Added feature #158, regular expression support for filters and substitutions. - Added unit tests to att.t and filter.t. - Updated docs.
This commit is contained in:
@@ -34,7 +34,7 @@ Context context;
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
int main (int argc, char** argv)
|
||||
{
|
||||
UnitTest t (99);
|
||||
UnitTest t (117);
|
||||
|
||||
Att a;
|
||||
t.notok (a.valid ("name"), "Att::valid name -> fail");
|
||||
@@ -86,7 +86,7 @@ int main (int argc, char** argv)
|
||||
t.is (a6.value_int (), 7, "Att::value_int set/get");
|
||||
t.is (a6.value (), "7", "Att::value 7");
|
||||
|
||||
// Att::mod
|
||||
// Att::mod - straight comparisons.
|
||||
bool good = true;
|
||||
try {a6.mod ("is");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (is)");
|
||||
@@ -159,6 +159,81 @@ int main (int argc, char** argv)
|
||||
try {a6.mod ("unrecognized");} catch (...) {good = false;}
|
||||
t.notok (good, "Att::mod (unrecognized)");
|
||||
|
||||
// Att::mod - regex comparisons.
|
||||
context.config.set ("regex", "on");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("is");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (is)");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("before");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (before)");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("after");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (after)");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("none");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (none)");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("any");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (any)");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("over");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (over)");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("under");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (under)");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("above");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (above)");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("below");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (below)");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("isnt");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (isnt)");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("has");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (has)");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("contains");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (contains)");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("hasnt");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (hasnt)");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("startswith");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (startswith)");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("endswith");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (endswith)");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("word");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (word)");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("noword");} catch (...) {good = false;}
|
||||
t.ok (good, "Att::mod (noword)");
|
||||
|
||||
good = true;
|
||||
try {a6.mod ("unrecognized");} catch (...) {good = false;}
|
||||
t.notok (good, "Att::mod (unrecognized)");
|
||||
|
||||
// Att::parse
|
||||
Nibbler n ("");
|
||||
Att a7;
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Test::More tests => 131;
|
||||
use Test::More tests => 180;
|
||||
|
||||
# Create the rc file.
|
||||
if (open my $fh, '>', 'filter.rc')
|
||||
@@ -209,6 +209,70 @@ unlike ($output, qr/five/, 'r5');
|
||||
unlike ($output, qr/six/, 'r6');
|
||||
unlike ($output, qr/seven/, 'r7');
|
||||
|
||||
# Regex filters.
|
||||
$output = qx{../task rc:filter.rc list rc.regex:on project:[A-Z]};
|
||||
like ($output, qr/one/, 's1');
|
||||
like ($output, qr/two/, 's2');
|
||||
like ($output, qr/three/, 's3');
|
||||
unlike ($output, qr/four/, 's4');
|
||||
unlike ($output, qr/five/, 's5');
|
||||
unlike ($output, qr/six/, 's6');
|
||||
unlike ($output, qr/seven/, 's7');
|
||||
|
||||
$output = qx{../task rc:filter.rc list rc.regex:on project:.};
|
||||
like ($output, qr/one/, 't1');
|
||||
like ($output, qr/two/, 't2');
|
||||
like ($output, qr/three/, 't3');
|
||||
unlike ($output, qr/four/, 't4');
|
||||
unlike ($output, qr/five/, 't5');
|
||||
unlike ($output, qr/six/, 't6');
|
||||
unlike ($output, qr/seven/, 't7');
|
||||
|
||||
$output = qx{../task rc:filter.rc rc.regex:on list fo\{2\}};
|
||||
like ($output, qr/one/, 'u1');
|
||||
unlike ($output, qr/two/, 'u2');
|
||||
unlike ($output, qr/three/, 'u3');
|
||||
unlike ($output, qr/four/, 'u4');
|
||||
unlike ($output, qr/five/, 'u5');
|
||||
like ($output, qr/six/, 'u6');
|
||||
like ($output, qr/seven/, 'u7');
|
||||
|
||||
$output = qx{../task rc:filter.rc rc.regex:on list f.. b..};
|
||||
unlike ($output, qr/one/, 'v1');
|
||||
unlike ($output, qr/two/, 'v2');
|
||||
unlike ($output, qr/three/, 'v3');
|
||||
unlike ($output, qr/four/, 'v4');
|
||||
unlike ($output, qr/five/, 'v5');
|
||||
unlike ($output, qr/six/, 'v6');
|
||||
like ($output, qr/seven/, 'v7');
|
||||
|
||||
$output = qx{../task rc:filter.rc rc.regex:on list ^s};
|
||||
unlike ($output, qr/one/, 'w1');
|
||||
unlike ($output, qr/two/, 'w2');
|
||||
unlike ($output, qr/three/, 'w3');
|
||||
unlike ($output, qr/four/, 'w4');
|
||||
unlike ($output, qr/five/, 'w5');
|
||||
like ($output, qr/six/, 'w6');
|
||||
like ($output, qr/seven/, 'w7');
|
||||
|
||||
$output = qx{../task rc:filter.rc rc.regex:on list ^.i};
|
||||
unlike ($output, qr/one/, 'x1');
|
||||
unlike ($output, qr/two/, 'x2');
|
||||
unlike ($output, qr/three/, 'x3');
|
||||
unlike ($output, qr/four/, 'x4');
|
||||
like ($output, qr/five/, 'x5');
|
||||
like ($output, qr/six/, 'x6');
|
||||
unlike ($output, qr/seven/, 'x7');
|
||||
|
||||
$output = qx{../task rc:filter.rc rc.regex:on list "two|five"};
|
||||
unlike ($output, qr/one/, 'y1');
|
||||
like ($output, qr/two/, 'y2');
|
||||
unlike ($output, qr/three/, 'y3');
|
||||
unlike ($output, qr/four/, 'y4');
|
||||
like ($output, qr/five/, 'y5');
|
||||
unlike ($output, qr/six/, 'y6');
|
||||
unlike ($output, qr/seven/, 'y7');
|
||||
|
||||
# Cleanup.
|
||||
unlink 'pending.data';
|
||||
ok (!-r 'pending.data', 'Removed pending.data');
|
||||
|
||||
Reference in New Issue
Block a user