summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreinhverfr <einhverfr@4979c152-3d1c-0410-bac9-87ea11338e46>2008-11-13 22:19:16 +0000
committereinhverfr <einhverfr@4979c152-3d1c-0410-bac9-87ea11338e46>2008-11-13 22:19:16 +0000
commitc81c44d32e58bf3f49dfb34341232bbe26c12cea (patch)
treed461c277286a7c017073c9384e5ae26ccb9704b1
parent69326cd33298a19f8d0585fb5b35da8232afba1f (diff)
Correcting t/42 tests and dbobject array parsing.
git-svn-id: https://ledger-smb.svn.sourceforge.net/svnroot/ledger-smb/trunk@2395 4979c152-3d1c-0410-bac9-87ea11338e46
-rw-r--r--LedgerSMB/DBObject.pm13
-rw-r--r--t/42-dbobject.t12
2 files changed, 16 insertions, 9 deletions
diff --git a/LedgerSMB/DBObject.pm b/LedgerSMB/DBObject.pm
index dade3ab8..6e7abfd4 100644
--- a/LedgerSMB/DBObject.pm
+++ b/LedgerSMB/DBObject.pm
@@ -260,14 +260,10 @@ sub _parse_array {
$next = "";
$separator = "";
if ($value =~ /^\{"/){
- while ($next eq "" or ($next =~ /\\".$/)){
- $value =~ s/^\{("[^"]*".)/\{/;
- $next .= $1;
- $next =~ /(.)$/;
- $separator = $1;
- $next .= "quoted";
- }
- $next =~ s/"(.*)"$separator$/$1/;
+ $value =~ s/^\{"(([^"]|\\")*[^\\])"/\{/;
+ $next = $1;
+ $next =~ /(.)$/;
+ $value =~ s/^{,/{/;
} elsif ($value =~ /^{({+)/){
my $open_braces = $1;
@@ -277,7 +273,6 @@ sub _parse_array {
$value =~ /^{($open_braces[^}]*$close_braces)/;
my $parse_next = $1;
$value =~ s/^{$parse_next/{/;
- $value =~ s/^{,/{/;
@$next = $self->_parse_array($parse_next);
} else {
diff --git a/t/42-dbobject.t b/t/42-dbobject.t
new file mode 100644
index 00000000..6eb42f2f
--- /dev/null
+++ b/t/42-dbobject.t
@@ -0,0 +1,12 @@
+use LedgerSMB::DBObject;
+use Test::More tests => 4;
+
+# Array parsing tests
+my $test = '{test,"test2\"\",",test3,"test4"}';
+my @vals = ('test', 'test2"",', 'test3', 'test4');
+my $passes = 0;
+for (LedgerSMB::DBObject->_parse_array($test)){
+ is($_, shift @vals, "pass $pass, array parse test");
+}
+
+