The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Test::Deep::URI - Easier testing of URIs for Test::Deep

SYNOPSIS

    use Test::Deep;
    use Test::Deep::URI;

    $testing_url = "http://site.com/path?a=1&b=2";
    cmp_deeply(
        $testing_url,
        all(
            uri("http://site.com/path?a=1&b=2"),
            # or
            uri("//site.com/path?a=1&b=2"),
            # or
            uri("/path?b=2&a=1"),
        )
    );

    cmp_deeply(
        $testing_url,
        uri_qf("/path", { a => 1, b => ignore() }),
    );

DESCRIPTION

Test::Deep::URI provides the functions uri($expected) and uri_qf($expected, $query_form) for Test::Deep. Use it in combination with cmp_deeply to test against partial URIs.

In particular I wrote this because I was tired of stumbling across unit tests that failed because http://site.com/?foo=1&bar=2 didn't match http://site.com/?bar=2&foo=1. This helper is smart enough to compare query_form parameters separately, while still enforcing the order of values for duplicate parameters.

FUNCTIONS

uri($expected)

Exported by default.

$expected should be a string that can be passed to URI->new().

uri_qf($expected, $query_form)

Exported by default.

$expected should be a string that can be passed to URI->new().

$query_form should be whatever structure you want to check the query form against.

ERRATA

I've mostly been using this with URLs, but it's built around URI and should work with all types. Let me know if something doesn't work.

AUTHOR

Nigel Gregoire <nigelgregoire@gmail.com>

COPYRIGHT

Copyright 2016 - Nigel Gregoire

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

Test::Deep
Test::Deep::JSON
Test::Deep::Filter
Test2::Tools::URL