Imported upstream version 0.08.01
[liburi-template-perl.git] / t / 10-basic.t
index 29c19aa..7dc6308 100644 (file)
@@ -1,15 +1,21 @@
 use strict;
 use warnings;
 
-use Test::More tests => 13;
+use Test::More tests => 25;
 
 use_ok( 'URI::Template' );
 
+# fatal - no template provided
+{
+   eval { URI::Template->new; };
+   ok( $@ );
+}
+
 {
     my $text     = 'http://foo.com/{bar}/{baz}?q=%7B';
     my $template = URI::Template->new( $text );
     isa_ok( $template, 'URI::Template' );
-    is_deeply( [ $template->variables ], [ qw( bar baz ) ], 'variables()' );
+    is_deeply( [ sort $template->variables ], [ qw( bar baz ) ], 'variables()' );
     is( "$template", $text, 'as_string()' );
 
     {
@@ -40,6 +46,75 @@ use_ok( 'URI::Template' );
         my $result = $template->process( );
         is( $result, 'http://foo.com//', 'no value sent' );
     }
+    {
+        my $result = $template->process( 'y' => '1' );
+        is( $result, 'http://foo.com//', 'no valid keys used' );
+    }
+}
+
+# test from spec
+{
+    my %vals = (
+        a => 'fred',
+        b => 'barney',
+        c => 'cheeseburger',
+        d => 'one two three',
+        e => '20% tricky',
+        f => '',
+        20 => 'this-is-spinal-tap',
+        scheme => 'https',
+        p => 'quote=to+be+or+not+to+be',
+        q => 'hullo#world',
+    );
+
+    my @urls = (
+        [ (
+            'http://example.org/page1#{a}',
+            'http://example.org/page1#fred',
+        ) ],
+        [ (
+            'http://example.org/{a}/{b}/',
+            'http://example.org/fred/barney/',
+        ) ],
+        [ (
+            'http://example.org/{a}{b}/',
+            'http://example.org/fredbarney/',
+        ) ],
+        [ (
+            'http://example.com/order/{c}/{c}/{c}/',
+            'http://example.com/order/cheeseburger/cheeseburger/cheeseburger/',
+        ) ],
+        [ (
+            'http://example.org/{d}',
+            'http://example.org/one%20two%20three',
+        ) ],
+        [ (
+            'http://example.org/{e}',
+            'http://example.org/20%25%20tricky',
+        ) ],
+        [ (
+            'http://example.com/{f}/',
+            'http://example.com//',
+        ) ],
+        [ (
+            '{scheme}://{20}.example.org?date={wilma}&option={a}',
+            'https://this-is-spinal-tap.example.org?date=&option=fred',
+        ) ],
+        [ (
+            'http://example.org?{p}',
+            'http://example.org?quote=to+be+or+not+to+be',
+        ) ],
+        [ (
+            'http://example.com/{q}',
+            'http://example.com/hullo#world',
+        ) ],
+    );
+
+    for my $list ( @urls ) {
+        my $template = URI::Template->new( $list->[ 0 ] );
+        my $result = $template->process( %vals );
+        is( $result, $list->[ 1 ], 'escaped properly' );
+    }
 }
 
 {