Index: trunk/Nebulous/t/75_parse_neb_key.t
===================================================================
--- trunk/Nebulous/t/75_parse_neb_key.t	(revision 16203)
+++ trunk/Nebulous/t/75_parse_neb_key.t	(revision 16203)
@@ -0,0 +1,170 @@
+#!/usr/bin/perl
+
+# Copryight (C) 2004-2005  Joshua Hoblitt
+#
+# $Id: 75_parse_neb_key.t,v 1.1 2008-01-23 22:27:51 jhoblitt Exp $
+
+use strict;
+use warnings FATAL => qw( all );
+
+use Test::More;
+
+plan tests => 36;
+
+use lib qw( ./t ./lib );
+
+use Nebulous::Util qw( :standard );
+use Test::Nebulous;
+
+# neb://<volume name>/...
+# neb:path...
+# neb:/path... (same as neb:path, leading '/' is stripped)
+# neb:///path... (same as neb:path)
+
+# key
+{
+    my ($path, $volume) = parse_neb_key('foo/bar/baz/quix');
+
+    is($path, 'foo/bar/baz/quix', 'path');
+    is($volume, undef, 'volume name');
+}
+
+{
+    my ($path, $volume) = parse_neb_key('/foo/bar/baz/quix');
+
+    is($path, 'foo/bar/baz/quix', 'path');
+    is($volume, undef, 'volume name');
+}
+
+{
+    my ($path, $volume) = parse_neb_key('//foo/bar/baz/quix');
+
+    is($path, 'foo/bar/baz/quix', 'path');
+    is($volume, undef, 'volume name');
+}
+
+{
+    my ($path, $volume) = parse_neb_key('///foo/bar/baz/quix');
+
+    is($path, 'foo/bar/baz/quix', 'path');
+    is($volume, undef, 'volume name');
+}
+
+{
+    my ($path, $volume) = parse_neb_key('foo////bar/baz/quix');
+
+    is($path, 'foo/bar/baz/quix', 'path');
+    is($volume, undef, 'volume name');
+}
+
+{
+    my ($path, $volume) = parse_neb_key('foo/bar/baz/quix/');
+
+    is($path, 'foo/bar/baz/quix', 'path');
+    is($volume, undef, 'volume name');
+}
+
+
+# URI w/ volume name
+{
+    my ($path, $volume) = parse_neb_key('neb://foo/bar/baz/quix');
+
+    is($path, 'bar/baz/quix', 'path');
+    is($volume, 'foo', 'volume name');
+}
+
+{
+    my ($path, $volume) = parse_neb_key('neb://foo//bar/baz/quix');
+
+    is($path, 'bar/baz/quix', 'path');
+    is($volume, 'foo', 'volume name');
+}
+
+{
+    my ($path, $volume) = parse_neb_key('neb://foo///bar/baz/quix');
+
+    is($path, 'bar/baz/quix', 'path');
+    is($volume, 'foo', 'volume name');
+}
+
+{
+    my ($path, $volume) = parse_neb_key('neb://foo/bar///baz/quix');
+
+    is($path, 'bar/baz/quix', 'path');
+    is($volume, 'foo', 'volume name');
+}
+
+{
+    my ($path, $volume) = parse_neb_key('neb://foo/bar/baz/quix/');
+
+    is($path, 'bar/baz/quix', 'path');
+    is($volume, 'foo', 'volume name');
+}
+
+
+# URI w/o volume name
+
+{
+    my ($path, $volume) = parse_neb_key('neb:/foo/bar/baz/quix');
+
+    is($path, 'foo/bar/baz/quix', 'path');
+    is($volume, undef, 'volume name');
+}
+
+{
+    my ($path, $volume) = parse_neb_key('neb:///foo/bar/baz/quix');
+
+    is($volume, undef, 'volume name');
+    is($path, 'foo/bar/baz/quix', 'path');
+}
+
+{
+    my ($path, $volume) = parse_neb_key('neb://///foo/bar/baz/quix');
+
+    is($path, 'foo/bar/baz/quix', 'path');
+    is($volume, undef, 'volume name');
+}
+
+# key w/ whitespace
+eval {
+    parse_neb_key('/ foo/bar/baz/quix');
+};
+like( $@, qr/may not contain whitespace/, "whitespace" );
+
+eval {
+    parse_neb_key(' /foo/bar/baz/quix');
+};
+like( $@, qr/may not contain whitespace/, "whitespace" );
+
+eval {
+    parse_neb_key('/foo/bar/baz/quix ');
+};
+like( $@, qr/may not contain whitespace/, "whitespace" );
+
+# URI w/ whitespace
+
+eval {
+    parse_neb_key('neb ://foo/bar/baz/quix');
+};
+like( $@, qr/may not contain whitespace/, "whitespace" );
+
+eval {
+    parse_neb_key('neb:// foo/bar/baz/quix');
+};
+like( $@, qr/may not contain whitespace/, "whitespace" );
+
+eval {
+    parse_neb_key(' neb://foo/bar/baz/quix');
+};
+like( $@, qr/may not contain whitespace/, "whitespace" );
+
+eval {
+    parse_neb_key('neb://foo/bar/baz/quix ');
+};
+like( $@, qr/may not contain whitespace/, "whitespace" );
+
+# URI w/o volume requires leading slash
+eval {
+    my ($path, $volume) = parse_neb_key('neb:foo/bar/baz/quix');
+};
+like( $@, qr/requires a leading slash/, "leading slash" );
