[Rt-commit] rt branch, 4.2/multi-value-cf-in-rest, repushed
Alex Vandiver
alexmv at bestpractical.com
Mon Feb 2 21:55:59 EST 2015
The branch 4.2/multi-value-cf-in-rest was deleted and repushed:
was ce0a194ec583c4d5bc0fd08149283e88e758b8be
now 82a0d98af204af4062d0d7118035f09a0d27c6a7
1: 887bdc6 ! 1: eebb44a Add (failing) tests for escaping
@@ -7,7 +7,7 @@
+++ b/t/web/command_line.t
@@
expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
- expect_like(qr/CF\.{MultipleCF$$}: '1,2\\'s,3'/i, 'Verified change');
+ expect_like(qr/\QCF.{MultipleCF$$}\E: '1,2\\'s,3'/i, 'Verified change');
+# Test escaping of quotes - generate (foo)(bar') with no escapes
+my $ticket = RT::Ticket->new($RT::SystemUser);
2: d9d923b ! 2: 4a7e19c Update the tests to be more thorough
@@ -8,24 +8,24 @@
@@
expect_like(qr/Ticket $ticket_id updated/, 'Changed cf');
expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking new value');
- expect_like(qr/CF\.{myCF$$}: 1,2,3/i, 'Verified change');
+ expect_like(qr/\QCF.{myCF$$}\E: 1,2,3/i, 'Verified change');
-expect_send("edit ticket/$ticket_id set CF-myCF$$=\"1's,2,3\"", 'Changing CF...');
+expect_send(qq{edit ticket/$ticket_id set CF-myCF$$="1's,2,3"}, 'Changing CF...');
expect_like(qr/Ticket $ticket_id updated/, 'Changed cf');
expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking new value');
- expect_like(qr/CF\.{myCF$$}: 1's,2,3/i, 'Verified change');
+ expect_like(qr/\QCF.{myCF$$}\E: 1's,2,3/i, 'Verified change');
@@
expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
- expect_like(qr/CF\.{MultipleCF$$}: b,\s*c,\s*o/i, 'Verified multiple cf change');
+ expect_like(qr/\QCF.{MultipleCF$$}\E: b,\s*c,\s*o/i, 'Verified multiple cf change');
-expect_send("edit ticket/$ticket_id set CF.{MultipleCF$$}=\"'a,b,c'\" ", 'Changing CF...');
-expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
-expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
--expect_like(qr/CF\.{MultipleCF$$}: 'a,b,c'/i, 'Verified change');
+-expect_like(qr/\QCF.{MultipleCF$$}\E: 'a,b,c'/i, 'Verified change');
-expect_send("edit ticket/$ticket_id del CF.{MultipleCF$$}=a", 'Changing CF...');
-expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
-expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
--expect_like(qr/CF\.{MultipleCF$$}: 'a,b,c'/i, 'Verified change');
+-expect_like(qr/\QCF.{MultipleCF$$}\E: 'a,b,c'/i, 'Verified change');
+sub multi_round_trip {
+ my ($op, $value, $regex) = @_;
+ $Test::Builder::Level++;
@@ -38,28 +38,32 @@
+ expect_send(qq{edit ticket/$ticket_id $op CF.{MultipleCF$$}="$quoted"}, qq{CF $op $value});
+ expect_like(qr/Ticket $ticket_id updated/, qq{Got expected "updated" answer});
+ expect_send(qq{show ticket/$ticket_id -f CF.{MultipleCF$$}}, qq{Sent "show"});
-+ expect_like(qr/CF\.{MultipleCF$$}: $regex$/i, qq{Answer matches $regex});
++ expect_like(qr/\QCF.{MultipleCF$$}\E: $regex$/i, qq{Answer matches $regex});
+}
-expect_send("edit ticket/$ticket_id set CF.{MultipleCF$$}=q{a,b,c}", 'Changing CF...');
-expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
-expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
--expect_like(qr/CF\.{MultipleCF$$}: 'a,b,c'/i, 'Verified change');
+-expect_like(qr/\QCF.{MultipleCF$$}\E: 'a,b,c'/i, 'Verified change');
-expect_send("edit ticket/$ticket_id del CF.{MultipleCF$$}=a", 'Changing CF...');
-expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
-expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
--expect_like(qr/CF\.{MultipleCF$$}: 'a,b,c'/i, 'Verified change');
+-expect_like(qr/\QCF.{MultipleCF$$}\E: 'a,b,c'/i, 'Verified change');
-expect_send("edit ticket/$ticket_id del CF.{MultipleCF$$}=\"'a,b,c'\"", 'Changing CF...');
-expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
-expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
--expect_like(qr/CF\.{MultipleCF$$}: \s*$/i, 'Verified change');
+-expect_like(qr/\QCF.{MultipleCF$$}\E: \s*$/i, 'Verified change');
+# Test simple quoting
+my $ticket = RT::Ticket->new($RT::SystemUser);
+$ticket->Load($ticket_id);
+multi_round_trip(set => q|'a,b,c'|, qr/'a,b,c'/);
+is($ticket->CustomFieldValues("MultipleCF$$")->Count, 1, "Has only one CF value");
+is($ticket->FirstCustomFieldValue("MultipleCF$$"), q{a,b,c}, "And that CF value is as expected");
-+
+
+-expect_send("edit ticket/$ticket_id set CF.{MultipleCF$$}=\"q{1,2's,3}\"", 'Changing CF...');
+-expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
+-expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
+-expect_like(qr/\QCF.{MultipleCF$$}\E: '1,2\\'s,3'/i, 'Verified change');
+multi_round_trip(del => q|a|, qr/'a,b,c'/);
+is($ticket->CustomFieldValues("MultipleCF$$")->Count, 1, "Still has only one CF value");
+is($ticket->FirstCustomFieldValue("MultipleCF$$"), q{a,b,c}, "And that CF value is as expected");
@@ -81,11 +85,6 @@
+
+multi_round_trip(del => q|q{1,2's,3}|, qr/\s*/);
+is($ticket->CustomFieldValues("MultipleCF$$")->Count, 0, "Now has no CF values");
-
--expect_send("edit ticket/$ticket_id set CF.{MultipleCF$$}=\"q{1,2's,3}\"", 'Changing CF...');
--expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf');
--expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value');
--expect_like(qr/CF\.{MultipleCF$$}: '1,2\\'s,3'/i, 'Verified change');
# Test escaping of quotes - generate (foo)(bar') with no escapes
-my $ticket = RT::Ticket->new($RT::SystemUser);
3: 24dac2e = 3: 8da086c Compare base64 versions of the data, soas to not spew binary data on failure
4: dec993f = 4: a4ce86f Only escape the output if we're going to quote it
5: 8a2cce9 = 5: 577ecd5 Note that the vsplit code is duplicated
6: f3530b9 ! 6: 3355b94 Move to a regex-based quoting parser for vsplit
@@ -32,15 +32,15 @@
- }
- push @words, $s;
- }
-- elsif ( $a =~ /^q{/ ) {
+- elsif ( $a =~ /^q\{/ ) {
- my $s = $a;
-- while ( $a !~ /}$/ ) {
+- while ( $a !~ /\}$/ ) {
- ( $a, $b ) =
- split /\s*,\s*/, $b, 2;
- $s .= ',' . $a;
- }
-- $s =~ s/^q{/'/;
-- $s =~ s/}/'/;
+- $s =~ s/^q\{/'/;
+- $s =~ s/\}/'/;
- push @words, $s;
+ my ($val, $strip) = @_;
+ my @words;
@@ -57,9 +57,9 @@
+ (') # Single-quoted string
+ ((?>[^\\']*(?:\\.[^\\']*)*))'
+ |
-+ q{(.*?)} # A perl-ish q{} string; this does
-+ # no paren balancing, however, and
-+ # only exists for back-compat
++ q\{(.*?)\} # A perl-ish q{} string; this does
++ # no paren balancing, however, and
++ # only exists for back-compat
+ |
+ (.*?) # Anything else, until the next comma
+ )
@@ -187,14 +187,14 @@
- $s =~ s/\\'/'/g;
- push @new, $s;
- }
-- elsif ( $a =~ /^q{/ ) {
+- elsif ( $a =~ /^q\{/ ) {
- my $s = $a;
-- while ( $a !~ /}$/ ) {
+- while ( $a !~ /\}$/ ) {
- ( $a, $b ) = split /\s*,\s*/, $b, 2;
- $s .= ',' . $a;
- }
-- $s =~ s/^q{//;
-- $s =~ s/}//;
+- $s =~ s/^q\{//;
+- $s =~ s/\}//;
- push @new, $s;
- }
- else {
7: ce0a194 = 7: 82a0d98 Un-TODO the tests
More information about the rt-commit
mailing list