Index: /trunk/DataStore/t/02_fileset_parse.t
===================================================================
--- /trunk/DataStore/t/02_fileset_parse.t	(revision 6482)
+++ /trunk/DataStore/t/02_fileset_parse.t	(revision 6483)
@@ -3,5 +3,5 @@
 # Copyright (C) 2006  Joshua Hoblitt
 #
-# $Id: 02_fileset_parse.t,v 1.1 2006-02-24 02:51:31 jhoblitt Exp $
+# $Id: 02_fileset_parse.t,v 1.2 2006-02-24 22:00:52 jhoblitt Exp $
 
 use strict;
@@ -10,5 +10,6 @@
 use lib qw( ./lib ./t );
 
-use Test::More tests => 4;
+use Test::More tests => 38;
+use Test::Warn;
 
 =head1 NAME
@@ -56,4 +57,54 @@
     '->parse() fails when passed a zero length string');
 
+warning_like {
+    my $parser = DataStore::FileSet::Parser->new;
+
+    is($parser->parse('asdf|asdf'), undef,
+        '->parse() returns undef on failure');
+} qr/not enough fields/,
+    '->parse() fails when there are too few fields';
+
+warning_like {
+    my $parser = DataStore::FileSet::Parser->new;
+
+    is($parser->parse('|2006-01-01T00:03:04Z|object'), undef,
+        '->parse() returns undef on failure');
+} qr/does not conform /,
+    '->parse() fails when the fileset fields is not in the proper format';
+
+warning_like {
+    my $parser = DataStore::FileSet::Parser->new;
+
+    is($parser->parse('foobar|2006-01-0100:03:04|object'), undef,
+        '->parse() returns undef on failure');
+} qr/does not conform /,
+    '->parse() fails when the datetime fields is not in the proper format';
+
+warning_like {
+    my $parser = DataStore::FileSet::Parser->new;
+
+    is($parser->parse('foobar|2006-01-01T00:03:04Z| '), undef,
+        '->parse() returns undef on failure');
+} qr/does not conform /,
+    '->parse() fails when the type fields is not in the proper format';
+
+warning_like {
+    my $parser = DataStore::FileSet::Parser->new;
+
+    is($parser->parse('foo#bonkbar|2006-01-01T00:03:04Z|baz'), undef,
+        '->parse() returns undef on failure');
+} qr/contains #/,
+    '->parse() fails when a field contains #';
+
+warning_like {
+    my $parser = DataStore::FileSet::Parser->new;
+
+    is($parser->parse('foobar|2006-01-01T00:03:04Z|baz # foo'), undef,
+        '->parse() returns undef on failure');
+} qr/contains #/,
+    '->parse() comments are not allowed after the last field';
+
+{
+    # multi-row example
 my $example1 =<<END;
 # filesetID|time registered    |type   |telescope pointing         |etime|f|airmass|
@@ -63,82 +114,48 @@
 otis0123456|2006-01-01T00:03:04Z|object|11:00:10.33 68:26:59.6 2000|30.0 |r|1.23   |
 END
-
-{
     my $results = DataStore::FileSet::Parser->new->parse($example1);
 
     is(scalar @$results, 4, "correct number of item returned");
-}
-__END__
 
-{
-    my $item = pop @items;
-    is($item->stamp,   "2005-08-06T19:30:01",           "correct time stamp");
-    is($item->file_id, "telescope_2005-08-06T19:30:01", "correct file id");
-    is($item->type,    "metadata",                      "correct type");
-    is($item->size,    8640,                            "correct size");
-    is($item->md5,     "c462d570deb517d9bd92e5bb6a21cc86", "correct md5");
-    is($item->url,
-        "http://flaxen.ifa.hawaii.edu/otis/data/metadata/telescope_2005-08-06T19:30:01", "correct url");
-    is($item->attributes, undef, "no attributes");
+    isa_ok(@$results[0], 'DataStore::FileSet::Record');
+    is(@$results[0]->fileset, 'otis0123456', 'correct fileset');
+    is(@$results[0]->datetime, '2006-01-01T00:03:04Z', 'correct datetime');
+    is(@$results[0]->type, 'object', 'correct type');
+    isa_ok(@$results[1], 'DataStore::FileSet::Record');
+    is(@$results[1]->fileset, 'otis0123456', 'correct fileset');
+    is(@$results[1]->datetime, '2006-01-01T00:03:04Z', 'correct datetime');
+    is(@$results[1]->type, 'object', 'correct type');
+    isa_ok(@$results[2], 'DataStore::FileSet::Record');
+    is(@$results[2]->fileset, 'otis0123456', 'correct fileset');
+    is(@$results[2]->datetime, '2006-01-01T00:03:04Z', 'correct datetime');
+    is(@$results[2]->type, 'object', 'correct type');
+    isa_ok(@$results[3], 'DataStore::FileSet::Record');
+    is(@$results[3]->fileset, 'otis0123456', 'correct fileset');
+    is(@$results[3]->datetime, '2006-01-01T00:03:04Z', 'correct datetime');
+    is(@$results[3]->type, 'object', 'correct type');
+
 }
 
 {
-    my $item = pop @items;
-    is($item->stamp,   "2005-08-06T19:40:01",           "correct time stamp");
-    is($item->file_id, "telescope_2005-08-06T19:40:01", "correct file id");
-    is($item->type,    "metadata",                      "correct type");
-    is($item->size,    8640,                            "correct size");
-    is($item->md5,     "c462d570deb517d9bd92e5bb6a21cc86", "correct md5");
-    is($item->url,     "http://flaxen.ifa.hawaii.edu/otis/data/metadata/telescope_2005-08-06T19:40:01", "correct url");
-    is($item->attributes, undef, "no attributes");
+    # example with blank lines & comments
+my $example1 =<<END;
+
+
+# filesetID|time registered    |type   |telescope pointing         |etime|f|airmass|
+
+                            # random comment
+otis0123456|2006-01-01T00:03:04Z|object|11:00:10.33 68:26:59.6 2000|30.0 |r|1.23   |
+
+                            # random comment
+
+# foo
+END
+    my $results = DataStore::FileSet::Parser->new->parse($example1);
+
+    is(scalar @$results, 1, "correct number of item returned");
+
+    isa_ok(@$results[0], 'DataStore::FileSet::Record');
+    is(@$results[0]->fileset, 'otis0123456', 'correct fileset');
+    is(@$results[0]->datetime, '2006-01-01T00:03:04Z', 'correct datetime');
+    is(@$results[0]->type, 'object', 'correct type');
 }
-
-{
-    my $item = pop @items;
-    is($item->stamp,   "2005-08-06T19:50:01",           "correct time stamp");
-    is($item->file_id, "telescope_2005-08-06T19:50:01", "correct file id");
-    is($item->type,    "metadata",                      "correct type");
-    is($item->size,    8640,                            "correct size");
-    is($item->md5,     "c462d570deb517d9bd92e5bb6a21cc86", "correct md5");
-    is($item->url,     "http://flaxen.ifa.hawaii.edu/otis/data/metadata/telescope_2005-08-06T19:50:01", "correct url");
-    is($item->attributes, undef, "no attributes");
-}
-}
-
-my $example2 =<<END;
-2005-08-06|19:30:01|telescope_2005-08-06T19:30:01|metadata|foo=bar:baz=baz|8640|c462d570deb517d9bd92e5bb6a21cc86|http://flaxen.ifa.hawaii.edu/otis/data/metadata/telescope_2005-08-06T19:30:01
-END
-
-{
-my $results = $parser->parse($example2);
-my @items = @{ $results };
-
-is(scalar @items, 1, "correct number of item returned");
-
-{
-    my $item = pop @items;
-    is($item->stamp,   "2005-08-06T19:30:01",           "correct time stamp");
-    is($item->file_id, "telescope_2005-08-06T19:30:01", "correct file id");
-    is($item->type,    "metadata",                      "correct type");
-    is($item->size,    8640,                            "correct size");
-    is($item->md5,     "c462d570deb517d9bd92e5bb6a21cc86", "correct md5");
-    is($item->url,     "http://flaxen.ifa.hawaii.edu/otis/data/metadata/telescope_2005-08-06T19:30:01", "correct url");
-    eq_hash($item->attributes, { foo => 'bar', baz => 'baz' }, "no attributes");
-}
-}
-
-warning_like {
-    my $results = $parser->parse(<<END);
-2005-08-06|19:30:01|telescope_2005-08-06T19:30:01||foo=bar:baz=baz|8640|c462d570deb517d9bd92e5bb6a21cc86|http://flaxen.ifa.hawaii.edu/otis/data/metadata/telescope_2005-08-06T19:30:01
-END
-    is($results, undef, "field not allowed to be null");
-} qr/record: .*? is missing required field/,
-    "warning for null required field";
-
-warning_like {
-my $results = $parser->parse(<<END);
-2005-08-06|19:30:01|telescope_2005-08-06T19:30:01|foo=bar:baz=baz|8640|c462d570deb517d9bd92e5bb6a21cc86|http://flaxen.ifa.hawaii.edu/otis/data/metadata/telescope_2005-08-06T19:30:01
-END
-    is($results, undef, "not enough fields");
-} qr/record: .*? is missing required field/,
-    "warning for missing required field";
