--- /dev/null
+# HOW TO CONTRIBUTE
+
+Thank you for considering contributing to this distribution. This file
+contains instructions that will help you work with the source code.
+
+The distribution is managed with [Dist::Zilla](https://metacpan.org/pod/Dist::Zilla).
+This means that many of the usual files you might expect are not in the
+repository, but are generated at release time. Some generated files are kept
+in the repository as a convenience (e.g. Build.PL/Makefile.PL and META.json).
+
+Generally, **you do not need Dist::Zilla to contribute patches**. You may need
+Dist::Zilla to create a tarball. See below for guidance.
+
+## Getting dependencies
+
+If you have App::cpanminus 1.6 or later installed, you can use
+[cpanm](https://metacpan.org/pod/cpanm) to satisfy dependencies like this:
+
+ $ cpanm --installdeps --with-develop .
+
+You can also run this command (or any other cpanm command) without installing
+App::cpanminus first, using the fatpacked `cpanm` script via curl or wget:
+
+ $ curl -L https://cpanmin.us | perl - --installdeps --with-develop .
+ $ wget -qO - https://cpanmin.us | perl - --installdeps --with-develop .
+
+Otherwise, look for either a `cpanfile` or `META.json` file for a list of
+dependencies to satisfy.
+
+## Running tests
+
+You can run tests directly using the `prove` tool:
+
+ $ prove -l
+ $ prove -lv t/some_test_file.t
+
+For most of my distributions, `prove` is entirely sufficient for you to test
+any patches you have. I use `prove` for 99% of my testing during development.
+
+## Code style and tidying
+
+Please try to match any existing coding style. If there is a `.perltidyrc`
+file, please install Perl::Tidy and use perltidy before submitting patches.
+
+## Installing and using Dist::Zilla
+
+[Dist::Zilla](https://metacpan.org/pod/Dist::Zilla) is a very powerful
+authoring tool, optimized for maintaining a large number of distributions with
+a high degree of automation, but it has a large dependency chain, a bit of a
+learning curve and requires a number of author-specific plugins.
+
+To install it from CPAN, I recommend one of the following approaches for the
+quickest installation:
+
+ # using CPAN.pm, but bypassing non-functional pod tests
+ $ cpan TAP::Harness::Restricted
+ $ PERL_MM_USE_DEFAULT=1 HARNESS_CLASS=TAP::Harness::Restricted cpan Dist::Zilla
+
+ # using cpanm, bypassing *all* tests
+ $ cpanm -n Dist::Zilla
+
+In either case, it's probably going to take about 10 minutes. Go for a walk,
+go get a cup of your favorite beverage, take a bathroom break, or whatever.
+When you get back, Dist::Zilla should be ready for you.
+
+Then you need to install any plugins specific to this distribution:
+
+ $ dzil authordeps --missing | cpanm
+
+You can use Dist::Zilla to install the distribution's dependencies if you
+haven't already installed them with cpanm:
+
+ $ dzil listdeps --missing --develop | cpanm
+
+Once everything is installed, here are some dzil commands you might try:
+
+ $ dzil build
+ $ dzil test
+ $ dzil regenerate
+
+You can learn more about Dist::Zilla at http://dzil.org/
+
+## Other notes
+
+This distribution maintains the generated `META.json` and either `Makefile.PL`
+or `Build.PL` in the repository. This allows two things:
+[Travis CI](https://travis-ci.org/) can build and test the distribution without
+requiring Dist::Zilla, and the distribution can be installed directly from
+Github or a local git repository using `cpanm` for testing (again, not
+requiring Dist::Zilla).
+
+ $ cpanm git://github.com/Author/Distribution-Name.git
+ $ cd Distribution-Name; cpanm .
+
+Contributions are preferred in the form of a Github pull request. See
+[Using pull requests](https://help.github.com/articles/using-pull-requests/)
+for further information. You can use the Github issue tracker to report issues
+without an accompanying patch.
+
+# CREDITS
+
+This file was adapted from an initial `CONTRIBUTING.mkdn` file from David
+Golden under the terms of the Apache 2 license, with inspiration from the
+contributing documents from [Dist::Zilla::Plugin::Author::KENTNL::CONTRIBUTING](https://metacpan.org/pod/Dist::Zilla::Plugin::Author::KENTNL::CONTRIBUTING)
+and [Dist::Zilla::PluginBundle::Author::ETHER](https://metacpan.org/pod/Dist::Zilla::PluginBundle::Author::ETHER).
+Revision history for URI
+
+1.74 2018-04-22 12:30:44Z
+ - avoid 'uninitialized' warning in URI::File when host has no domain name
+ set (PR#53, thanks Shoichi Kaji!)
+
+1.73 2018-01-09 06:42:51Z
+ - Update documentation for URI::_punycode (GH Issue #45)
+
+1.72 2017-07-25
+ - Convert the dist to Dist::Zilla for authoring.
+ - Remove recommendation of Business::ISBN as urn/isbn.pm is deprecated
+ - Use Test::Needs instead of raw eval in urn-isbn.t
+
+2016-01-08 Karen Etheridge <ether@cpan.org>
+
+ Release 1.71
+
+ No changes since 1.70_001
+
+2015-12-29 Karen Etheridge <ether@cpan.org>
+
+ Release 1.70_001
+
+ Kaitlyn Parkhurst:
+
+ - Localize $@ when attempting to load URI subclasses (PR#30)
+
+ Karen Etheridge:
+
+ - speed up construction time by not attempting to load the same
+ non-existent URI subclass twice
+
+
+2015-07-25 Karen Etheridge <ether@cpan.org>
+
+ Release 1.69
+
+ Karen Etheridge:
+ - add $VERSIONs for all modules that lack them
+
+ Olaf Alders:
+ - add missing documentation for URI::sftp
+ - Clarify use of query_param() method
+
+
+2015-06-25 Karen Etheridge <ether@cpan.org>
+
+ Release 1.68
+
+ Kent Fredric:
+ - Sort hash keys to make generated query predictable
+
+ Slaven Rezic:
+ - Add new tests for path segments
+
+ Brendan Byrd:
+ - Add sftp scheme
+
+
+2015-02-24 Karen Etheridge <ether@cpan.org>
+
+ Release 1.67
+
+ Karen Etheridge:
+ - properly skip author test for normal user installs
+
+
+2015-02-24 Karen Etheridge <ether@cpan.org>
+
+ Release 1.66
+
+ Adam Herzog:
+ - reorganize .pm files under lib/ (github #20)
+
+
+2014-11-05 Karen Etheridge <ether@cpan.org>
+
+ Release 1.65
+
+ Karen Etheridge:
+ - add a TO_JSON method, to assist JSON serialization
+
+
+2014-07-13 Karen Etheridge <ether@cpan.org>
+
+ Release 1.64
+
+ Eric Brine:
+ - better fix for RT#96941, that also works around utf8 bugs on older perls
+
+
+2014-07-13 Karen Etheridge <ether@cpan.org>
+
+ Release 1.63
+
+ Karen Etheridge:
+ - mark utf8-related test failures on older perls caused by recent string
+ parsing changes as TODO (RT#97177, RT#96941)
+
+
+2014-07-12 Karen Etheridge <ether@cpan.org>
+
+ Release 1.62
+
+ Karen Etheridge (2):
+ - use strict and warnings in all modules, tests and scripts
+ - remove all remaining uses of "use vars"
+
+ Eric Brine:
+ - fixed new "\C is deprecated in regex" warning in 5.21.2 (RT#96941)
+
+
+2014-07-01 Karen Etheridge <ether@cpan.org>
+
+ Release 1.61
+
+ David Schmidt:
+ Fix test failure if local hostname is 'foo' [RT#75519]
+
+ Gisle Aas (2):
+ New 'has_recognized_scheme' interface [RT#71204]
+ Interfaces that return a single value now return undef rather than an
+ empty list in list context
+
+ Slaven Rezic:
+ Fix bad regex when parsing hostnames
+
+ Piotr Roszatycki:
+ Preferentially use $ENV{TMPDIR} for temporary test files over /tmp
+ (fixes tests on Android)
+
+
+
2012-03-25 Gisle Aas <gisle@ActiveState.com>
Release 1.60
Release 1.57
+ Perl 5.6 is no longer supported; use backpan.cpan.org to obtain obsolete
+ versions of URI.
+
Mark Stosberg (8):
typo fix: s/do deal/to deal/
best practice: s/foreach /for /
Relative URIs that start with the query string directly (i.e. "?q")
are now absolutized as specified in rfc2396bis. See:
http://www.apache.org/~fielding/uri/rev-2002/issues.html#003-relative-query
-
+
Added URI::Split module. It's a lightweight module that can be
used to parse and compose URI string to/from its component parts.
--- /dev/null
+This software is copyright (c) 1998 by Gisle Aas.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+Terms of the Perl programming language system itself
+
+a) the GNU General Public License as published by the Free
+ Software Foundation; either version 1, or (at your option) any
+ later version, or
+b) the "Artistic License"
+
+--- The GNU General Public License, Version 1, February 1989 ---
+
+This software is Copyright (c) 1998 by Gisle Aas.
+
+This is free software, licensed under:
+
+ The GNU General Public License, Version 1, February 1989
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 1, February 1989
+
+ Copyright (C) 1989 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The license agreements of most software companies try to keep users
+at the mercy of those companies. By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must tell them their rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License. The
+"Program", below, refers to any such program or work, and a "work based
+on the Program" means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications. Each
+licensee is addressed as "you".
+
+ 1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program. You may charge a fee for the physical act of
+transferring a copy.
+
+ 2. You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+ a) cause the modified files to carry prominent notices stating that
+ you changed the files and the date of any change; and
+
+ b) cause the whole of any work that you distribute or publish, that
+ in whole or in part contains the Program or any part thereof, either
+ with or without modifications, to be licensed at no charge to all
+ third parties under the terms of this General Public License (except
+ that you may choose to grant warranty protection to some or all
+ third parties, at your option).
+
+ c) If the modified program normally reads commands interactively when
+ run, you must cause it, when started running for such interactive use
+ in the simplest and most usual way, to print or display an
+ announcement including an appropriate copyright notice and a notice
+ that there is no warranty (or else, saying that you provide a
+ warranty) and that users may redistribute the program under these
+ conditions, and telling the user how to view a copy of this General
+ Public License.
+
+ d) You may charge a fee for the physical act of transferring a
+ copy, and you may at your option offer warranty protection in
+ exchange for a fee.
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+ 3. You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+ a) accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ b) accompany it with a written offer, valid for at least three
+ years, to give any third party free (except for a nominal charge
+ for the cost of distribution) a complete machine-readable copy of the
+ corresponding source code, to be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ c) accompany it with the information you received as to where the
+ corresponding source code may be obtained. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form alone.)
+
+Source code for a work means the preferred form of the work for making
+modifications to it. For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+ 4. You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License. However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+ 5. By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions. You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+ 7. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of the license which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+ 8. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19xx name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ program `Gnomovision' (a program to direct compilers to make passes
+ at assemblers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+--- The Artistic License 1.0 ---
+
+This software is Copyright (c) 1998 by Gisle Aas.
+
+This is free software, licensed under:
+
+ The Artistic License 1.0
+
+The Artistic License
+
+Preamble
+
+The intent of this document is to state the conditions under which a Package
+may be copied, such that the Copyright Holder maintains some semblance of
+artistic control over the development of the package, while giving the users of
+the package the right to use and distribute the Package in a more-or-less
+customary fashion, plus the right to make reasonable modifications.
+
+Definitions:
+
+ - "Package" refers to the collection of files distributed by the Copyright
+ Holder, and derivatives of that collection of files created through
+ textual modification.
+ - "Standard Version" refers to such a Package if it has not been modified,
+ or has been modified in accordance with the wishes of the Copyright
+ Holder.
+ - "Copyright Holder" is whoever is named in the copyright or copyrights for
+ the package.
+ - "You" is you, if you're thinking about copying or distributing this Package.
+ - "Reasonable copying fee" is whatever you can justify on the basis of media
+ cost, duplication charges, time of people involved, and so on. (You will
+ not be required to justify it to the Copyright Holder, but only to the
+ computing community at large as a market that must bear the fee.)
+ - "Freely Available" means that no fee is charged for the item itself, though
+ there may be fees involved in handling the item. It also means that
+ recipients of the item may redistribute it under the same conditions they
+ received it.
+
+1. You may make and give away verbatim copies of the source form of the
+Standard Version of this Package without restriction, provided that you
+duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications derived
+from the Public Domain or from the Copyright Holder. A Package modified in such
+a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided that
+you insert a prominent notice in each changed file stating how and when you
+changed that file, and provided that you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise make them
+ Freely Available, such as by posting said modifications to Usenet or an
+ equivalent medium, or placing the modifications on a major archive site
+ such as ftp.uu.net, or by allowing the Copyright Holder to include your
+ modifications in the Standard Version of the Package.
+
+ b) use the modified Package only within your corporation or organization.
+
+ c) rename any non-standard executables so the names do not conflict with
+ standard executables, which must also be provided, and provide a separate
+ manual page for each non-standard executable that clearly documents how it
+ differs from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or executable
+form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library files,
+ together with instructions (in the manual page or equivalent) on where to
+ get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of the Package
+ with your modifications.
+
+ c) accompany any non-standard executables with their corresponding Standard
+ Version executables, giving the non-standard executables non-standard
+ names, and clearly documenting the differences in manual pages (or
+ equivalent), together with instructions on where to get the Standard
+ Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this
+Package. You may charge any fee you choose for support of this Package. You
+may not charge a fee for this Package itself. However, you may distribute this
+Package in aggregate with other (possibly commercial) programs as part of a
+larger (possibly commercial) software distribution provided that you do not
+advertise this Package as a product of your own.
+
+6. The scripts and library files supplied as input to or produced as output
+from the programs of this Package do not automatically fall under the copyright
+of this Package, but belong to whomever generated them, and may be sold
+commercially, and may be aggregated with this Package.
+
+7. C or perl subroutines supplied by you and linked into this Package shall not
+be considered part of this Package.
+
+8. The name of the Copyright Holder may not be used to endorse or promote
+products derived from this software without specific prior written permission.
+
+9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+The End
+
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest v6.012.
+CONTRIBUTING.md
Changes
+LICENSE
MANIFEST
+META.json
+META.yml
Makefile.PL
-README
-URI.pm
-URI/Escape.pm
-URI/Heuristic.pm
-URI/IRI.pm
-URI/QueryParam.pm
-URI/Split.pm
-URI/URL.pm
-URI/WithBase.pm
-URI/_foreign.pm
-URI/_generic.pm
-URI/_idna.pm
-URI/_ldap.pm
-URI/_login.pm
-URI/_punycode.pm
-URI/_query.pm
-URI/_segment.pm
-URI/_server.pm
-URI/_userpass.pm
-URI/data.pm
-URI/file.pm
-URI/file/Base.pm
-URI/file/FAT.pm
-URI/file/Mac.pm
-URI/file/OS2.pm
-URI/file/QNX.pm
-URI/file/Unix.pm
-URI/file/Win32.pm
-URI/ftp.pm
-URI/gopher.pm
-URI/http.pm
-URI/https.pm
-URI/ldap.pm
-URI/ldapi.pm
-URI/ldaps.pm
-URI/mailto.pm
-URI/mms.pm
-URI/news.pm
-URI/nntp.pm
-URI/pop.pm
-URI/rlogin.pm
-URI/rsync.pm
-URI/rtsp.pm
-URI/rtspu.pm
-URI/sip.pm
-URI/sips.pm
-URI/snews.pm
-URI/ssh.pm
-URI/telnet.pm
-URI/tn3270.pm
-URI/urn.pm
-URI/urn/isbn.pm
-URI/urn/oid.pm
+cpanfile
+dist.ini
+lib/URI.pm
+lib/URI/Escape.pm
+lib/URI/Heuristic.pm
+lib/URI/IRI.pm
+lib/URI/QueryParam.pm
+lib/URI/Split.pm
+lib/URI/URL.pm
+lib/URI/WithBase.pm
+lib/URI/_foreign.pm
+lib/URI/_generic.pm
+lib/URI/_idna.pm
+lib/URI/_ldap.pm
+lib/URI/_login.pm
+lib/URI/_punycode.pm
+lib/URI/_query.pm
+lib/URI/_segment.pm
+lib/URI/_server.pm
+lib/URI/_userpass.pm
+lib/URI/data.pm
+lib/URI/file.pm
+lib/URI/file/Base.pm
+lib/URI/file/FAT.pm
+lib/URI/file/Mac.pm
+lib/URI/file/OS2.pm
+lib/URI/file/QNX.pm
+lib/URI/file/Unix.pm
+lib/URI/file/Win32.pm
+lib/URI/ftp.pm
+lib/URI/gopher.pm
+lib/URI/http.pm
+lib/URI/https.pm
+lib/URI/ldap.pm
+lib/URI/ldapi.pm
+lib/URI/ldaps.pm
+lib/URI/mailto.pm
+lib/URI/mms.pm
+lib/URI/news.pm
+lib/URI/nntp.pm
+lib/URI/pop.pm
+lib/URI/rlogin.pm
+lib/URI/rsync.pm
+lib/URI/rtsp.pm
+lib/URI/rtspu.pm
+lib/URI/sftp.pm
+lib/URI/sip.pm
+lib/URI/sips.pm
+lib/URI/snews.pm
+lib/URI/ssh.pm
+lib/URI/telnet.pm
+lib/URI/tn3270.pm
+lib/URI/urn.pm
+lib/URI/urn/isbn.pm
+lib/URI/urn/oid.pm
+t/00-report-prereqs.dd
+t/00-report-prereqs.t
t/abs.t
t/clone.t
t/cwd.t
t/data.t
+t/escape-char.t
t/escape.t
t/file.t
t/ftp.t
t/old-base.t
t/old-file.t
t/old-relbase.t
+t/path-segments.t
t/pop.t
t/punycode.t
-t/query.t
t/query-param.t
+t/query.t
t/rel.t
t/rfc2732.t
t/roy-test.t
t/roytest5.html
t/rsync.t
t/rtsp.t
-t/split.t
+t/scheme-exceptions.t
t/sip.t
-t/storable.t
+t/sort-hash-query-form.t
+t/split.t
t/storable-test.pl
+t/storable.t
t/urn-isbn.t
t/urn-oid.t
t/utf8.t
uri-test
-META.yml Module meta-data (added by MakeMaker)
+xt/author/00-compile.t
+xt/author/minimum-version.t
+xt/author/mojibake.t
+xt/author/pod-coverage.t
+xt/author/pod-spell.t
+xt/author/pod-syntax.t
+xt/author/portability.t
+xt/author/test-version.t
+xt/release/changes_has_content.t
+xt/release/distmeta.t
--- /dev/null
+{
+ "abstract" : "Uniform Resource Identifiers (absolute and relative)",
+ "author" : [
+ "Gisle Aas <gisle@activestate.com>"
+ ],
+ "dynamic_config" : 0,
+ "generated_by" : "Dist::Zilla version 6.012, CPAN::Meta::Converter version 2.150010",
+ "license" : [
+ "perl_5"
+ ],
+ "meta-spec" : {
+ "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
+ "version" : 2
+ },
+ "name" : "URI",
+ "no_index" : {
+ "directory" : [
+ "t",
+ "xt"
+ ]
+ },
+ "prereqs" : {
+ "configure" : {
+ "requires" : {
+ "ExtUtils::MakeMaker" : "0"
+ },
+ "suggests" : {
+ "JSON::PP" : "2.27300"
+ }
+ },
+ "develop" : {
+ "recommends" : {
+ "Business::ISBN" : "0",
+ "Dist::Zilla::PluginBundle::Git::VersionManager" : "0.007",
+ "Storable" : "0"
+ },
+ "requires" : {
+ "File::Spec" : "0",
+ "IO::Handle" : "0",
+ "IPC::Open3" : "0",
+ "Pod::Coverage::TrustPod" : "0",
+ "Test::CPAN::Changes" : "0.19",
+ "Test::CPAN::Meta" : "0",
+ "Test::MinimumVersion" : "0",
+ "Test::Mojibake" : "0",
+ "Test::More" : "0.94",
+ "Test::Pod" : "1.41",
+ "Test::Pod::Coverage" : "1.08",
+ "Test::Portability::Files" : "0",
+ "Test::Spelling" : "0.12",
+ "Test::Version" : "1"
+ }
+ },
+ "runtime" : {
+ "requires" : {
+ "Carp" : "0",
+ "Cwd" : "0",
+ "Data::Dumper" : "0",
+ "Encode" : "0",
+ "Exporter" : "5.57",
+ "MIME::Base64" : "2",
+ "Net::Domain" : "0",
+ "Scalar::Util" : "0",
+ "constant" : "0",
+ "integer" : "0",
+ "overload" : "0",
+ "parent" : "0",
+ "perl" : "5.008001",
+ "strict" : "0",
+ "utf8" : "0",
+ "warnings" : "0"
+ }
+ },
+ "test" : {
+ "recommends" : {
+ "CPAN::Meta" : "2.120900"
+ },
+ "requires" : {
+ "ExtUtils::MakeMaker" : "0",
+ "File::Spec" : "0",
+ "File::Spec::Functions" : "0",
+ "File::Temp" : "0",
+ "Test" : "0",
+ "Test::More" : "0.96",
+ "Test::Needs" : "0",
+ "utf8" : "0"
+ }
+ }
+ },
+ "provides" : {
+ "URI" : {
+ "file" : "lib/URI.pm",
+ "version" : "1.74"
+ },
+ "URI::Escape" : {
+ "file" : "lib/URI/Escape.pm",
+ "version" : "3.31"
+ },
+ "URI::Heuristic" : {
+ "file" : "lib/URI/Heuristic.pm",
+ "version" : "4.20"
+ },
+ "URI::IRI" : {
+ "file" : "lib/URI/IRI.pm",
+ "version" : "1.74"
+ },
+ "URI::QueryParam" : {
+ "file" : "lib/URI/QueryParam.pm",
+ "version" : "1.74"
+ },
+ "URI::Split" : {
+ "file" : "lib/URI/Split.pm",
+ "version" : "1.74"
+ },
+ "URI::URL" : {
+ "file" : "lib/URI/URL.pm",
+ "version" : "5.04"
+ },
+ "URI::WithBase" : {
+ "file" : "lib/URI/WithBase.pm",
+ "version" : "2.20"
+ },
+ "URI::data" : {
+ "file" : "lib/URI/data.pm",
+ "version" : "1.74"
+ },
+ "URI::file" : {
+ "file" : "lib/URI/file.pm",
+ "version" : "4.21"
+ },
+ "URI::file::Base" : {
+ "file" : "lib/URI/file/Base.pm",
+ "version" : "1.74"
+ },
+ "URI::file::FAT" : {
+ "file" : "lib/URI/file/FAT.pm",
+ "version" : "1.74"
+ },
+ "URI::file::Mac" : {
+ "file" : "lib/URI/file/Mac.pm",
+ "version" : "1.74"
+ },
+ "URI::file::OS2" : {
+ "file" : "lib/URI/file/OS2.pm",
+ "version" : "1.74"
+ },
+ "URI::file::QNX" : {
+ "file" : "lib/URI/file/QNX.pm",
+ "version" : "1.74"
+ },
+ "URI::file::Unix" : {
+ "file" : "lib/URI/file/Unix.pm",
+ "version" : "1.74"
+ },
+ "URI::file::Win32" : {
+ "file" : "lib/URI/file/Win32.pm",
+ "version" : "1.74"
+ },
+ "URI::ftp" : {
+ "file" : "lib/URI/ftp.pm",
+ "version" : "1.74"
+ },
+ "URI::gopher" : {
+ "file" : "lib/URI/gopher.pm",
+ "version" : "1.74"
+ },
+ "URI::http" : {
+ "file" : "lib/URI/http.pm",
+ "version" : "1.74"
+ },
+ "URI::https" : {
+ "file" : "lib/URI/https.pm",
+ "version" : "1.74"
+ },
+ "URI::ldap" : {
+ "file" : "lib/URI/ldap.pm",
+ "version" : "1.74"
+ },
+ "URI::ldapi" : {
+ "file" : "lib/URI/ldapi.pm",
+ "version" : "1.74"
+ },
+ "URI::ldaps" : {
+ "file" : "lib/URI/ldaps.pm",
+ "version" : "1.74"
+ },
+ "URI::mailto" : {
+ "file" : "lib/URI/mailto.pm",
+ "version" : "1.74"
+ },
+ "URI::mms" : {
+ "file" : "lib/URI/mms.pm",
+ "version" : "1.74"
+ },
+ "URI::news" : {
+ "file" : "lib/URI/news.pm",
+ "version" : "1.74"
+ },
+ "URI::nntp" : {
+ "file" : "lib/URI/nntp.pm",
+ "version" : "1.74"
+ },
+ "URI::pop" : {
+ "file" : "lib/URI/pop.pm",
+ "version" : "1.74"
+ },
+ "URI::rlogin" : {
+ "file" : "lib/URI/rlogin.pm",
+ "version" : "1.74"
+ },
+ "URI::rsync" : {
+ "file" : "lib/URI/rsync.pm",
+ "version" : "1.74"
+ },
+ "URI::rtsp" : {
+ "file" : "lib/URI/rtsp.pm",
+ "version" : "1.74"
+ },
+ "URI::rtspu" : {
+ "file" : "lib/URI/rtspu.pm",
+ "version" : "1.74"
+ },
+ "URI::sftp" : {
+ "file" : "lib/URI/sftp.pm",
+ "version" : "1.74"
+ },
+ "URI::sip" : {
+ "file" : "lib/URI/sip.pm",
+ "version" : "1.74"
+ },
+ "URI::sips" : {
+ "file" : "lib/URI/sips.pm",
+ "version" : "1.74"
+ },
+ "URI::snews" : {
+ "file" : "lib/URI/snews.pm",
+ "version" : "1.74"
+ },
+ "URI::ssh" : {
+ "file" : "lib/URI/ssh.pm",
+ "version" : "1.74"
+ },
+ "URI::telnet" : {
+ "file" : "lib/URI/telnet.pm",
+ "version" : "1.74"
+ },
+ "URI::tn3270" : {
+ "file" : "lib/URI/tn3270.pm",
+ "version" : "1.74"
+ },
+ "URI::urn" : {
+ "file" : "lib/URI/urn.pm",
+ "version" : "1.74"
+ },
+ "URI::urn::isbn" : {
+ "file" : "lib/URI/urn/isbn.pm",
+ "version" : "1.74"
+ },
+ "URI::urn::oid" : {
+ "file" : "lib/URI/urn/oid.pm",
+ "version" : "1.74"
+ }
+ },
+ "release_status" : "stable",
+ "resources" : {
+ "bugtracker" : {
+ "web" : "https://github.com/libwww-perl/URI/issues"
+ },
+ "homepage" : "https://github.com/libwww-perl/URI",
+ "repository" : {
+ "type" : "git",
+ "url" : "https://github.com/libwww-perl/URI.git",
+ "web" : "https://github.com/libwww-perl/URI"
+ },
+ "x_IRC" : "irc://irc.perl.org/#lwp",
+ "x_MailingList" : "mailto:libwww@perl.org"
+ },
+ "version" : "1.74",
+ "x_Dist_Zilla" : {
+ "perl" : {
+ "version" : "5.027011"
+ },
+ "plugins" : [
+ {
+ "class" : "Dist::Zilla::Plugin::Git::GatherDir",
+ "config" : {
+ "Dist::Zilla::Plugin::GatherDir" : {
+ "exclude_filename" : [
+ "LICENSE",
+ "README.md",
+ "draft-duerst-iri-bis.txt",
+ "rfc2396.txt",
+ "rfc3986.txt",
+ "rfc3987.txt"
+ ],
+ "exclude_match" : [],
+ "follow_symlinks" : 0,
+ "include_dotfiles" : 0,
+ "prefix" : "",
+ "prune_directory" : [],
+ "root" : "."
+ },
+ "Dist::Zilla::Plugin::Git::GatherDir" : {
+ "include_untracked" : 0
+ }
+ },
+ "name" : "Git::GatherDir",
+ "version" : "2.043"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Encoding",
+ "name" : "Encoding",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::MetaConfig",
+ "name" : "MetaConfig",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::MetaProvides::Package",
+ "config" : {
+ "Dist::Zilla::Plugin::MetaProvides::Package" : {
+ "finder_objects" : [
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : "MetaProvides::Package/AUTOVIV/:InstallModulesPM",
+ "version" : "6.012"
+ }
+ ],
+ "include_underscores" : 0
+ },
+ "Dist::Zilla::Role::MetaProvider::Provider" : {
+ "$Dist::Zilla::Role::MetaProvider::Provider::VERSION" : "2.002004",
+ "inherit_missing" : "0",
+ "inherit_version" : "0",
+ "meta_noindex" : 1
+ },
+ "Dist::Zilla::Role::ModuleMetadata" : {
+ "Module::Metadata" : "1.000033",
+ "version" : "0.006"
+ }
+ },
+ "name" : "MetaProvides::Package",
+ "version" : "2.004003"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::MetaNoIndex",
+ "name" : "MetaNoIndex",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::MetaYAML",
+ "name" : "MetaYAML",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::MetaJSON",
+ "name" : "MetaJSON",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::MetaResources",
+ "name" : "MetaResources",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Git::Contributors",
+ "config" : {
+ "Dist::Zilla::Plugin::Git::Contributors" : {
+ "git_version" : "2.14.2",
+ "include_authors" : 0,
+ "include_releaser" : 1,
+ "order_by" : "commits",
+ "paths" : []
+ }
+ },
+ "name" : "Git::Contributors",
+ "version" : "0.034"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::GithubMeta",
+ "name" : "GithubMeta",
+ "version" : "0.54"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Authority",
+ "name" : "Authority",
+ "version" : "1.009"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Manifest",
+ "name" : "Manifest",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::License",
+ "name" : "License",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::ExecDir",
+ "name" : "ExecDir",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Prereqs::FromCPANfile",
+ "name" : "Prereqs::FromCPANfile",
+ "version" : "0.08"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::MakeMaker",
+ "config" : {
+ "Dist::Zilla::Role::TestRunner" : {
+ "default_jobs" : 1
+ }
+ },
+ "name" : "MakeMaker",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::CheckChangesHasContent",
+ "name" : "CheckChangesHasContent",
+ "version" : "0.011"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::MojibakeTests",
+ "name" : "MojibakeTests",
+ "version" : "0.8"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Test::Version",
+ "name" : "Test::Version",
+ "version" : "1.09"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Test::ReportPrereqs",
+ "name" : "Test::ReportPrereqs",
+ "version" : "0.027"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Test::Compile",
+ "config" : {
+ "Dist::Zilla::Plugin::Test::Compile" : {
+ "bail_out_on_fail" : "1",
+ "fail_on_warning" : "author",
+ "fake_home" : 0,
+ "filename" : "xt/author/00-compile.t",
+ "module_finder" : [
+ ":InstallModules"
+ ],
+ "needs_display" : 0,
+ "phase" : "develop",
+ "script_finder" : [
+ ":PerlExecFiles"
+ ],
+ "skips" : [],
+ "switch" : []
+ }
+ },
+ "name" : "Test::Compile",
+ "version" : "2.058"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Test::Portability",
+ "config" : {
+ "Dist::Zilla::Plugin::Test::Portability" : {
+ "options" : ""
+ }
+ },
+ "name" : "Test::Portability",
+ "version" : "2.001000"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::MetaTests",
+ "name" : "MetaTests",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Test::ChangesHasContent",
+ "name" : "Test::ChangesHasContent",
+ "version" : "0.011"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Test::MinimumVersion",
+ "name" : "Test::MinimumVersion",
+ "version" : "2.000008"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::PodSyntaxTests",
+ "name" : "PodSyntaxTests",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Test::Pod::Coverage::Configurable",
+ "name" : "Test::Pod::Coverage::Configurable",
+ "version" : "0.07"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Test::PodSpelling",
+ "config" : {
+ "Dist::Zilla::Plugin::Test::PodSpelling" : {
+ "directories" : [
+ "bin",
+ "lib"
+ ],
+ "spell_cmd" : "aspell list",
+ "stopwords" : [
+ "Berners",
+ "IDNA",
+ "ISBNs",
+ "Koster",
+ "Martijn",
+ "Masinter",
+ "OIDs",
+ "OpenLDAP",
+ "Punycode",
+ "TCP",
+ "TLS",
+ "UDP",
+ "UNC",
+ "etype",
+ "evalue",
+ "lowercasing",
+ "relativize",
+ "uppercasing"
+ ],
+ "wordlist" : "Pod::Wordlist"
+ }
+ },
+ "name" : "Test::PodSpelling",
+ "version" : "2.007005"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::CheckStrictVersion",
+ "name" : "CheckStrictVersion",
+ "version" : "0.001"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Git::Check",
+ "config" : {
+ "Dist::Zilla::Plugin::Git::Check" : {
+ "untracked_files" : "die"
+ },
+ "Dist::Zilla::Role::Git::DirtyFiles" : {
+ "allow_dirty" : [],
+ "allow_dirty_match" : [],
+ "changelog" : "Changes"
+ },
+ "Dist::Zilla::Role::Git::Repo" : {
+ "git_version" : "2.14.2",
+ "repo_root" : "."
+ }
+ },
+ "name" : "Git::Check",
+ "version" : "2.043"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Git::CheckFor::MergeConflicts",
+ "config" : {
+ "Dist::Zilla::Role::Git::Repo" : {
+ "git_version" : "2.14.2",
+ "repo_root" : "."
+ }
+ },
+ "name" : "Git::CheckFor::MergeConflicts",
+ "version" : "0.014"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Git::CheckFor::CorrectBranch",
+ "config" : {
+ "Dist::Zilla::Role::Git::Repo" : {
+ "git_version" : "2.14.2",
+ "repo_root" : "."
+ }
+ },
+ "name" : "Git::CheckFor::CorrectBranch",
+ "version" : "0.014"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Git::Remote::Check",
+ "name" : "Git::Remote::Check",
+ "version" : "0.1.2"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::TestRelease",
+ "name" : "TestRelease",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::RunExtraTests",
+ "config" : {
+ "Dist::Zilla::Role::TestRunner" : {
+ "default_jobs" : 1
+ }
+ },
+ "name" : "RunExtraTests",
+ "version" : "0.029"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::UploadToCPAN",
+ "name" : "UploadToCPAN",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::ReadmeAnyFromPod",
+ "config" : {
+ "Dist::Zilla::Role::FileWatcher" : {
+ "version" : "0.006"
+ }
+ },
+ "name" : "Markdown_Readme",
+ "version" : "0.163250"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Prereqs",
+ "config" : {
+ "Dist::Zilla::Plugin::Prereqs" : {
+ "phase" : "develop",
+ "type" : "recommends"
+ }
+ },
+ "name" : "@Git::VersionManager/pluginbundle version",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::VersionFromMainModule",
+ "config" : {
+ "Dist::Zilla::Role::ModuleMetadata" : {
+ "Module::Metadata" : "1.000033",
+ "version" : "0.006"
+ }
+ },
+ "name" : "@Git::VersionManager/VersionFromMainModule",
+ "version" : "0.04"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::MetaProvides::Update",
+ "name" : "@Git::VersionManager/MetaProvides::Update",
+ "version" : "0.007"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::CopyFilesFromRelease",
+ "config" : {
+ "Dist::Zilla::Plugin::CopyFilesFromRelease" : {
+ "filename" : [
+ "Changes"
+ ],
+ "match" : []
+ }
+ },
+ "name" : "@Git::VersionManager/CopyFilesFromRelease",
+ "version" : "0.007"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Git::Commit",
+ "config" : {
+ "Dist::Zilla::Plugin::Git::Commit" : {
+ "add_files_in" : [],
+ "commit_msg" : "%N-%v%t%n%n%c"
+ },
+ "Dist::Zilla::Role::Git::DirtyFiles" : {
+ "allow_dirty" : [
+ "Changes",
+ "LICENSE",
+ "README.md"
+ ],
+ "allow_dirty_match" : [],
+ "changelog" : "Changes"
+ },
+ "Dist::Zilla::Role::Git::Repo" : {
+ "git_version" : "2.14.2",
+ "repo_root" : "."
+ },
+ "Dist::Zilla::Role::Git::StringFormatter" : {
+ "time_zone" : "local"
+ }
+ },
+ "name" : "@Git::VersionManager/release snapshot",
+ "version" : "2.043"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Git::Tag",
+ "config" : {
+ "Dist::Zilla::Plugin::Git::Tag" : {
+ "branch" : null,
+ "changelog" : "Changes",
+ "signed" : 0,
+ "tag" : "v1.74",
+ "tag_format" : "v%v",
+ "tag_message" : "v%v"
+ },
+ "Dist::Zilla::Role::Git::Repo" : {
+ "git_version" : "2.14.2",
+ "repo_root" : "."
+ },
+ "Dist::Zilla::Role::Git::StringFormatter" : {
+ "time_zone" : "local"
+ }
+ },
+ "name" : "@Git::VersionManager/Git::Tag",
+ "version" : "2.043"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::BumpVersionAfterRelease",
+ "config" : {
+ "Dist::Zilla::Plugin::BumpVersionAfterRelease" : {
+ "finders" : [
+ ":ExecFiles",
+ ":InstallModules"
+ ],
+ "global" : 0,
+ "munge_makefile_pl" : 1
+ }
+ },
+ "name" : "@Git::VersionManager/BumpVersionAfterRelease",
+ "version" : "0.018"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::NextRelease",
+ "name" : "@Git::VersionManager/NextRelease",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Git::Commit",
+ "config" : {
+ "Dist::Zilla::Plugin::Git::Commit" : {
+ "add_files_in" : [],
+ "commit_msg" : "increment $VERSION after %v release"
+ },
+ "Dist::Zilla::Role::Git::DirtyFiles" : {
+ "allow_dirty" : [
+ "Build.PL",
+ "Changes",
+ "Makefile.PL"
+ ],
+ "allow_dirty_match" : [
+ "(?^:^lib/.*\\.pm$)"
+ ],
+ "changelog" : "Changes"
+ },
+ "Dist::Zilla::Role::Git::Repo" : {
+ "git_version" : "2.14.2",
+ "repo_root" : "."
+ },
+ "Dist::Zilla::Role::Git::StringFormatter" : {
+ "time_zone" : "local"
+ }
+ },
+ "name" : "@Git::VersionManager/post-release commit",
+ "version" : "2.043"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Git::Push",
+ "config" : {
+ "Dist::Zilla::Plugin::Git::Push" : {
+ "push_to" : [
+ "origin"
+ ],
+ "remotes_must_exist" : 1
+ },
+ "Dist::Zilla::Role::Git::Repo" : {
+ "git_version" : "2.14.2",
+ "repo_root" : "."
+ }
+ },
+ "name" : "Git::Push",
+ "version" : "2.043"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::ConfirmRelease",
+ "name" : "ConfirmRelease",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":InstallModules",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":IncModules",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":TestFiles",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":ExtraTestFiles",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":ExecFiles",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":PerlExecFiles",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":ShareFiles",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":MainModule",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":AllFiles",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":NoFiles",
+ "version" : "6.012"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : "MetaProvides::Package/AUTOVIV/:InstallModulesPM",
+ "version" : "6.012"
+ }
+ ],
+ "zilla" : {
+ "class" : "Dist::Zilla::Dist::Builder",
+ "config" : {
+ "is_trial" : 0
+ },
+ "version" : "6.012"
+ }
+ },
+ "x_authority" : "cpan:LWWWP",
+ "x_contributors" : [
+ "Gisle Aas <gisle@aas.no>",
+ "Karen Etheridge <ether@cpan.org>",
+ "Chase Whitener <capoeirab@cpan.org>",
+ "Ville Skytt\u00e4 <ville.skytta@iki.fi>",
+ "Mark Stosberg <mark@stosberg.com>",
+ "Olaf Alders <olaf@wundersolutions.com>",
+ "Michael G. Schwern <schwern@pobox.com>",
+ "Shoichi Kaji <skaji@cpan.org>",
+ "Slaven Rezic <slaven@rezic.de>",
+ "Kent Fredric <kentfredric@gmail.com>",
+ "Masahiro Honma <hiratara@cpan.org>",
+ "Matt Lawrence <matthewlawrence@venda.com>",
+ "Peter Rabbitson <ribasushi@cpan.org>",
+ "Piotr Roszatycki <piotr.roszatycki@gmail.com>",
+ "Salvatore Bonaccorso <carnil@launchpad.net>",
+ "Tatsuhiko Miyagawa <miyagawa@bulknews.net>",
+ "Torsten F\u00f6rtsch <torsten.foertsch@gmx.net>",
+ "Adam Herzog <adam@adamherzog.com>",
+ "gerard <gerard@tty.nl>",
+ "Alex Kapranoff <kapranoff@gmail.com>",
+ "Brendan Byrd <Perl@ResonatorSoft.org>",
+ "David Schmidt <davewood@gmx.at>",
+ "Jan Dubois <jand@activestate.com>",
+ "John Karr <brainbuz@brainbuz.org>",
+ "John Miller <john@rimmkaufman.com>",
+ "Kaitlyn Parkhurst <symkat@symkat.com>",
+ "Kenichi Ishigaki <ishigaki@cpan.org>"
+ ],
+ "x_generated_by_perl" : "v5.27.11",
+ "x_serialization_backend" : "Cpanel::JSON::XS version 4.02"
+}
+
---- #YAML:1.0
-name: URI
-version: 1.60
-abstract: Uniform Resource Identifiers (absolute and relative)
+---
+abstract: 'Uniform Resource Identifiers (absolute and relative)'
author:
- - Gisle Aas <gisle@activestate.com>
-license: perl
-distribution_type: module
-configure_requires:
- ExtUtils::MakeMaker: 0
+ - 'Gisle Aas <gisle@activestate.com>'
build_requires:
- ExtUtils::MakeMaker: 0
- Test: 0
- Test::More: 0
+ ExtUtils::MakeMaker: '0'
+ File::Spec: '0'
+ File::Spec::Functions: '0'
+ File::Temp: '0'
+ Test: '0'
+ Test::More: '0.96'
+ Test::Needs: '0'
+ utf8: '0'
+configure_requires:
+ ExtUtils::MakeMaker: '0'
+dynamic_config: 0
+generated_by: 'Dist::Zilla version 6.012, CPAN::Meta::Converter version 2.150010'
+license: perl
+meta-spec:
+ url: http://module-build.sourceforge.net/META-spec-v1.4.html
+ version: '1.4'
+name: URI
+no_index:
+ directory:
+ - t
+ - xt
+provides:
+ URI:
+ file: lib/URI.pm
+ version: '1.74'
+ URI::Escape:
+ file: lib/URI/Escape.pm
+ version: '3.31'
+ URI::Heuristic:
+ file: lib/URI/Heuristic.pm
+ version: '4.20'
+ URI::IRI:
+ file: lib/URI/IRI.pm
+ version: '1.74'
+ URI::QueryParam:
+ file: lib/URI/QueryParam.pm
+ version: '1.74'
+ URI::Split:
+ file: lib/URI/Split.pm
+ version: '1.74'
+ URI::URL:
+ file: lib/URI/URL.pm
+ version: '5.04'
+ URI::WithBase:
+ file: lib/URI/WithBase.pm
+ version: '2.20'
+ URI::data:
+ file: lib/URI/data.pm
+ version: '1.74'
+ URI::file:
+ file: lib/URI/file.pm
+ version: '4.21'
+ URI::file::Base:
+ file: lib/URI/file/Base.pm
+ version: '1.74'
+ URI::file::FAT:
+ file: lib/URI/file/FAT.pm
+ version: '1.74'
+ URI::file::Mac:
+ file: lib/URI/file/Mac.pm
+ version: '1.74'
+ URI::file::OS2:
+ file: lib/URI/file/OS2.pm
+ version: '1.74'
+ URI::file::QNX:
+ file: lib/URI/file/QNX.pm
+ version: '1.74'
+ URI::file::Unix:
+ file: lib/URI/file/Unix.pm
+ version: '1.74'
+ URI::file::Win32:
+ file: lib/URI/file/Win32.pm
+ version: '1.74'
+ URI::ftp:
+ file: lib/URI/ftp.pm
+ version: '1.74'
+ URI::gopher:
+ file: lib/URI/gopher.pm
+ version: '1.74'
+ URI::http:
+ file: lib/URI/http.pm
+ version: '1.74'
+ URI::https:
+ file: lib/URI/https.pm
+ version: '1.74'
+ URI::ldap:
+ file: lib/URI/ldap.pm
+ version: '1.74'
+ URI::ldapi:
+ file: lib/URI/ldapi.pm
+ version: '1.74'
+ URI::ldaps:
+ file: lib/URI/ldaps.pm
+ version: '1.74'
+ URI::mailto:
+ file: lib/URI/mailto.pm
+ version: '1.74'
+ URI::mms:
+ file: lib/URI/mms.pm
+ version: '1.74'
+ URI::news:
+ file: lib/URI/news.pm
+ version: '1.74'
+ URI::nntp:
+ file: lib/URI/nntp.pm
+ version: '1.74'
+ URI::pop:
+ file: lib/URI/pop.pm
+ version: '1.74'
+ URI::rlogin:
+ file: lib/URI/rlogin.pm
+ version: '1.74'
+ URI::rsync:
+ file: lib/URI/rsync.pm
+ version: '1.74'
+ URI::rtsp:
+ file: lib/URI/rtsp.pm
+ version: '1.74'
+ URI::rtspu:
+ file: lib/URI/rtspu.pm
+ version: '1.74'
+ URI::sftp:
+ file: lib/URI/sftp.pm
+ version: '1.74'
+ URI::sip:
+ file: lib/URI/sip.pm
+ version: '1.74'
+ URI::sips:
+ file: lib/URI/sips.pm
+ version: '1.74'
+ URI::snews:
+ file: lib/URI/snews.pm
+ version: '1.74'
+ URI::ssh:
+ file: lib/URI/ssh.pm
+ version: '1.74'
+ URI::telnet:
+ file: lib/URI/telnet.pm
+ version: '1.74'
+ URI::tn3270:
+ file: lib/URI/tn3270.pm
+ version: '1.74'
+ URI::urn:
+ file: lib/URI/urn.pm
+ version: '1.74'
+ URI::urn::isbn:
+ file: lib/URI/urn/isbn.pm
+ version: '1.74'
+ URI::urn::oid:
+ file: lib/URI/urn/oid.pm
+ version: '1.74'
requires:
- MIME::Base64: 2
- perl: 5.008001
+ Carp: '0'
+ Cwd: '0'
+ Data::Dumper: '0'
+ Encode: '0'
+ Exporter: '5.57'
+ MIME::Base64: '2'
+ Net::Domain: '0'
+ Scalar::Util: '0'
+ constant: '0'
+ integer: '0'
+ overload: '0'
+ parent: '0'
+ perl: '5.008001'
+ strict: '0'
+ utf8: '0'
+ warnings: '0'
resources:
- MailingList: mailto:libwww@perl.org
- repository: https://github.com/libwww-perl/uri
-no_index:
- directory:
- - t
- - inc
-generated_by: ExtUtils::MakeMaker version 6.57_05
-meta-spec:
- url: http://module-build.sourceforge.net/META-spec-v1.4.html
- version: 1.4
-recommends:
- Business::ISBN: 0
+ IRC: irc://irc.perl.org/#lwp
+ MailingList: mailto:libwww@perl.org
+ bugtracker: https://github.com/libwww-perl/URI/issues
+ homepage: https://github.com/libwww-perl/URI
+ repository: https://github.com/libwww-perl/URI.git
+version: '1.74'
+x_Dist_Zilla:
+ perl:
+ version: '5.027011'
+ plugins:
+ -
+ class: Dist::Zilla::Plugin::Git::GatherDir
+ config:
+ Dist::Zilla::Plugin::GatherDir:
+ exclude_filename:
+ - LICENSE
+ - README.md
+ - draft-duerst-iri-bis.txt
+ - rfc2396.txt
+ - rfc3986.txt
+ - rfc3987.txt
+ exclude_match: []
+ follow_symlinks: 0
+ include_dotfiles: 0
+ prefix: ''
+ prune_directory: []
+ root: .
+ Dist::Zilla::Plugin::Git::GatherDir:
+ include_untracked: 0
+ name: Git::GatherDir
+ version: '2.043'
+ -
+ class: Dist::Zilla::Plugin::Encoding
+ name: Encoding
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::MetaConfig
+ name: MetaConfig
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::MetaProvides::Package
+ config:
+ Dist::Zilla::Plugin::MetaProvides::Package:
+ finder_objects:
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: MetaProvides::Package/AUTOVIV/:InstallModulesPM
+ version: '6.012'
+ include_underscores: 0
+ Dist::Zilla::Role::MetaProvider::Provider:
+ $Dist::Zilla::Role::MetaProvider::Provider::VERSION: '2.002004'
+ inherit_missing: '0'
+ inherit_version: '0'
+ meta_noindex: '1'
+ Dist::Zilla::Role::ModuleMetadata:
+ Module::Metadata: '1.000033'
+ version: '0.006'
+ name: MetaProvides::Package
+ version: '2.004003'
+ -
+ class: Dist::Zilla::Plugin::MetaNoIndex
+ name: MetaNoIndex
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::MetaYAML
+ name: MetaYAML
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::MetaJSON
+ name: MetaJSON
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::MetaResources
+ name: MetaResources
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::Git::Contributors
+ config:
+ Dist::Zilla::Plugin::Git::Contributors:
+ git_version: 2.14.2
+ include_authors: 0
+ include_releaser: 1
+ order_by: commits
+ paths: []
+ name: Git::Contributors
+ version: '0.034'
+ -
+ class: Dist::Zilla::Plugin::GithubMeta
+ name: GithubMeta
+ version: '0.54'
+ -
+ class: Dist::Zilla::Plugin::Authority
+ name: Authority
+ version: '1.009'
+ -
+ class: Dist::Zilla::Plugin::Manifest
+ name: Manifest
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::License
+ name: License
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::ExecDir
+ name: ExecDir
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::Prereqs::FromCPANfile
+ name: Prereqs::FromCPANfile
+ version: '0.08'
+ -
+ class: Dist::Zilla::Plugin::MakeMaker
+ config:
+ Dist::Zilla::Role::TestRunner:
+ default_jobs: 1
+ name: MakeMaker
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::CheckChangesHasContent
+ name: CheckChangesHasContent
+ version: '0.011'
+ -
+ class: Dist::Zilla::Plugin::MojibakeTests
+ name: MojibakeTests
+ version: '0.8'
+ -
+ class: Dist::Zilla::Plugin::Test::Version
+ name: Test::Version
+ version: '1.09'
+ -
+ class: Dist::Zilla::Plugin::Test::ReportPrereqs
+ name: Test::ReportPrereqs
+ version: '0.027'
+ -
+ class: Dist::Zilla::Plugin::Test::Compile
+ config:
+ Dist::Zilla::Plugin::Test::Compile:
+ bail_out_on_fail: '1'
+ fail_on_warning: author
+ fake_home: 0
+ filename: xt/author/00-compile.t
+ module_finder:
+ - ':InstallModules'
+ needs_display: 0
+ phase: develop
+ script_finder:
+ - ':PerlExecFiles'
+ skips: []
+ switch: []
+ name: Test::Compile
+ version: '2.058'
+ -
+ class: Dist::Zilla::Plugin::Test::Portability
+ config:
+ Dist::Zilla::Plugin::Test::Portability:
+ options: ''
+ name: Test::Portability
+ version: '2.001000'
+ -
+ class: Dist::Zilla::Plugin::MetaTests
+ name: MetaTests
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::Test::ChangesHasContent
+ name: Test::ChangesHasContent
+ version: '0.011'
+ -
+ class: Dist::Zilla::Plugin::Test::MinimumVersion
+ name: Test::MinimumVersion
+ version: '2.000008'
+ -
+ class: Dist::Zilla::Plugin::PodSyntaxTests
+ name: PodSyntaxTests
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::Test::Pod::Coverage::Configurable
+ name: Test::Pod::Coverage::Configurable
+ version: '0.07'
+ -
+ class: Dist::Zilla::Plugin::Test::PodSpelling
+ config:
+ Dist::Zilla::Plugin::Test::PodSpelling:
+ directories:
+ - bin
+ - lib
+ spell_cmd: 'aspell list'
+ stopwords:
+ - Berners
+ - IDNA
+ - ISBNs
+ - Koster
+ - Martijn
+ - Masinter
+ - OIDs
+ - OpenLDAP
+ - Punycode
+ - TCP
+ - TLS
+ - UDP
+ - UNC
+ - etype
+ - evalue
+ - lowercasing
+ - relativize
+ - uppercasing
+ wordlist: Pod::Wordlist
+ name: Test::PodSpelling
+ version: '2.007005'
+ -
+ class: Dist::Zilla::Plugin::CheckStrictVersion
+ name: CheckStrictVersion
+ version: '0.001'
+ -
+ class: Dist::Zilla::Plugin::Git::Check
+ config:
+ Dist::Zilla::Plugin::Git::Check:
+ untracked_files: die
+ Dist::Zilla::Role::Git::DirtyFiles:
+ allow_dirty: []
+ allow_dirty_match: []
+ changelog: Changes
+ Dist::Zilla::Role::Git::Repo:
+ git_version: 2.14.2
+ repo_root: .
+ name: Git::Check
+ version: '2.043'
+ -
+ class: Dist::Zilla::Plugin::Git::CheckFor::MergeConflicts
+ config:
+ Dist::Zilla::Role::Git::Repo:
+ git_version: 2.14.2
+ repo_root: .
+ name: Git::CheckFor::MergeConflicts
+ version: '0.014'
+ -
+ class: Dist::Zilla::Plugin::Git::CheckFor::CorrectBranch
+ config:
+ Dist::Zilla::Role::Git::Repo:
+ git_version: 2.14.2
+ repo_root: .
+ name: Git::CheckFor::CorrectBranch
+ version: '0.014'
+ -
+ class: Dist::Zilla::Plugin::Git::Remote::Check
+ name: Git::Remote::Check
+ version: 0.1.2
+ -
+ class: Dist::Zilla::Plugin::TestRelease
+ name: TestRelease
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::RunExtraTests
+ config:
+ Dist::Zilla::Role::TestRunner:
+ default_jobs: 1
+ name: RunExtraTests
+ version: '0.029'
+ -
+ class: Dist::Zilla::Plugin::UploadToCPAN
+ name: UploadToCPAN
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::ReadmeAnyFromPod
+ config:
+ Dist::Zilla::Role::FileWatcher:
+ version: '0.006'
+ name: Markdown_Readme
+ version: '0.163250'
+ -
+ class: Dist::Zilla::Plugin::Prereqs
+ config:
+ Dist::Zilla::Plugin::Prereqs:
+ phase: develop
+ type: recommends
+ name: '@Git::VersionManager/pluginbundle version'
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::VersionFromMainModule
+ config:
+ Dist::Zilla::Role::ModuleMetadata:
+ Module::Metadata: '1.000033'
+ version: '0.006'
+ name: '@Git::VersionManager/VersionFromMainModule'
+ version: '0.04'
+ -
+ class: Dist::Zilla::Plugin::MetaProvides::Update
+ name: '@Git::VersionManager/MetaProvides::Update'
+ version: '0.007'
+ -
+ class: Dist::Zilla::Plugin::CopyFilesFromRelease
+ config:
+ Dist::Zilla::Plugin::CopyFilesFromRelease:
+ filename:
+ - Changes
+ match: []
+ name: '@Git::VersionManager/CopyFilesFromRelease'
+ version: '0.007'
+ -
+ class: Dist::Zilla::Plugin::Git::Commit
+ config:
+ Dist::Zilla::Plugin::Git::Commit:
+ add_files_in: []
+ commit_msg: '%N-%v%t%n%n%c'
+ Dist::Zilla::Role::Git::DirtyFiles:
+ allow_dirty:
+ - Changes
+ - LICENSE
+ - README.md
+ allow_dirty_match: []
+ changelog: Changes
+ Dist::Zilla::Role::Git::Repo:
+ git_version: 2.14.2
+ repo_root: .
+ Dist::Zilla::Role::Git::StringFormatter:
+ time_zone: local
+ name: '@Git::VersionManager/release snapshot'
+ version: '2.043'
+ -
+ class: Dist::Zilla::Plugin::Git::Tag
+ config:
+ Dist::Zilla::Plugin::Git::Tag:
+ branch: ~
+ changelog: Changes
+ signed: 0
+ tag: v1.74
+ tag_format: v%v
+ tag_message: v%v
+ Dist::Zilla::Role::Git::Repo:
+ git_version: 2.14.2
+ repo_root: .
+ Dist::Zilla::Role::Git::StringFormatter:
+ time_zone: local
+ name: '@Git::VersionManager/Git::Tag'
+ version: '2.043'
+ -
+ class: Dist::Zilla::Plugin::BumpVersionAfterRelease
+ config:
+ Dist::Zilla::Plugin::BumpVersionAfterRelease:
+ finders:
+ - ':ExecFiles'
+ - ':InstallModules'
+ global: 0
+ munge_makefile_pl: 1
+ name: '@Git::VersionManager/BumpVersionAfterRelease'
+ version: '0.018'
+ -
+ class: Dist::Zilla::Plugin::NextRelease
+ name: '@Git::VersionManager/NextRelease'
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::Git::Commit
+ config:
+ Dist::Zilla::Plugin::Git::Commit:
+ add_files_in: []
+ commit_msg: 'increment $VERSION after %v release'
+ Dist::Zilla::Role::Git::DirtyFiles:
+ allow_dirty:
+ - Build.PL
+ - Changes
+ - Makefile.PL
+ allow_dirty_match:
+ - (?^:^lib/.*\.pm$)
+ changelog: Changes
+ Dist::Zilla::Role::Git::Repo:
+ git_version: 2.14.2
+ repo_root: .
+ Dist::Zilla::Role::Git::StringFormatter:
+ time_zone: local
+ name: '@Git::VersionManager/post-release commit'
+ version: '2.043'
+ -
+ class: Dist::Zilla::Plugin::Git::Push
+ config:
+ Dist::Zilla::Plugin::Git::Push:
+ push_to:
+ - origin
+ remotes_must_exist: 1
+ Dist::Zilla::Role::Git::Repo:
+ git_version: 2.14.2
+ repo_root: .
+ name: Git::Push
+ version: '2.043'
+ -
+ class: Dist::Zilla::Plugin::ConfirmRelease
+ name: ConfirmRelease
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':InstallModules'
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':IncModules'
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':TestFiles'
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':ExtraTestFiles'
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':ExecFiles'
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':PerlExecFiles'
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':ShareFiles'
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':MainModule'
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':AllFiles'
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':NoFiles'
+ version: '6.012'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: MetaProvides::Package/AUTOVIV/:InstallModulesPM
+ version: '6.012'
+ zilla:
+ class: Dist::Zilla::Dist::Builder
+ config:
+ is_trial: '0'
+ version: '6.012'
+x_authority: cpan:LWWWP
+x_contributors:
+ - 'Gisle Aas <gisle@aas.no>'
+ - 'Karen Etheridge <ether@cpan.org>'
+ - 'Chase Whitener <capoeirab@cpan.org>'
+ - 'Ville Skyttä <ville.skytta@iki.fi>'
+ - 'Mark Stosberg <mark@stosberg.com>'
+ - 'Olaf Alders <olaf@wundersolutions.com>'
+ - 'Michael G. Schwern <schwern@pobox.com>'
+ - 'Shoichi Kaji <skaji@cpan.org>'
+ - 'Slaven Rezic <slaven@rezic.de>'
+ - 'Kent Fredric <kentfredric@gmail.com>'
+ - 'Masahiro Honma <hiratara@cpan.org>'
+ - 'Matt Lawrence <matthewlawrence@venda.com>'
+ - 'Peter Rabbitson <ribasushi@cpan.org>'
+ - 'Piotr Roszatycki <piotr.roszatycki@gmail.com>'
+ - 'Salvatore Bonaccorso <carnil@launchpad.net>'
+ - 'Tatsuhiko Miyagawa <miyagawa@bulknews.net>'
+ - 'Torsten Förtsch <torsten.foertsch@gmx.net>'
+ - 'Adam Herzog <adam@adamherzog.com>'
+ - 'gerard <gerard@tty.nl>'
+ - 'Alex Kapranoff <kapranoff@gmail.com>'
+ - 'Brendan Byrd <Perl@ResonatorSoft.org>'
+ - 'David Schmidt <davewood@gmx.at>'
+ - 'Jan Dubois <jand@activestate.com>'
+ - 'John Karr <brainbuz@brainbuz.org>'
+ - 'John Miller <john@rimmkaufman.com>'
+ - 'Kaitlyn Parkhurst <symkat@symkat.com>'
+ - 'Kenichi Ishigaki <ishigaki@cpan.org>'
+x_generated_by_perl: v5.27.11
+x_serialization_backend: 'YAML::Tiny version 1.73'
-require 5.008001;
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.012.
+use strict;
+use warnings;
+
+use 5.008001;
+
use ExtUtils::MakeMaker;
-WriteMakefile(
- 'NAME' => 'URI',
- 'VERSION_FROM' => 'URI.pm',
- 'ABSTRACT' => 'Uniform Resource Identifiers (absolute and relative)',
- 'AUTHOR' => 'Gisle Aas <gisle@activestate.com>',
- 'LICENSE' => 'perl',
- 'MIN_PERL_VERSION' => 5.008001,
- 'PREREQ_PM' => {
- 'MIME::Base64' => 2,
- },
- 'META_MERGE' => {
- 'recommends' => {
- 'Business::ISBN' => 0,
- },
- 'resources' => {
- 'repository' => 'https://github.com/libwww-perl/uri',
- 'MailingList' => 'mailto:libwww@perl.org',
- }
- },
- BUILD_REQUIRES => {
- 'ExtUtils::MakeMaker' => 0,
- 'Test' => 0,
- 'Test::More' => 0,
- },
+my %WriteMakefileArgs = (
+ "ABSTRACT" => "Uniform Resource Identifiers (absolute and relative)",
+ "AUTHOR" => "Gisle Aas <gisle\@activestate.com>",
+ "CONFIGURE_REQUIRES" => {
+ "ExtUtils::MakeMaker" => 0
+ },
+ "DISTNAME" => "URI",
+ "LICENSE" => "perl",
+ "MIN_PERL_VERSION" => "5.008001",
+ "NAME" => "URI",
+ "PREREQ_PM" => {
+ "Carp" => 0,
+ "Cwd" => 0,
+ "Data::Dumper" => 0,
+ "Encode" => 0,
+ "Exporter" => "5.57",
+ "MIME::Base64" => 2,
+ "Net::Domain" => 0,
+ "Scalar::Util" => 0,
+ "constant" => 0,
+ "integer" => 0,
+ "overload" => 0,
+ "parent" => 0,
+ "strict" => 0,
+ "utf8" => 0,
+ "warnings" => 0
+ },
+ "TEST_REQUIRES" => {
+ "ExtUtils::MakeMaker" => 0,
+ "File::Spec" => 0,
+ "File::Spec::Functions" => 0,
+ "File::Temp" => 0,
+ "Test" => 0,
+ "Test::More" => "0.96",
+ "Test::Needs" => 0,
+ "utf8" => 0
+ },
+ "VERSION" => "1.74",
+ "test" => {
+ "TESTS" => "t/*.t"
+ }
);
-BEGIN {
- # compatibility with older versions of MakeMaker
- my $developer = -f ".gitignore";
- my %mm_req = (
- LICENCE => 6.31,
- META_MERGE => 6.45,
- META_ADD => 6.45,
- MIN_PERL_VERSION => 6.48,
- );
- undef(*WriteMakefile);
- *WriteMakefile = sub {
- my %arg = @_;
- for (keys %mm_req) {
- unless (eval { ExtUtils::MakeMaker->VERSION($mm_req{$_}) }) {
- warn "$_ $@" if $developer;
- delete $arg{$_};
- }
- }
- ExtUtils::MakeMaker::WriteMakefile(%arg);
- };
+my %FallbackPrereqs = (
+ "Carp" => 0,
+ "Cwd" => 0,
+ "Data::Dumper" => 0,
+ "Encode" => 0,
+ "Exporter" => "5.57",
+ "ExtUtils::MakeMaker" => 0,
+ "File::Spec" => 0,
+ "File::Spec::Functions" => 0,
+ "File::Temp" => 0,
+ "MIME::Base64" => 2,
+ "Net::Domain" => 0,
+ "Scalar::Util" => 0,
+ "Test" => 0,
+ "Test::More" => "0.96",
+ "Test::Needs" => 0,
+ "constant" => 0,
+ "integer" => 0,
+ "overload" => 0,
+ "parent" => 0,
+ "strict" => 0,
+ "utf8" => 0,
+ "warnings" => 0
+);
+
+
+unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
+ delete $WriteMakefileArgs{TEST_REQUIRES};
+ delete $WriteMakefileArgs{BUILD_REQUIRES};
+ $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
}
+
+delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
+ unless eval { ExtUtils::MakeMaker->VERSION(6.52) };
+
+WriteMakefile(%WriteMakefileArgs);
+++ /dev/null
-This package contains the URI.pm module with friends. The module
-implements the URI class. Objects of this class represent Uniform
-Resource Identifier references as specified in RFC 2396 and updated by
-RFC 2732.
-
-URI objects can be used to access and manipulate the various
-components that make up these strings. There are also methods to
-combine URIs in various ways.
-
-Some tests require an Internet connection to work and are skipped if
-one is not active.
-
-You need perl-5.8.1 or better to install this package. You should also
-have the MIME::Base64 module installed. Installation is otherwise as
-usual:
-
- perl Makefile.PL
- make
- make test
- make install
-
-Questions about how to use this library should be directed to the
-comp.lang.perl.modules USENET Newsgroup. Bug reports and suggestions
-for improvements can be sent to the <libwww@perl.org> mailing list.
-
-Copyright 1998-2009 Gisle Aas.
-Copyright 1998 Graham Barr.
-
-This library is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
+++ /dev/null
-package URI::_foreign;
-
-require URI::_generic;
-@ISA=qw(URI::_generic);
-
-1;
+++ /dev/null
-package URI::https;
-require URI::http;
-@ISA=qw(URI::http);
-
-sub default_port { 443 }
-
-sub secure { 1 }
-
-1;
+++ /dev/null
-package URI::ldaps;
-require URI::ldap;
-@ISA=qw(URI::ldap);
-
-sub default_port { 636 }
-
-sub secure { 1 }
-
-1;
+++ /dev/null
-package URI::mms;
-
-require URI::http;
-@ISA=qw(URI::http);
-
-sub default_port { 1755 }
-
-1;
+++ /dev/null
-package URI::nntp; # draft-gilman-news-url-01
-
-require URI::news;
-@ISA=qw(URI::news);
-
-1;
+++ /dev/null
-package URI::rlogin;
-require URI::_login;
-@ISA = qw(URI::_login);
-
-sub default_port { 513 }
-
-1;
+++ /dev/null
-package URI::rtsp;
-
-require URI::http;
-@ISA=qw(URI::http);
-
-sub default_port { 554 }
-
-1;
+++ /dev/null
-package URI::rtspu;
-
-require URI::rtsp;
-@ISA=qw(URI::rtsp);
-
-sub default_port { 554 }
-
-1;
+++ /dev/null
-package URI::sips;
-require URI::sip;
-@ISA=qw(URI::sip);
-
-sub default_port { 5061 }
-
-sub secure { 1 }
-
-1;
+++ /dev/null
-package URI::telnet;
-require URI::_login;
-@ISA = qw(URI::_login);
-
-sub default_port { 23 }
-
-1;
+++ /dev/null
-package URI::tn3270;
-require URI::_login;
-@ISA = qw(URI::_login);
-
-sub default_port { 23 }
-
-1;
--- /dev/null
+on 'configure' => sub {
+ requires "ExtUtils::MakeMaker" => "0";
+ suggests "JSON::PP" => "2.27300";
+};
+
+on 'develop' => sub {
+ requires "Test::CPAN::Changes" => "0.19";
+ recommends 'Business::ISBN' => 0;
+ recommends "Storable" => "0";
+};
+
+on 'runtime' => sub {
+ requires "Carp" => "0";
+ requires "Cwd" => "0";
+ requires "Data::Dumper" => "0";
+ requires "Encode" => "0";
+ requires "Exporter" => "5.57";
+ requires "MIME::Base64" => "2";
+ requires "Net::Domain" => "0";
+ requires "Scalar::Util" => "0";
+ requires "constant" => "0";
+ requires "integer" => "0";
+ requires "overload" => "0";
+ requires "parent" => "0";
+ requires "perl" => "5.008001";
+ requires "strict" => "0";
+ requires "warnings" => "0";
+ requires "utf8" => '0';
+};
+
+on 'test' => sub {
+ requires "File::Spec::Functions" => "0";
+ requires "File::Temp" => "0";
+ requires "Test" => "0";
+ requires "Test::More" => "0.96";
+ requires "Test::Needs" => '0';
+ requires "utf8" => "0";
+};
--- /dev/null
+name = URI
+author = Gisle Aas <gisle@activestate.com>
+license = Perl_5
+main_module = lib/URI.pm
+copyright_holder = Gisle Aas
+copyright_year = 1998
+
+; for version management, see the end of this file
+
+; Gather stuff in
+[Git::GatherDir]
+exclude_filename = LICENSE
+exclude_filename = README.md
+exclude_filename = draft-duerst-iri-bis.txt
+exclude_filename = rfc2396.txt
+exclude_filename = rfc3986.txt
+exclude_filename = rfc3987.txt
+
+[Encoding]
+encoding = latin1
+filename = t/data.t
+filename = t/escape.t
+filename = t/http.t
+filename = t/old-base.t
+filename = t/pop.t
+filename = t/rtsp.t
+filename = uri-test
+
+; Handle the META resources
+[MetaConfig]
+
+[MetaProvides::Package]
+inherit_version = 0
+inherit_missing = 0
+
+[MetaNoIndex]
+directory = t
+directory = xt
+[MetaYAML]
+[MetaJSON]
+[MetaResources]
+x_IRC = irc://irc.perl.org/#lwp
+x_MailingList = mailto:libwww@perl.org
+
+[Git::Contributors]
+version = 0.029
+order_by = commits
+
+[GithubMeta]
+issues = 1
+user = libwww-perl
+[Authority]
+do_munging = 0
+authority = cpan:LWWWP
+[Manifest]
+[License]
+
+; make the bin dir executables
+[ExecDir]
+; [ShareDir]
+
+[Prereqs::FromCPANfile]
+
+[MakeMaker]
+
+[CheckChangesHasContent]
+; TODO strict and warnings to quiet the kwalitee tests
+; [Test::Kwalitee]
+; filename = xt/author/kwalitee.t
+[MojibakeTests]
+[Test::Version]
+[Test::ReportPrereqs]
+[Test::Compile]
+bail_out_on_fail = 1
+xt_mode = 1
+
+[Test::Portability]
+; TODO perltidy for NoTabs and namespace::autoclean
+; [Test::CleanNamespaces] ; TODO
+; [Test::NoTabs] ; TODO
+; [Test::EOL] ; TODO
+[MetaTests]
+[Test::ChangesHasContent]
+[Test::MinimumVersion]
+[PodSyntaxTests]
+
+[Test::Pod::Coverage::Configurable]
+skip = URI::IRI
+skip = URI::_foreign
+skip = URI::_idna
+skip = URI::_login
+skip = URI::_ldap
+skip = URI::file::QNX
+skip = URI::nntp
+skip = URI::urn::isbn
+skip = URI::urn::oid
+skip = URI::sftp
+trustme = URI => qr/^(?:STORABLE_freeze|STORABLE_thaw|TO_JSON|implementor)$/
+trustme = URI::Escape => qr/^(?:escape_char)$/
+trustme = URI::Heuristic => qr/^(?:MY_COUNTRY|uf_url|uf_urlstr)$/
+trustme = URI::URL => qr/^(?:address|article|crack|dos_path|encoded822addr|eparams|epath|frag)$/
+trustme = URI::URL => qr/^(?:full_path|groupart|keywords|local_path|mac_path|netloc|newlocal|params|path|path_components|print_on|query|strict|unix_path|url|vms_path)$/
+trustme = URI::WithBase => qr/^(?:can|clone|eq|new_abs)$/
+trustme = URI::_punycode => qr/^(?:adapt|code_point|digit_value|min)$/
+trustme = URI::_query => qr/^(?:equery|query|query_form|query_form_hash|query_keywords|query_param|query_param_append|query_param_delete)$/
+trustme = URI::_segment => qr/^(?:new)$/
+trustme = URI::_userpass => qr/^(?:password|user)$/
+trustme = URI::file => qr/^(?:os_class)$/
+trustme = URI::file::Base => qr/^(?:dir|file|new)$/
+trustme = URI::file::FAT => qr/^(?:fix_path)$/
+trustme = URI::file::Mac => qr/^(?:dir|file)$/
+trustme = URI::file::OS2 => qr/^(?:file)$/
+trustme = URI::file::Unix => qr/^(?:file)$/
+trustme = URI::file::Win32 => qr/^(?:file|fix_path)$/
+trustme = URI::ftp => qr/^(?:password|user)$/
+trustme = URI::gopher => qr/^(?:gopher_type|gtype|search|selector|string)$/
+trustme = URI::ldapi => qr/^(?:un_path)$/
+trustme = URI::mailto => qr/^(?:headers|to)$/
+trustme = URI::news => qr/^(?:group|message)$/
+trustme = URI::pop => qr/^(?:auth|user)$/
+trustme = URI::sip => qr/^(?:params|params_form)$/
+trustme = URI::urn => qr/^(?:nid|nss)$/
+
+[Test::PodSpelling]
+wordlist = Pod::Wordlist
+spell_cmd = aspell list
+stopword = Berners
+stopword = ISBNs
+stopword = Masinter
+stopword = OIDs
+stopword = TCP
+stopword = TLS
+stopword = UDP
+stopword = UNC
+stopword = lowercasing
+stopword = relativize
+stopword = uppercasing
+stopword = IDNA
+stopword = OpenLDAP
+stopword = etype
+stopword = evalue
+stopword = Punycode
+stopword = Koster
+stopword = Martijn
+
+
+;;; pre-release actions
+
+[CheckStrictVersion]
+decimal_only = 1
+
+[Git::Check]
+allow_dirty =
+
+[Git::CheckFor::MergeConflicts]
+[Git::CheckFor::CorrectBranch]
+:version = 0.004
+release_branch = master
+
+[Git::Remote::Check]
+branch = master
+remote_branch = master
+
+[TestRelease]
+[RunExtraTests]
+
+;;; release actions
+[UploadToCPAN]
+
+
+;;; post-release actions
+
+[ReadmeAnyFromPod / Markdown_Readme]
+source_filename = lib/URI.pm
+type = markdown
+filename = README.md
+location = root
+phase = release
+
+; the distribution version is read from lib/URI.pm's $VERSION.
+; at release, all matching versions are bumped.
+; To change the release version, update *every* .pm file's
+; $VERSION. You can do this easily with this oneliner (e.g. for 1.70 -> 2.00):
+; perl -p -i -e's/.VERSION = .\K1.70/2.00/;' `find lib -type f`
+; (and don't forget to add $VERSION = eval $VERSION; for underscore releases!)
+[@Git::VersionManager]
+:version = 0.003
+bump_only_matching_versions = 1
+commit_files_after_release = LICENSE
+commit_files_after_release = README.md
+release snapshot.commit_msg = %N-%v%t%n%n%c
+
+[Git::Push]
+
+[ConfirmRelease]
package URI;
use strict;
-use vars qw($VERSION);
-$VERSION = "1.60";
+use warnings;
-use vars qw($ABS_REMOTE_LEADING_DOTS $ABS_ALLOW_RELATIVE_SCHEME $DEFAULT_QUERY_FORM_DELIMITER);
+our $VERSION = '1.74';
+
+our ($ABS_REMOTE_LEADING_DOTS, $ABS_ALLOW_RELATIVE_SCHEME, $DEFAULT_QUERY_FORM_DELIMITER);
my %implements; # mapping from scheme to implementor class
# Some "official" character classes
-use vars qw($reserved $mark $unreserved $uric $scheme_re);
-$reserved = q(;/?:@&=+$,[]);
-$mark = q(-_.!~*'()); #'; emacs
-$unreserved = "A-Za-z0-9\Q$mark\E";
-$uric = quotemeta($reserved) . $unreserved . "%";
+our $reserved = q(;/?:@&=+$,[]);
+our $mark = q(-_.!~*'()); #'; emacs
+our $unreserved = "A-Za-z0-9\Q$mark\E";
+our $uric = quotemeta($reserved) . $unreserved . "%";
-$scheme_re = '[a-zA-Z][a-zA-Z0-9.+\-]*';
+our $scheme_re = '[a-zA-Z][a-zA-Z0-9.+\-]*';
use Carp ();
use URI::Escape ();
return $str;
}
+my %require_attempted;
sub implementor
{
no strict 'refs';
# check we actually have one for the scheme:
unless (@{"${ic}::ISA"}) {
- # Try to load it
- eval "require $ic";
- die $@ if $@ && $@ !~ /Can\'t locate.*in \@INC/;
- return unless @{"${ic}::ISA"};
+ if (not exists $require_attempted{$ic}) {
+ # Try to load it
+ my $_old_error = $@;
+ eval "require $ic";
+ die $@ if $@ && $@ !~ /Can\'t locate.*in \@INC/;
+ $@ = $_old_error;
+ }
+ return undef unless @{"${ic}::ISA"};
}
$ic->_init_implementor($scheme);
bless \$other, ref $self;
}
+sub TO_JSON { ${$_[0]} }
sub _no_scheme_ok { 0 }
my $self = shift;
unless (@_) {
- return unless $$self =~ /^($scheme_re):/o;
+ return undef unless $$self =~ /^($scheme_re):/o;
return $1;
}
sub scheme
{
my $scheme = shift->_scheme(@_);
- return unless defined $scheme;
+ return undef unless defined $scheme;
lc($scheme);
}
+sub has_recognized_scheme {
+ my $self = shift;
+ return ref($self) !~ /^URI::_(?:foreign|generic)\z/;
+}
sub opaque
{
$old_opaque;
}
-*path = \&opaque; # alias
+sub path { goto &opaque } # alias
sub fragment
{
my $self = shift;
unless (@_) {
- return unless $$self =~ /\#(.*)/s;
+ return undef unless $$self =~ /\#(.*)/s;
return $1;
}
=head1 SYNOPSIS
+ use URI;
+
$u1 = URI->new("http://www.perl.com");
$u2 = URI->new("foo", "http");
$u3 = $u2->abs($u1);
The constructor determines the scheme, maps this to an appropriate
URI subclass, constructs a new object of that class and returns it.
+If the scheme isn't one of those that URI recognizes, you still get
+an URI object back that you can access the generic methods on. The
+C<< $uri->has_recognized_scheme >> method can be used to test for
+this.
+
The $scheme argument is only used when $str is a
relative URI. It can be either a simple string that
denotes the scheme, a string containing an absolute URI reference, or
just as it was written in the URI in its original case,
you can use the $uri->_scheme method instead.
+=item $uri->has_recognized_scheme
+
+Returns TRUE if the URI scheme is one that URI recognizes.
+
+It will also be TRUE for relative URLs where a recognized
+scheme was provided to the constructor, even if C<< $uri->scheme >>
+returns C<undef> for these.
+
=item $uri->opaque
=item $uri->opaque( $new_opaque )
The following methods are available to schemes that use the
common/generic syntax for hierarchical namespaces. The descriptions of
-schemes below indicate which these are. Unknown schemes are
+schemes below indicate which these are. Unrecognized schemes are
assumed to support the generic syntax, and therefore the following
methods:
generic and server methods. In addition, they provide methods to
access the userinfo sub-components: $uri->user and $uri->password.
+=item B<sftp>:
+
+C<URI> objects belonging to the sftp scheme support the common,
+generic and server methods. In addition, they provide methods to
+access the userinfo sub-components: $uri->user and $uri->password.
+
=item B<urn>:
The syntax of Uniform Resource Names is specified in RFC 2141. C<URI>
package URI::Escape;
+
use strict;
+use warnings;
=head1 NAME
=cut
-require Exporter;
-our @ISA = qw(Exporter);
+use Exporter 5.57 'import';
our %escapes;
our @EXPORT = qw(uri_escape uri_unescape uri_escape_utf8);
our @EXPORT_OK = qw(%escapes);
sub uri_escape_utf8 {
my $text = shift;
+ return undef unless defined $text;
utf8::encode($text);
return uri_escape($text, @_);
}
$str;
}
+# XXX FIXME escape_char is buggy as it assigns meaning to the string's storage format.
sub escape_char {
- return join '', @URI::Escape::escapes{$_[0] =~ /(\C)/g};
+ # Old versions of utf8::is_utf8() didn't properly handle magical vars (e.g. $1).
+ # The following forces a fetch to occur beforehand.
+ my $dummy = substr($_[0], 0, 0);
+
+ if (utf8::is_utf8($_[0])) {
+ my $s = shift;
+ utf8::encode($s);
+ unshift(@_, $s);
+ }
+
+ return join '', @URI::Escape::escapes{split //, $_[0]};
}
1;
=cut
use strict;
+use warnings;
-use vars qw(@EXPORT_OK $VERSION $MY_COUNTRY %LOCAL_GUESSING $DEBUG);
+use Exporter 5.57 'import';
+our @EXPORT_OK = qw(uf_uri uf_uristr uf_url uf_urlstr);
+our $VERSION = "4.20";
-require Exporter;
-*import = \&Exporter::import;
-@EXPORT_OK = qw(uf_uri uf_uristr uf_url uf_urlstr);
-$VERSION = "4.20";
+our ($MY_COUNTRY, $DEBUG);
sub MY_COUNTRY() {
for ($MY_COUNTRY) {
}
}
-%LOCAL_GUESSING =
+our %LOCAL_GUESSING =
(
'us' => [qw(www.ACME.gov www.ACME.mil)],
'gb' => [qw(www.ACME.co.uk www.ACME.org.uk www.ACME.ac.uk)],
# Experimental
use strict;
+use warnings;
use URI ();
use overload '""' => sub { shift->as_string };
+our $VERSION = '1.74';
+
sub new {
my($class, $uri, $scheme) = @_;
utf8::upgrade($uri);
return $self->{uri}->as_iri;
}
+our $AUTOLOAD;
sub AUTOLOAD
{
- use vars qw($AUTOLOAD);
my $method = substr($AUTOLOAD, rindex($AUTOLOAD, '::')+2);
# We create the function here so that it will not need to be
package URI::QueryParam;
use strict;
+use warnings;
+
+our $VERSION = '1.74';
sub URI::_query::query_param {
my $self = shift;
array references, then the array is dereferenced to get the actual
values.
+Please note that you can supply multiple values to this method, but you cannot
+supply multiple keys.
+
+Do this:
+
+ $uri->query_param( widget_id => 1, 5, 9 );
+
+Do NOT do this:
+
+ $uri->query_param( widget_id => 1, frobnicator_id => 99 );
+
=item $u->query_param_append($key, $value,...)
Adds new parameters with the given
package URI::Split;
use strict;
+use warnings;
-use vars qw(@ISA @EXPORT_OK);
-require Exporter;
-@ISA = qw(Exporter);
-@EXPORT_OK = qw(uri_split uri_join);
+our $VERSION = '1.74';
+
+use Exporter 5.57 'import';
+our @EXPORT_OK = qw(uri_split uri_join);
use URI::Escape ();
package URI::URL;
-require URI::WithBase;
-@ISA=qw(URI::WithBase);
-
use strict;
-use vars qw(@EXPORT $VERSION);
+use warnings;
+
+use parent 'URI::WithBase';
-$VERSION = "5.04";
+our $VERSION = "5.04";
# Provide as much as possible of the old URI::URL interface for backwards
# compatibility...
-require Exporter;
-*import = \&Exporter::import;
-@EXPORT = qw(url);
+use Exporter 5.57 'import';
+our @EXPORT = qw(url);
# Easy to use constructor
sub url ($;$) { URI::URL->new(@_); }
{
my $self = shift;
my @p = $self->path_segments;
- return unless ref($p[-1]);
+ return undef unless ref($p[-1]);
@p = @{$p[-1]};
shift @p;
join(";", @p);
Carp::croak("$mess (you must call equery)");
}
}
- # Now it should be safe to unescape the string without loosing
+ # Now it should be safe to unescape the string without losing
# information
return uri_unescape($old);
}
package URI::WithBase;
use strict;
-use vars qw($AUTOLOAD $VERSION);
+use warnings;
+
use URI;
+use Scalar::Util 'blessed';
-$VERSION = "2.20";
+our $VERSION = "2.20";
use overload '""' => "as_string", fallback => 1;
{
my($class, $uri, $base) = @_;
my $ibase = $base;
- if ($base && ref($base) && UNIVERSAL::isa($base, __PACKAGE__)) {
+ if ($base && blessed($base) && $base->isa(__PACKAGE__)) {
$base = $base->abs;
$ibase = $base->[0];
}
sub eq
{
my($self, $other) = @_;
- $other = $other->[0] if UNIVERSAL::isa($other, __PACKAGE__);
+ $other = $other->[0] if blessed($other) and $other->isa(__PACKAGE__);
$self->[0]->eq($other);
}
+our $AUTOLOAD;
sub AUTOLOAD
{
my $self = shift;
--- /dev/null
+package URI::_foreign;
+
+use strict;
+use warnings;
+
+use parent 'URI::_generic';
+
+our $VERSION = '1.74';
+
+1;
package URI::_generic;
-require URI;
-require URI::_query;
-@ISA=qw(URI URI::_query);
use strict;
+use warnings;
+
+use parent qw(URI URI::_query);
+
use URI::Escape qw(uri_unescape);
use Carp ();
+our $VERSION = '1.74';
+
my $ACHAR = $URI::uric; $ACHAR =~ s,\\[/?],,g;
my $PCHAR = $URI::uric; $PCHAR =~ s,\\[?],,g;
my $abs = $base->clone;
my $query = $self->query;
$abs->query($query) if defined $query;
- $abs->fragment($self->fragment);
+ my $fragment = $self->fragment;
+ $abs->fragment($fragment) if defined $fragment;
return $abs;
}
# based on Python-2.6.4/Lib/encodings/idna.py
use strict;
+use warnings;
+
use URI::_punycode qw(encode_punycode decode_punycode);
use Carp qw(croak);
+our $VERSION = '1.74';
+
BEGIN {
- *URI::_idna::_ENV_::JOIN_LEAKS_UTF8_FLAGS = $] < 5.008_003
+ *URI::_idna::_ENV_::JOIN_LEAKS_UTF8_FLAGS = "$]" < 5.008_003
? sub () { 1 }
: sub () { 0 }
;
package URI::_ldap;
use strict;
+use warnings;
-use vars qw($VERSION);
-$VERSION = "1.12";
+our $VERSION = '1.74';
use URI::Escape qw(uri_unescape);
sub _scope {
my $self = shift;
my $old = _ldap_elem($self,1, @_);
- return unless defined wantarray && defined $old;
+ return undef unless defined wantarray && defined $old;
uri_unescape($old);
}
sub _filter {
my $self = shift;
my $old = _ldap_elem($self,2, @_);
- return unless defined wantarray && defined $old;
+ return undef unless defined wantarray && defined $old;
uri_unescape($old); # || "(objectClass=*)";
}
package URI::_login;
-require URI::_server;
-require URI::_userpass;
-@ISA = qw(URI::_server URI::_userpass);
+use strict;
+use warnings;
+
+use parent qw(URI::_server URI::_userpass);
+
+our $VERSION = '1.74';
# Generic terminal logins. This is used as a base class for 'telnet',
# 'tn3270', and 'rlogin' URL schemes.
package URI::_punycode;
use strict;
-our $VERSION = "0.04";
+use warnings;
-require Exporter;
-our @ISA = qw(Exporter);
+our $VERSION = '1.74';
+
+use Exporter 'import';
our @EXPORT = qw(encode_punycode decode_punycode);
use integer;
1;
__END__
+=encoding utf8
+
=head1 NAME
URI::_punycode - encodes Unicode string in Punycode
=head1 SYNOPSIS
- use URI::_punycode;
- $punycode = encode_punycode($unicode);
- $unicode = decode_punycode($punycode);
+ use strict;
+ use warnings;
+ use utf8;
-=head1 DESCRIPTION
+ use URI::_punycode qw(encode_punycode decode_punycode);
-URI::_punycode is a module to encode / decode Unicode strings into
-Punycode, an efficient encoding of Unicode for use with IDNA.
+ # encode a unicode string
+ my $punycode = encode_punycode('http://☃.net'); # http://.net-xc8g
+ $punycode = encode_punycode('bücher'); # bcher-kva
+ $punycode = encode_punycode('他们为什么不说中文'); # ihqwcrb4cv8a8dqg056pqjye
-This module requires Perl 5.6.0 or over to handle UTF8 flagged Unicode
-strings.
+ # decode a punycode string back into a unicode string
+ my $unicode = decode_punycode('http://.net-xc8g'); # http://☃.net
+ $unicode = decode_punycode('bcher-kva'); # bücher
+ $unicode = decode_punycode('ihqwcrb4cv8a8dqg056pqjye'); # 他们为什么不说中文
-=head1 FUNCTIONS
+=head1 DESCRIPTION
+
+L<URI::_punycode> is a module to encode / decode Unicode strings into
+L<Punycode|https://tools.ietf.org/html/rfc3492>, an efficient
+encoding of Unicode for use with L<IDNA|https://tools.ietf.org/html/rfc5890>.
-This module exports following functions by default.
+=head1 FUNCTIONS
-=over 4
+All functions throw exceptions on failure. You can C<catch> them with
+L<Syntax::Keyword::Try> or L<Try::Tiny>. The following functions are exported
+by default.
-=item encode_punycode
+=head2 encode_punycode
- $punycode = encode_punycode($unicode);
+ my $punycode = encode_punycode('http://☃.net'); # http://.net-xc8g
+ $punycode = encode_punycode('bücher'); # bcher-kva
+ $punycode = encode_punycode('他们为什么不说中文') # ihqwcrb4cv8a8dqg056pqjye
-takes Unicode string (UTF8-flagged variable) and returns Punycode
+Takes a Unicode string (UTF8-flagged variable) and returns a Punycode
encoding for it.
-=item decode_punycode
+=head2 decode_punycode
- $unicode = decode_punycode($punycode)
+ my $unicode = decode_punycode('http://.net-xc8g'); # http://☃.net
+ $unicode = decode_punycode('bcher-kva'); # bücher
+ $unicode = decode_punycode('ihqwcrb4cv8a8dqg056pqjye'); # 他们为什么不说中文
-takes Punycode encoding and returns original Unicode string.
+Takes a Punycode encoding and returns original Unicode string.
-=back
+=head1 AUTHOR
-These functions throw exceptions on failure. You can catch 'em via
-C<eval>.
+Tatsuhiko Miyagawa <F<miyagawa@bulknews.net>> is the author of
+L<IDNA::Punycode> which was the basis for this module.
-=head1 AUTHOR
+=head1 SEE ALSO
+
+L<IDNA::Punycode>, L<RFC 3492|https://tools.ietf.org/html/rfc3492>,
+L<RFC 5891|https://tools.ietf.org/html/rfc5891>
-Tatsuhiko Miyagawa E<lt>miyagawa@bulknews.netE<gt> is the author of
-IDNA::Punycode v0.02 which was the basis for this module.
+=head1 COPYRIGHT AND LICENSE
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
-=head1 SEE ALSO
-
-L<IDNA::Punycode>, RFC 3492
-
=cut
package URI::_query;
use strict;
+use warnings;
+
use URI ();
use URI::Escape qw(uri_unescape);
+our $VERSION = '1.74';
+
sub query
{
my $self = shift;
}
elsif (ref($r) eq "HASH") {
$delim = $_[1];
- @_ = %$r;
+ @_ = map { $_ => $r->{$_} } sort keys %$r;
}
$delim = pop if @_ % 2;
}
# Some URI::URL compatibility stuff
-*equery = \&query;
+sub equery { goto &query }
1;
# a string too.
use strict;
+use warnings;
+
use URI::Escape qw(uri_unescape);
use overload '""' => sub { $_[0]->[0] },
fallback => 1;
+our $VERSION = '1.74';
+
sub new
{
my $class = shift;
package URI::_server;
-require URI::_generic;
-@ISA=qw(URI::_generic);
use strict;
+use warnings;
+
+use parent 'URI::_generic';
+
use URI::Escape qw(uri_unescape);
+our $VERSION = '1.74';
+
sub _uric_escape {
my($class, $str) = @_;
if ($str =~ m,^((?:$URI::scheme_re:)?)//([^/?\#]*)(.*)$,os) {
}
sub _host_escape {
- return unless $_[0] =~ /[^URI::uric]/;
+ return unless $_[0] =~ /[^$URI::uric]/;
eval {
require URI::_idna;
$_[0] = URI::_idna::encode($_[0]);
package URI::_userpass;
use strict;
+use warnings;
+
use URI::Escape qw(uri_unescape);
+our $VERSION = '1.74';
+
sub user
{
my $self = shift;
$self->userinfo("$new$pass");
}
}
- return unless defined $info;
+ return undef unless defined $info;
$info =~ s/:.*//;
uri_unescape($info);
}
$self->userinfo("$user:$new");
}
}
- return unless defined $info;
- return unless $info =~ s/^[^:]*://;
+ return undef unless defined $info;
+ return undef unless $info =~ s/^[^:]*://;
uri_unescape($info);
}
package URI::data; # RFC 2397
-require URI;
-@ISA=qw(URI);
-
use strict;
+use warnings;
+
+use parent 'URI';
+
+our $VERSION = '1.74';
use MIME::Base64 qw(encode_base64 decode_base64);
use URI::Escape qw(uri_unescape);
package URI::file;
use strict;
-use vars qw(@ISA $VERSION $DEFAULT_AUTHORITY %OS_CLASS);
+use warnings;
-require URI::_generic;
-@ISA = qw(URI::_generic);
-$VERSION = "4.21";
+use parent 'URI::_generic';
+our $VERSION = "4.21";
use URI::Escape qw(uri_unescape);
-$DEFAULT_AUTHORITY = "";
+our $DEFAULT_AUTHORITY = "";
# Map from $^O values to implementation classes. The Unix
# class is the default.
-%OS_CLASS = (
+our %OS_CLASS = (
os2 => "OS2",
mac => "Mac",
MacOS => "Mac",
package URI::file::Base;
use strict;
+use warnings;
+
use URI::Escape qw();
+our $VERSION = '1.74';
+
sub new
{
my $class = shift;
return 1 if $host eq "localhost";
eval {
require Net::Domain;
- lc(Net::Domain::hostfqdn()) eq $host ||
- lc(Net::Domain::hostname()) eq $host;
+ lc(Net::Domain::hostfqdn() || '') eq $host ||
+ lc(Net::Domain::hostname() || '') eq $host;
};
}
package URI::file::FAT;
-require URI::file::Win32;
-@ISA=qw(URI::file::Win32);
+use strict;
+use warnings;
+
+use parent 'URI::file::Win32';
+
+our $VERSION = '1.74';
sub fix_path
{
package URI::file::Mac;
-require URI::file::Base;
-@ISA=qw(URI::file::Base);
-
use strict;
-use URI::Escape qw(uri_unescape);
+use warnings;
+use parent 'URI::file::Base';
+
+use URI::Escape qw(uri_unescape);
+our $VERSION = '1.74';
sub _file_extract_path
{
package URI::file::OS2;
-require URI::file::Win32;
-@ISA=qw(URI::file::Win32);
+use strict;
+use warnings;
+
+use parent 'URI::file::Win32';
+
+our $VERSION = '1.74';
# The Win32 version translates k:/foo to file://k:/foo (?!)
# We add an empty host
package URI::file::QNX;
-require URI::file::Unix;
-@ISA=qw(URI::file::Unix);
-
use strict;
+use warnings;
+
+use parent 'URI::file::Unix';
+
+our $VERSION = '1.74';
sub _file_extract_path
{
package URI::file::Unix;
-require URI::file::Base;
-@ISA=qw(URI::file::Base);
-
use strict;
+use warnings;
+
+use parent 'URI::file::Base';
+
use URI::Escape qw(uri_unescape);
+our $VERSION = '1.74';
+
sub _file_extract_path
{
my($class, $path) = @_;
package URI::file::Win32;
-require URI::file::Base;
-@ISA=qw(URI::file::Base);
-
use strict;
+use warnings;
+
+use parent 'URI::file::Base';
+
use URI::Escape qw(uri_unescape);
+our $VERSION = '1.74';
+
sub _file_extract_authority
{
my $class = shift;
package URI::ftp;
-require URI::_server;
-require URI::_userpass;
-@ISA=qw(URI::_server URI::_userpass);
-
use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent qw(URI::_server URI::_userpass);
sub default_port { 21 }
package URI::gopher; # <draft-murali-url-gopher>, Dec 4, 1996
-require URI::_server;
-@ISA=qw(URI::_server);
-
use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::_server';
+
use URI::Escape qw(uri_unescape);
# A Gopher URL follows the common internet scheme syntax as defined in
$gtype;
}
-*gtype = \&gopher_type; # URI::URL compatibility
+sub gtype { goto &gopher_type } # URI::URL compatibility
sub selector { shift->_gfield(0, @_) }
sub search { shift->_gfield(1, @_) }
package URI::http;
-require URI::_server;
-@ISA=qw(URI::_server);
-
use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::_server';
sub default_port { 80 }
--- /dev/null
+package URI::https;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::http';
+
+sub default_port { 443 }
+
+sub secure { 1 }
+
+1;
package URI::ldap;
use strict;
+use warnings;
-use vars qw(@ISA $VERSION);
-$VERSION = "1.12";
+our $VERSION = '1.74';
-require URI::_server;
-require URI::_ldap;
-@ISA=qw(URI::_ldap URI::_server);
+use parent qw(URI::_ldap URI::_server);
sub default_port { 389 }
package URI::ldapi;
use strict;
+use warnings;
-use vars qw(@ISA);
+our $VERSION = '1.74';
-require URI::_generic;
-require URI::_ldap;
-@ISA=qw(URI::_ldap URI::_generic);
+use parent qw(URI::_ldap URI::_generic);
require URI::Escape;
--- /dev/null
+package URI::ldaps;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::ldap';
+
+sub default_port { 636 }
+
+sub secure { 1 }
+
+1;
package URI::mailto; # RFC 2368
-require URI;
-require URI::_query;
-@ISA=qw(URI URI::_query);
-
use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent qw(URI URI::_query);
sub to
{
--- /dev/null
+package URI::mms;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::http';
+
+sub default_port { 1755 }
+
+1;
package URI::news; # draft-gilman-news-url-01
-require URI::_server;
-@ISA=qw(URI::_server);
-
use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::_server';
+
use URI::Escape qw(uri_unescape);
use Carp ();
Carp::croak("Message must contain '\@'") unless $_[0] =~ /\@/;
}
my $old = $self->_group(@_);
- return unless $old =~ /\@/;
+ return undef unless $old =~ /\@/;
return $old;
}
--- /dev/null
+package URI::nntp; # draft-gilman-news-url-01
+
+use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::news';
+
+1;
package URI::pop; # RFC 2384
-require URI::_server;
-@ISA=qw(URI::_server);
-
use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::_server';
+
use URI::Escape qw(uri_unescape);
sub default_port { 110 }
}
}
- return unless defined $old;
+ return undef unless defined $old;
$old =~ s/;.*//;
return uri_unescape($old);
}
}
- return unless defined $old;
+ return undef unless defined $old;
$old =~ s/^[^;]*//;
return uri_unescape($1) if $old =~ /;auth=(.*)/i;
return;
--- /dev/null
+package URI::rlogin;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::_login';
+
+sub default_port { 513 }
+
+1;
# rsync://[USER@]HOST[:PORT]/SRC
-require URI::_server;
-require URI::_userpass;
+use strict;
+use warnings;
-@ISA=qw(URI::_server URI::_userpass);
+our $VERSION = '1.74';
+
+use parent qw(URI::_server URI::_userpass);
sub default_port { 873 }
--- /dev/null
+package URI::rtsp;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::http';
+
+sub default_port { 554 }
+
+1;
--- /dev/null
+package URI::rtspu;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::rtsp';
+
+sub default_port { 554 }
+
+1;
--- /dev/null
+package URI::sftp;
+
+use strict;
+use warnings;
+
+use parent 'URI::ssh';
+
+our $VERSION = '1.74';
+
+1;
package URI::sip;
-require URI::_server;
-require URI::_userpass;
-@ISA=qw(URI::_server URI::_userpass);
-
use strict;
-use vars qw(@ISA $VERSION);
+use warnings;
+
+use parent qw(URI::_server URI::_userpass);
+
use URI::Escape qw(uri_unescape);
-$VERSION = "0.11";
+our $VERSION = '1.74';
sub default_port { 5060 }
--- /dev/null
+package URI::sips;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::sip';
+
+sub default_port { 5061 }
+
+sub secure { 1 }
+
+1;
package URI::snews; # draft-gilman-news-url-01
-require URI::news;
-@ISA=qw(URI::news);
+use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::news';
sub default_port { 563 }
package URI::ssh;
-require URI::_login;
-@ISA=qw(URI::_login);
+
+use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::_login';
# ssh://[USER@]HOST[:PORT]/SRC
--- /dev/null
+package URI::telnet;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::_login';
+
+sub default_port { 23 }
+
+1;
--- /dev/null
+package URI::tn3270;
+
+use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::_login';
+
+sub default_port { 23 }
+
+1;
package URI::urn; # RFC 2141
-require URI;
-@ISA=qw(URI);
-
use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI';
+
use Carp qw(carp);
-use vars qw(%implementor);
+my %implementor;
+my %require_attempted;
sub _init {
my $class = shift;
$impclass = "URI::urn::$id";
no strict 'refs';
unless (@{"${impclass}::ISA"}) {
- # Try to load it
- eval "require $impclass";
- die $@ if $@ && $@ !~ /Can\'t locate.*in \@INC/;
+ if (not exists $require_attempted{$impclass}) {
+ # Try to load it
+ my $_old_error = $@;
+ eval "require $impclass";
+ die $@ if $@ && $@ !~ /Can\'t locate.*in \@INC/;
+ $@ = $_old_error;
+ }
$impclass = "URI::urn" unless @{"${impclass}::ISA"};
}
}
package URI::urn::isbn; # RFC 3187
-require URI::urn;
-@ISA=qw(URI::urn);
-
use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::urn';
+
use Carp qw(carp);
BEGIN {
package URI::urn::oid; # RFC 2061
-require URI::urn;
-@ISA=qw(URI::urn);
-
use strict;
+use warnings;
+
+our $VERSION = '1.74';
+
+use parent 'URI::urn';
sub oid {
my $self = shift;
--- /dev/null
+do { my $x = {
+ 'configure' => {
+ 'requires' => {
+ 'ExtUtils::MakeMaker' => '0'
+ },
+ 'suggests' => {
+ 'JSON::PP' => '2.27300'
+ }
+ },
+ 'develop' => {
+ 'recommends' => {
+ 'Business::ISBN' => '0',
+ 'Dist::Zilla::PluginBundle::Git::VersionManager' => '0.007',
+ 'Storable' => '0'
+ },
+ 'requires' => {
+ 'File::Spec' => '0',
+ 'IO::Handle' => '0',
+ 'IPC::Open3' => '0',
+ 'Pod::Coverage::TrustPod' => '0',
+ 'Test::CPAN::Changes' => '0.19',
+ 'Test::CPAN::Meta' => '0',
+ 'Test::MinimumVersion' => '0',
+ 'Test::Mojibake' => '0',
+ 'Test::More' => '0.94',
+ 'Test::Pod' => '1.41',
+ 'Test::Pod::Coverage' => '1.08',
+ 'Test::Portability::Files' => '0',
+ 'Test::Spelling' => '0.12',
+ 'Test::Version' => '1'
+ }
+ },
+ 'runtime' => {
+ 'requires' => {
+ 'Carp' => '0',
+ 'Cwd' => '0',
+ 'Data::Dumper' => '0',
+ 'Encode' => '0',
+ 'Exporter' => '5.57',
+ 'MIME::Base64' => '2',
+ 'Net::Domain' => '0',
+ 'Scalar::Util' => '0',
+ 'constant' => '0',
+ 'integer' => '0',
+ 'overload' => '0',
+ 'parent' => '0',
+ 'perl' => '5.008001',
+ 'strict' => '0',
+ 'utf8' => '0',
+ 'warnings' => '0'
+ }
+ },
+ 'test' => {
+ 'recommends' => {
+ 'CPAN::Meta' => '2.120900'
+ },
+ 'requires' => {
+ 'ExtUtils::MakeMaker' => '0',
+ 'File::Spec' => '0',
+ 'File::Spec::Functions' => '0',
+ 'File::Temp' => '0',
+ 'Test' => '0',
+ 'Test::More' => '0.96',
+ 'Test::Needs' => '0',
+ 'utf8' => '0'
+ }
+ }
+ };
+ $x;
+ }
\ No newline at end of file
--- /dev/null
+#!perl
+
+use strict;
+use warnings;
+
+# This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.027
+
+use Test::More tests => 1;
+
+use ExtUtils::MakeMaker;
+use File::Spec;
+
+# from $version::LAX
+my $lax_version_re =
+ qr/(?: undef | (?: (?:[0-9]+) (?: \. | (?:\.[0-9]+) (?:_[0-9]+)? )?
+ |
+ (?:\.[0-9]+) (?:_[0-9]+)?
+ ) | (?:
+ v (?:[0-9]+) (?: (?:\.[0-9]+)+ (?:_[0-9]+)? )?
+ |
+ (?:[0-9]+)? (?:\.[0-9]+){2,} (?:_[0-9]+)?
+ )
+ )/x;
+
+# hide optional CPAN::Meta modules from prereq scanner
+# and check if they are available
+my $cpan_meta = "CPAN::Meta";
+my $cpan_meta_pre = "CPAN::Meta::Prereqs";
+my $HAS_CPAN_META = eval "require $cpan_meta; $cpan_meta->VERSION('2.120900')" && eval "require $cpan_meta_pre"; ## no critic
+
+# Verify requirements?
+my $DO_VERIFY_PREREQS = 1;
+
+sub _max {
+ my $max = shift;
+ $max = ( $_ > $max ) ? $_ : $max for @_;
+ return $max;
+}
+
+sub _merge_prereqs {
+ my ($collector, $prereqs) = @_;
+
+ # CPAN::Meta::Prereqs object
+ if (ref $collector eq $cpan_meta_pre) {
+ return $collector->with_merged_prereqs(
+ CPAN::Meta::Prereqs->new( $prereqs )
+ );
+ }
+
+ # Raw hashrefs
+ for my $phase ( keys %$prereqs ) {
+ for my $type ( keys %{ $prereqs->{$phase} } ) {
+ for my $module ( keys %{ $prereqs->{$phase}{$type} } ) {
+ $collector->{$phase}{$type}{$module} = $prereqs->{$phase}{$type}{$module};
+ }
+ }
+ }
+
+ return $collector;
+}
+
+my @include = qw(
+
+);
+
+my @exclude = qw(
+
+);
+
+# Add static prereqs to the included modules list
+my $static_prereqs = do './t/00-report-prereqs.dd';
+
+# Merge all prereqs (either with ::Prereqs or a hashref)
+my $full_prereqs = _merge_prereqs(
+ ( $HAS_CPAN_META ? $cpan_meta_pre->new : {} ),
+ $static_prereqs
+);
+
+# Add dynamic prereqs to the included modules list (if we can)
+my ($source) = grep { -f } 'MYMETA.json', 'MYMETA.yml';
+my $cpan_meta_error;
+if ( $source && $HAS_CPAN_META
+ && (my $meta = eval { CPAN::Meta->load_file($source) } )
+) {
+ $full_prereqs = _merge_prereqs($full_prereqs, $meta->prereqs);
+}
+else {
+ $cpan_meta_error = $@; # capture error from CPAN::Meta->load_file($source)
+ $source = 'static metadata';
+}
+
+my @full_reports;
+my @dep_errors;
+my $req_hash = $HAS_CPAN_META ? $full_prereqs->as_string_hash : $full_prereqs;
+
+# Add static includes into a fake section
+for my $mod (@include) {
+ $req_hash->{other}{modules}{$mod} = 0;
+}
+
+for my $phase ( qw(configure build test runtime develop other) ) {
+ next unless $req_hash->{$phase};
+ next if ($phase eq 'develop' and not $ENV{AUTHOR_TESTING});
+
+ for my $type ( qw(requires recommends suggests conflicts modules) ) {
+ next unless $req_hash->{$phase}{$type};
+
+ my $title = ucfirst($phase).' '.ucfirst($type);
+ my @reports = [qw/Module Want Have/];
+
+ for my $mod ( sort keys %{ $req_hash->{$phase}{$type} } ) {
+ next if $mod eq 'perl';
+ next if grep { $_ eq $mod } @exclude;
+
+ my $file = $mod;
+ $file =~ s{::}{/}g;
+ $file .= ".pm";
+ my ($prefix) = grep { -e File::Spec->catfile($_, $file) } @INC;
+
+ my $want = $req_hash->{$phase}{$type}{$mod};
+ $want = "undef" unless defined $want;
+ $want = "any" if !$want && $want == 0;
+
+ my $req_string = $want eq 'any' ? 'any version required' : "version '$want' required";
+
+ if ($prefix) {
+ my $have = MM->parse_version( File::Spec->catfile($prefix, $file) );
+ $have = "undef" unless defined $have;
+ push @reports, [$mod, $want, $have];
+
+ if ( $DO_VERIFY_PREREQS && $HAS_CPAN_META && $type eq 'requires' ) {
+ if ( $have !~ /\A$lax_version_re\z/ ) {
+ push @dep_errors, "$mod version '$have' cannot be parsed ($req_string)";
+ }
+ elsif ( ! $full_prereqs->requirements_for( $phase, $type )->accepts_module( $mod => $have ) ) {
+ push @dep_errors, "$mod version '$have' is not in required range '$want'";
+ }
+ }
+ }
+ else {
+ push @reports, [$mod, $want, "missing"];
+
+ if ( $DO_VERIFY_PREREQS && $type eq 'requires' ) {
+ push @dep_errors, "$mod is not installed ($req_string)";
+ }
+ }
+ }
+
+ if ( @reports ) {
+ push @full_reports, "=== $title ===\n\n";
+
+ my $ml = _max( map { length $_->[0] } @reports );
+ my $wl = _max( map { length $_->[1] } @reports );
+ my $hl = _max( map { length $_->[2] } @reports );
+
+ if ($type eq 'modules') {
+ splice @reports, 1, 0, ["-" x $ml, "", "-" x $hl];
+ push @full_reports, map { sprintf(" %*s %*s\n", -$ml, $_->[0], $hl, $_->[2]) } @reports;
+ }
+ else {
+ splice @reports, 1, 0, ["-" x $ml, "-" x $wl, "-" x $hl];
+ push @full_reports, map { sprintf(" %*s %*s %*s\n", -$ml, $_->[0], $wl, $_->[1], $hl, $_->[2]) } @reports;
+ }
+
+ push @full_reports, "\n";
+ }
+ }
+}
+
+if ( @full_reports ) {
+ diag "\nVersions for all modules listed in $source (including optional ones):\n\n", @full_reports;
+}
+
+if ( $cpan_meta_error || @dep_errors ) {
+ diag "\n*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ***\n";
+}
+
+if ( $cpan_meta_error ) {
+ my ($orig_source) = grep { -f } 'MYMETA.json', 'MYMETA.yml';
+ diag "\nCPAN::Meta->load_file('$orig_source') failed with: $cpan_meta_error\n";
+}
+
+if ( @dep_errors ) {
+ diag join("\n",
+ "\nThe following REQUIRED prerequisites were not satisfied:\n",
+ @dep_errors,
+ "\n"
+ );
+}
+
+pass;
+
+# vim: ts=4 sts=4 sw=4 et:
-#!perl -w
+use strict;
+use warnings;
print "1..45\n";
# in the "Uniform Resource Identifiers (URI): Generic Syntax" document.
use URI;
-$base = "http://a/b/c/d;p?q";
-$testno = 1;
+my $base = "http://a/b/c/d;p?q";
+my $testno = 1;
+my @rel_fail;
while (<DATA>) {
#next if 1 .. /^C\.\s+/;
http: = http:
-==========================================================================
+--------------------------------------------------------------------------
Some extra tests for good measure...
-#!perl -w
+use strict;
+use warnings;
print "1..2\n";
-use strict;
use URI::URL;
my $b = URI::URL->new("http://www/");
-#!perl -Tw
+#!perl -T
-use Test;
+use strict;
+use warnings;
+
+use Test::More;
plan tests => 1;
$ENV{PATH} = "/bin:/usr/bin";
my $cwd = eval { URI::file->cwd };
-ok($@, '');
+is($@, '', 'no exceptions');
-#!perl -w
-
-eval {
- require MIME::Base64;
-};
-if ($@) {
- print "1..0\n";
- print $@;
- exit;
-}
+use strict;
+use warnings;
print "1..22\n";
use URI;
-$u = URI->new("data:,A%20brief%20note");
+my $u = URI->new("data:,A%20brief%20note");
print "not " unless $u->scheme eq "data" && $u->opaque eq ",A%20brief%20note";
print "ok 1\n";
$u->data eq "A brief note";
print "ok 2\n";
-$old = $u->data("Får-i-kål er tingen!");
+my $old = $u->data("Får-i-kål er tingen!");
print "not " unless $old eq "A brief note" && $u eq "data:,F%E5r-i-k%E5l%20er%20tingen!";
print "ok 3\n";
--- /dev/null
+use strict;
+use warnings;
+
+# see https://rt.cpan.org/Ticket/Display.html?id=96941
+
+use Test::More;
+use URI;
+
+TODO: {
+ my $str = "http://foo/\xE9";
+ utf8::upgrade($str);
+ my $uri = URI->new($str);
+
+ local $TODO = 'URI::Escape::escape_char misunderstands utf8';
+
+ # http://foo/%C3%A9
+ is("$uri", 'http://foo/%E9', 'correctly created a URI from a utf8-upgraded string');
+}
+
+{
+ my $str = "http://foo/\xE9";
+ utf8::downgrade($str);
+ my $uri = URI->new($str);
+
+ # http://foo/%E9
+ is("$uri", 'http://foo/%E9', 'correctly created a URI from a utf8-downgrade string');
+}
+
+done_testing;
-#!perl -w
-
use strict;
use warnings;
skip "Perl 5.8.0 or higher required", 3 if $] < 5.008;
ok !eval { print uri_escape("abc" . chr(300)); 1 };
-like $@, qr/^Can\'t escape \\x{012C}, try uri_escape_utf8\(\) instead/;
+like $@, qr/^Can\'t escape \\x\{012C\}, try uri_escape_utf8\(\) instead/;
is uri_escape_utf8(chr(0xFFF)), "%E0%BF%BF";
-#!perl -Tw
+#!perl -T
+
+use strict;
+use warnings;
use URI::file;
-@tests = (
+my @tests = (
[ "file", "unix", "win32", "mac" ],
#---------------- ------------ --------------- --------------
[ "file://localhost/foo/bar",
[ "../%2E%2E", "!../..", "!..\\..", "::.."],
);
-@os = @{shift @tests};
+my @os = @{shift @tests};
shift @os; # file
my $num = @tests;
print "1..$num\n";
-$testno = 1;
+my $testno = 1;
-for $t (@tests) {
+for my $t (@tests) {
my @t = @$t;
my $file = shift @t;
my $err;
my $u = URI->new($file, "file");
my $i = 0;
- for $os (@os) {
+ for my $os (@os) {
my $f = $u->file($os);
my $expect = $t[$i];
$f = "<undef>" unless defined $f;
$err++;
}
if (defined($t[$i]) && !$loose) {
- $u2 = URI::file->new($t[$i], $os);
+ my $u2 = URI::file->new($t[$i], $os);
unless ($u2->as_string eq $file) {
print "URI::file->new('$t[$i]', '$os') ne $file, but $u2\n";
$err++;
-#!perl -w
+use strict;
+use warnings;
print "1..13\n";
-use strict;
use URI;
my $uri;
-#!perl -w
+use strict;
+use warnings;
print "1..48\n";
use URI;
-$foo = URI->new("Foo:opaque#frag");
+my $foo = URI->new("Foo:opaque#frag");
print "not " unless ref($foo) eq "URI::_foreign";
print "ok 1\n";
print "ok 3\n";
# Try accessors
-print "not " unless $foo->_scheme eq "Foo" && $foo->scheme eq "foo";
+print "not " unless $foo->_scheme eq "Foo" && $foo->scheme eq "foo" && !$foo->has_recognized_scheme;
print "ok 4\n";
print "not " unless $foo->opaque eq "opaque";
print "ok 7\n";
# Try modificators
-$old = $foo->scheme("bar");
+my $old = $foo->scheme("bar");
print "not " unless $old eq "foo" && $foo eq "bar:opaque#frag";
print "ok 8\n";
$foo = URI->new("", "http:");
$foo->query("query");
$foo->authority("auth");
-print "not " unless $foo eq "//auth?query";
+print "not " unless $foo eq "//auth?query" && $foo->has_recognized_scheme;
print "ok 42\n";
$foo->path("path");
$foo = URI->new("");
$old = $foo->path("foo");
-print "not " unless $old eq "" && $foo eq "foo";
+print "not " unless $old eq "" && $foo eq "foo" && !$foo->has_recognized_scheme;
print "ok 44\n";
$old = $foo->path("bar");
-#!perl -w
use strict;
+use warnings;
print "1..48\n";
-#!perl -w
+use strict;
+use warnings;
BEGIN {
# mock up a gethostbyname that always works :-)
-#!perl -w
+use strict;
+use warnings;
-print "1..15\n";
+print "1..16\n";
use URI;
-$u = URI->new("<http://www.perl.com/path?q=fôo>");
+my $u = URI->new("<http://www.perl.com/path?q=fôo>");
#print "$u\n";
print "not " unless $u eq "http://www.perl.com/path?q=f%F4o";
print "ok 2\n";
# play with port
-$old = $u->port(8080);
+my $old = $u->port(8080);
print "not " unless $old == 80 && $u eq "http://www.perl.com:8080/path?q=f%F4o";
print "ok 3\n";
print "not " unless $u eq "http://www.perl.com/path?q=f%F4o";
print "ok 6\n";
-@q = $u->query_form;
+my @q = $u->query_form;
print "not " unless @q == 2 && "@q" eq "q fôo";
print "ok 7\n";
print "not " unless $u->canonical eq "http://www.perl.com/pub/a/2001/08/27/bjornstad.html";
print "ok 15\n";
+print "not " unless $u->has_recognized_scheme;
+print "ok 16\n";
-#!perl -w
-
use strict;
+use warnings;
+
use utf8;
use Test::More tests => 7;
use URI::_idna;
-#!perl -w
+use strict;
+use warnings;
use utf8;
-use strict;
use Test::More;
use Config;
my $u;
-binmode Test::More->builder->output, ":utf8";
-binmode Test::More->builder->failure_output, ":utf8";
+binmode Test::More->builder->output, ':encoding(UTF-8)';
+binmode Test::More->builder->failure_output, ':encoding(UTF-8)';
$u = URI->new("http://Bücher.ch");
is $u, "http://xn--bcher-kva.ch";
-#!perl -w
+use strict;
+use warnings;
print "1..24\n";
-use strict;
use URI;
my $uri;
-#!perl -w
+use strict;
+use warnings;
print "1..7\n";
use URI;
-$u = URI->new('mailto:gisle@aas.no');
+my $u = URI->new('mailto:gisle@aas.no');
print "not " unless $u->to eq 'gisle@aas.no' &&
$u eq 'mailto:gisle@aas.no';
print "ok 1\n";
-$old = $u->to('larry@wall.org');
+my $old = $u->to('larry@wall.org');
print "not " unless $old eq 'gisle@aas.no' &&
$u->to eq 'larry@wall.org' &&
$u eq 'mailto:larry@wall.org';
$u eq 'mailto:%3F/%23';
print "ok 3\n";
-@h = $u->headers;
+my @h = $u->headers;
print "not " unless @h == 2 && "@h" eq "to ?/#";
print "ok 4\n";
-#!perl -w
+use strict;
+use warnings;
print "1..6\n";
use URI::WithBase;
use URI::URL;
-$str = "http://www.sn.no/";
-$rel = "path/img.gif";
+my $str = "http://www.sn.no/";
+my $rel = "path/img.gif";
-$u = URI->new($str);
-$uw = URI::WithBase->new($str, "http:");
-$uu = URI::URL->new($str);
+my $u = URI->new($str);
+my $uw = URI::WithBase->new($str, "http:");
+my $uu = URI::URL->new($str);
+
+my $a = URI->new($rel, $u);
+my $b = URI->new($rel, $uw);
+my $c = URI->new($rel, $uu);
+my $d = URI->new($rel, $str);
sub Dump
{
print Data::Dumper->Dump([$a, $b, $c, $d], [qw(a b c d)]);
}
-$a = URI->new($rel, $u);
-$b = URI->new($rel, $uw);
-$c = URI->new($rel, $uu);
-$d = URI->new($rel, $str);
-
#Dump();
print "not " unless $a->isa("URI") &&
ref($b) eq ref($uw) &&
-#!perl -w
+use strict;
+use warnings;
print "1..8\n";
use URI;
-$u = URI->new("<mms://66.250.188.13/KFOG_FM>");
+my $u = URI->new("<mms://66.250.188.13/KFOG_FM>");
#print "$u\n";
print "not " unless $u eq "mms://66.250.188.13/KFOG_FM";
print "ok 2\n";
# play with port
-$old = $u->port(8755);
+my $old = $u->port(8755);
print "not " unless $old == 1755 && $u eq "mms://66.250.188.13:8755/KFOG_FM";
print "ok 3\n";
-#!perl -w
+use strict;
+use warnings;
print "1..7\n";
use URI;
-$u = URI->new("news:comp.lang.perl.misc");
+my $u = URI->new("news:comp.lang.perl.misc");
print "not " unless $u->group eq "comp.lang.perl.misc" &&
!defined($u->message) &&
print "not " unless $u eq "news://news.online.no/no.perl/1-10";
print "ok 3\n";
-@g = $u->group;
+my @g = $u->group;
#print "G: @g\n";
print "not " unless @g == 3 && "@g" eq "no.perl 1 10";
print "ok 4\n";
-#!/usr/bin/perl -w
-
-# Test URI's overloading of numeric comparision for checking object
+# Test URI's overloading of numeric comparison for checking object
# equality
use strict;
+use warnings;
use Test::More 'no_plan';
use URI;
-#!perl -w
+use strict;
+use warnings;
print "1..6\n";
$URI::URL::ABS_REMOTE_LEADING_DOTS = 1;
$URI::URL::ABS_ALLOW_RELATIVE_SCHEME = 1;
-$u1 = url("../../../../abc", "http://web/a/b");
+my $u1 = url("../../../../abc", "http://web/a/b");
print "not " unless $u1->abs->as_string eq "http://web/abc";
print "ok 1\n";
-#!/local/bin/perl -w
+use strict;
+use warnings;
+use Test::More 0.96;
use URI::URL qw(url);
use URI::Escape qw(uri_escape uri_unescape);
+use File::Temp 'tempdir';
-# want compatiblity
+# want compatibility
use URI::file;
$URI::file::DEFAULT_AUTHORITY = undef;
-# _expect()
-#
-# Handy low-level object method tester which we insert as a method
-# in the URI::URL class
-#
-sub URI::URL::_expect {
- my($self, $method, $expect, @args) = @_;
- my $result = $self->$method(@args);
- $expect = 'UNDEF' unless defined $expect;
- $result = 'UNDEF' unless defined $result;
- return 1 if $expect eq $result;
- warn "'$self'->$method(@args) = '$result' " .
- "(expected '$expect')\n";
- $self->print_on('STDERR');
- die "Test Failed";
-}
package main;
# Must ensure that there is no relative paths in @INC because we will
# chdir in the newlocal tests.
unless ($^O eq "MacOS") {
-chomp($pwd = ($^O =~ /mswin32/i ? `cd` : $^O eq 'VMS' ? `show default` : `pwd`));
+chomp(my $pwd = ($^O =~ /mswin32/i ? `cd` : $^O eq 'VMS' ? `show default` : `pwd`));
if ($^O eq 'VMS') {
$pwd =~ s#^\s+##;
$pwd = VMS::Filespec::unixpath($pwd);
$x = VMS::Filespec::unixpath($x) if $^O eq 'VMS';
next if $x =~ m|^/| or $^O =~ /os2|mswin32/i
and $x =~ m#^(\w:[\\/]|[\\/]{2})#;
- print "Turn lib path $x into $pwd/$x\n";
+ note "Turn lib path $x into $pwd/$x\n";
$_ = "$pwd/$x";
}
$| = 1;
-print "1..8\n"; # for Test::Harness
-
# Do basic tests first.
-# Dies if an error has been detected, prints "ok" otherwise.
-print "Self tests for URI::URL version $URI::URL::VERSION...\n";
+note "Self tests for URI::URL version $URI::URL::VERSION...\n";
-eval { scheme_parse_test(); };
-print "not " if $@;
-print "ok 1\n";
+subtest 'scheme tests' => \&scheme_parse_test;
-eval { parts_test(); };
-print "not " if $@;
-print "ok 2\n";
+subtest 'parts test' => \&parts_test;
-eval { escape_test(); };
-print "not " if $@;
-print "ok 3\n";
+subtest 'escape test' => \&escape_test;
-eval { newlocal_test(); };
-print "not " if $@;
-print "ok 4\n";
+subtest 'newlocal test' => \&newlocal_test;
-eval { absolute_test(); };
-print "not " if $@;
-print "ok 5\n";
+subtest 'Test relative/absolute URI::URL parsing' => \&absolute_test;
-eval { eq_test(); };
-print "not " if $@;
-print "ok 6\n";
+subtest 'eq test' => \&eq_test;
# Let's test making our own things
URI::URL::strict(0);
# This should work after URI::URL::strict(0)
-$url = new URI::URL "x-myscheme:something";
+my $url = new URI::URL "x-myscheme:something";
# Since no implementor is registered for 'x-myscheme' then it will
# be handled by the URI::URL::_generic class
-$url->_expect('as_string' => 'x-myscheme:something');
-$url->_expect('path' => 'something');
+is($url->as_string, 'x-myscheme:something', ref($url) . '->as_string');
+is($url->path, 'something', ref($url) . '->path');
URI::URL::strict(1);
=comment
# Now we are ready to try our new URL scheme
$url = new URI::URL 'x-a+b.c://foo/bar;a?b';
-$url->_expect('as_string', 'x-a+b.c://foo/bar;a?b');
-$url->_expect('path', '/bar;a?b');
+is($url->as_string, 'x-a+b.c://foo/bar;a?b', ref($url) . '->as_string');
+is($url->path, '/bar;a?b', ref($url) . '->path');
$url->foo;
$newurl = new URI::URL 'xxx', $url;
$newurl->foo;
=cut
-print "ok 7\n";
-
# Test the new wash&go constructor
-print "not " if url("../foo.html", "http://www.sn.no/a/b")->abs->as_string
- ne 'http://www.sn.no/foo.html';
-print "ok 8\n";
+is(url("../foo.html", "http://www.sn.no/a/b")->abs->as_string,
+ 'http://www.sn.no/foo.html', 'wash&go');
-print "URI::URL version $URI::URL::VERSION ok\n";
+note "URI::URL version $URI::URL::VERSION ok\n";
+done_testing;
exit 0;
sub scheme_parse_test {
- print "scheme_parse_test:\n";
-
- $tests = {
+ my $tests = {
'hTTp://web1.net/a/b/c/welcome#intro'
=> { 'scheme'=>'http', 'host'=>'web1.net', 'port'=>80,
'path'=>'/a/b/c/welcome', 'frag'=>'intro','query'=>undef,
# 'password'=>'pswd' },
};
- foreach $url_str (sort keys %$tests ){
- print "Testing '$url_str'\n";
+ foreach my $url_str (sort keys %$tests ){
+ note "Testing '$url_str'\n";
my $url = new URI::URL $url_str;
my $tests = $tests->{$url_str};
- while( ($method, $exp) = each %$tests ){
- $exp = 'UNDEF' unless defined $exp;
- $url->_expect($method, $exp);
+ while( my ($method, $exp) = each %$tests ){
+ is($url->$method, $exp, ref($url) . "->$method");
}
}
}
# Test individual component part access functions
#
sub parts_test {
- print "parts_test:\n";
# test storage part access/edit methods (netloc, user, password,
# host and port are tested by &netloc_test)
$url->path('1info');
$url->query('key words');
$url->frag('this');
- $url->_expect('as_string' => 'http://web/1info?key%20words#this');
+ is($url->as_string, 'http://web/1info?key%20words#this', ref($url) . '->as_string');
$url->epath('%2f/%2f');
$url->equery('a=%26');
- $url->_expect('full_path' => '/%2f/%2f?a=%26');
+ is($url->full_path, '/%2f/%2f?a=%26', ref($url) . '->full_path');
# At this point it should be impossible to access the members path()
# and query() without complaints.
- eval { my $p = $url->path; print "Path is $p\n"; };
- die "Path exception failed" unless $@;
- eval { my $p = $url->query; print "Query is $p\n"; };
- die "Query exception failed" unless $@;
+ eval { my $p = $url->path; note "Path is $p\n"; };
+ fail "Path exception failed" unless $@;
+ eval { my $p = $url->query; note "Query is $p\n"; };
+ fail "Query exception failed" unless $@;
# but we should still be able to set it
$url->path("howdy");
- $url->_expect('as_string' => 'http://web/howdy?a=%26#this');
+ is($url->as_string, 'http://web/howdy?a=%26#this', ref($url) . '->as_string');
# Test the path_components function
$url = new URI::URL 'file:%2f/%2f';
my $p;
$p = join('-', $url->path_components);
- die "\$url->path_components returns '$p', expected '/-/'"
+ fail "\$url->path_components returns '$p', expected '/-/'"
unless $p eq "/-/";
$url->host("localhost");
$p = join('-', $url->path_components);
- die "\$url->path_components returns '$p', expected '-/-/'"
+ fail "\$url->path_components returns '$p', expected '-/-/'"
unless $p eq "-/-/";
$url->epath("/foo/bar/");
$p = join('-', $url->path_components);
- die "\$url->path_components returns '$p', expected '-foo-bar-'"
+ fail "\$url->path_components returns '$p', expected '-foo-bar-'"
unless $p eq "-foo-bar-";
$url->path_components("", "/etc", "\0", "..", "øse", "");
- $url->_expect('full_path' => '/%2Fetc/%00/../%F8se/');
+ is($url->full_path, '/%2Fetc/%00/../%F8se/', ref($url) . '->full_path');
# Setting undef
$url = new URI::URL 'http://web/p;p?q#f';
$url->equery(undef);
$url->eparams(undef);
$url->frag(undef);
- $url->_expect('as_string' => 'http://web');
+ is($url->as_string, 'http://web', ref($url) . '->as_string');
# Test http query access methods
$url->keywords('dog');
- $url->_expect('as_string' => 'http://web?dog');
+ is($url->as_string, 'http://web?dog', ref($url) . '->as_string');
$url->keywords(qw(dog bones));
- $url->_expect('as_string' => 'http://web?dog+bones');
+ is($url->as_string, 'http://web?dog+bones', ref($url) . '->as_string');
$url->keywords(0,0);
- $url->_expect('as_string' => 'http://web?0+0');
+ is($url->as_string, 'http://web?0+0', ref($url) . '->as_string');
$url->keywords('dog', 'bones', '#+=');
- $url->_expect('as_string' => 'http://web?dog+bones+%23%2B%3D');
+ is($url->as_string, 'http://web?dog+bones+%23%2B%3D', ref($url) . '->as_string');
$a = join(":", $url->keywords);
- die "\$url->keywords did not work (returned '$a')" unless $a eq 'dog:bones:#+=';
+ is($a, 'dog:bones:#+=', "\$url->keywords");
# calling query_form is an error
# eval { my $foo = $url->query_form; };
-# die "\$url->query_form should croak since query contains keywords not a form."
+# fail "\$url->query_form should croak since query contains keywords not a form."
# unless $@;
$url->query_form(a => 'foo', b => 'bar');
- $url->_expect('as_string' => 'http://web?a=foo&b=bar');
+ is($url->as_string, 'http://web?a=foo&b=bar', ref($url) . '->as_string');
my %a = $url->query_form;
- die "\$url->query_form did not work"
- unless $a{a} eq 'foo' && $a{b} eq 'bar';
+ is_deeply(
+ \%a,
+ { a => 'foo', b => 'bar' },
+ "\$url->query_form",
+ );
$url->query_form(a => undef, a => 'foo', '&=' => '&=+');
- $url->_expect('as_string' => 'http://web?a=&a=foo&%26%3D=%26%3D%2B');
+ is($url->as_string, 'http://web?a=&a=foo&%26%3D=%26%3D%2B', ref($url) . '->as_string');
my @a = $url->query_form;
- die "Wrong length" unless @a == 6;
- die "Bad keys from query_form"
- unless $a[0] eq 'a' && $a[2] eq 'a' && $a[4] eq '&=';
- die "Bad values from query_form"
- unless $a[1] eq '' && $a[3] eq 'foo' && $a[5] eq '&=+';
+ is(scalar(@a), 6, 'length');
+ is_deeply(
+ \@a,
+ [
+ 'a', '',
+ 'a', 'foo',
+ '&=', '&=+',
+ ],
+ 'query_form',
+ );
# calling keywords is an error
# eval { my $foo = $url->keywords; };
# Try this odd one
$url->equery('&=&=b&a=&a&a=b=c&&a=b');
@a = $url->query_form;
- #print join(":", @a), "\n";
- die "Wrong length" unless @a == 16;
- die "Wrong sequence" unless $a[4] eq "" && $a[5] eq "b" &&
- $a[10] eq "a" && $a[11] eq "b=c";
+ #note join(":", @a), "\n";
+ is(scalar(@a), 16, 'length');
+ ok(
+ $a[4] eq "" && $a[5] eq "b" && $a[10] eq "a" && $a[11] eq "b=c",
+ 'sequence',
+ );
# Try array ref values in the key value pairs
$url->query_form(a => ['foo', 'bar'], b => 'foo', c => ['bar', 'foo']);
- $url->_expect('as_string', 'http://web?a=foo&a=bar&b=foo&c=bar&c=foo');
-
+ is($url->as_string, 'http://web?a=foo&a=bar&b=foo&c=bar&c=foo', ref($url) . '->as_string');
- netloc_test();
- port_test();
+ subtest 'netloc_test' => \&netloc_test;
+ subtest 'port_test' => \&port_test;
$url->query(undef);
- $url->_expect('query', undef);
+ is($url->query, undef, ref($url) . '->as_string');
$url = new URI::URL 'gopher://gopher/';
$url->port(33);
$url->gtype("3");
$url->selector("S");
$url->search("query");
- $url->_expect('as_string', 'gopher://gopher:33/3S%09query');
+ is($url->as_string, 'gopher://gopher:33/3S%09query', ref($url) . '->as_string');
$url->epath("45%09a");
- $url->_expect('gtype' => '4');
- $url->_expect('selector' => '5');
- $url->_expect('search' => 'a');
- $url->_expect('string' => undef);
- $url->_expect('path' => "/45\ta");
+ is($url->gtype, '4', ref($url) . '->as_string');
+ is($url->selector, '5', ref($url) . '->as_string');
+ is($url->search, 'a', ref($url) . '->as_string');
+ is($url->string, undef, ref($url) . '->as_string');
+ is($url->path, "/45\ta", ref($url) . '->as_string');
# $url->path("00\t%09gisle");
-# $url->_expect('search', '%09gisle');
+# is($url->search '%09gisle', ref($url) . '->search');
# Let's test som other URL schemes
$url = new URI::URL 'news:';
$url->group("comp.lang.perl.misc");
- $url->_expect('as_string' => 'news:comp.lang.perl.misc');
+ is($url->as_string, 'news:comp.lang.perl.misc', ref($url) . '->as_string');
$url->article('<1234@a.sn.no>');
- $url->_expect('as_string' => 'news:1234@a.sn.no'); # "<" and ">" are gone
+ is($url->as_string, 'news:1234@a.sn.no', ref($url) . '->as_string: "<" and ">" are gone');
+
# This one should be illegal
eval { $url->article("no.perl"); };
die "This one should really complain" unless $@;
# $url = new URI::URL 'mailto:';
# $url->user("aas");
# $url->host("a.sn.no");
-# $url->_expect("as_string" => 'mailto:aas@a.sn.no');
+# is($url->as_string, 'mailto:aas@a.sn.no', ref($url) . '->as_string');
# $url->address('foo@bar');
-# $url->_expect("host" => 'bar');
-# $url->_expect("user" => 'foo');
+# is($url->host, 'bar', ref($url) . '->as_string');
+# is($url->user, 'foo', ref($url) . '->as_string');
# $url = new URI::URL 'wais://host/database/wt/wpath';
# $url->database('foo');
-# $url->_expect('as_string' => 'wais://host/foo/wt/wpath');
+# is($url->as_string, 'wais://host/foo/wt/wpath', ref($url) . '->as_string');
# $url->wtype('bar');
-# $url->_expect('as_string' => 'wais://host/foo/bar/wpath');
+# is($url->as_string, 'wais://host/foo/bar/wpath', ref($url) . '->as_string');
# Test crack method for various URLs
my(@crack, $crack);
@crack = URI::URL->new("http://host/path;param?query#frag")->crack;
- die "Cracked result should be 9 elements" unless @crack == 9;
+ is(scalar(@crack), 9, '9 elements');
$crack = join("*", map { defined($_) ? $_ : "UNDEF" } @crack);
- print "Cracked result: $crack\n";
- die "Bad crack result" unless
- $crack eq "http*UNDEF*UNDEF*host*80*/path*param*query*frag";
+ note "Cracked result: $crack";
+ is($crack, "http*UNDEF*UNDEF*host*80*/path*param*query*frag", 'crack result');
@crack = URI::URL->new("foo/bar", "ftp://aas\@ftp.sn.no/")->crack;
- die "Cracked result should be 9 elements" unless @crack == 9;
+ is(scalar(@crack), 9, '9 elements');
$crack = join("*", map { defined($_) ? $_ : "UNDEF" } @crack);
- print "Cracked result: $crack\n";
+ note "Cracked result: $crack";
# die "Bad crack result" unless
# $crack eq "ftp*UNDEF*UNDEF*UNDEF*21*foo/bar*UNDEF*UNDEF*UNDEF";
@crack = URI::URL->new('ftp://u:p@host/q?path')->crack;
- die "Cracked result should be 9 elements" unless @crack == 9;
+ is(scalar(@crack), 9, '9 elements');
$crack = join("*", map { defined($_) ? $_ : "UNDEF" } @crack);
- print "Cracked result: $crack\n";
- die "Bad crack result" unless
- $crack eq "ftp*u*p*host*21*/q?path*UNDEF*path*UNDEF";
+ note "Cracked result: $crack";
+ is($crack, "ftp*u*p*host*21*/q?path*UNDEF*path*UNDEF", 'crack result');
@crack = URI::URL->new("ftp://ftp.sn.no/pub")->crack; # Test anon ftp
- die "Cracked result should be 9 elements" unless @crack == 9;
- die "No passwd in anonymous crack" unless $crack[2];
+ is(scalar(@crack), 9, '9 elements');
+ ok($crack[2], "passwd in anonymous crack");
$crack[2] = 'passwd'; # easier to test when we know what it is
$crack = join("*", map { defined($_) ? $_ : "UNDEF" } @crack);
- print "Cracked result: $crack\n";
- die "Bad crack result" unless
- $crack eq "ftp*anonymous*passwd*ftp.sn.no*21*/pub*UNDEF*UNDEF*UNDEF";
+ note "Cracked result: $crack";
+ is($crack, "ftp*anonymous*passwd*ftp.sn.no*21*/pub*UNDEF*UNDEF*UNDEF", 'crack result');
@crack = URI::URL->new('mailto:aas@sn.no')->crack;
- die "Cracked result should be 9 elements" unless @crack == 9;
+ is(scalar(@crack), 9, '9 elements');
$crack = join("*", map { defined($_) ? $_ : "UNDEF" } @crack);
- print "Cracked result: $crack\n";
+ note "Cracked result: $crack";
# die "Bad crack result" unless
# $crack eq "mailto*aas*UNDEF*sn.no*UNDEF*aas\@sn.no*UNDEF*UNDEF*UNDEF";
@crack = URI::URL->new('news:comp.lang.perl.misc')->crack;
- die "Cracked result should be 9 elements" unless @crack == 9;
+ is(scalar(@crack), 9, '9 elements');
$crack = join("*", map { defined($_) ? $_ : "UNDEF" } @crack);
- print "Cracked result: $crack\n";
- die "Bad crack result" unless
- $crack eq "news*UNDEF*UNDEF*UNDEF*119*comp.lang.perl.misc*UNDEF*UNDEF*UNDEF";
+ note "Cracked result: $crack";
+ is($crack, "news*UNDEF*UNDEF*UNDEF*119*comp.lang.perl.misc*UNDEF*UNDEF*UNDEF", 'crack result');
}
#
# Test automatic netloc synchronisation
#
sub netloc_test {
- print "netloc_test:\n";
my $url = new URI::URL 'ftp://anonymous:p%61ss@håst:12345';
- $url->_expect('user', 'anonymous');
- $url->_expect('password', 'pass');
- $url->_expect('host', 'xn--hst-ula');
- $url->_expect('port', 12345);
+ is($url->user, 'anonymous', ref($url) . '->as_string');
+ is($url->password, 'pass', ref($url) . '->as_string');
+ is($url->host, 'xn--hst-ula', ref($url) . '->as_string');
+ is($url->port, 12345, ref($url) . '->as_string');
# Can't really know how netloc is represented since it is partially escaped
- #$url->_expect('netloc', 'anonymous:pass@hst:12345');
- $url->_expect('as_string' => 'ftp://anonymous:pass@xn--hst-ula:12345');
+ #is($url->netloc, 'anonymous:pass@hst:12345', ref($url) . '->as_string');
+ is($url->as_string, 'ftp://anonymous:pass@xn--hst-ula:12345', ref($url) . '->as_string');
# The '0' is sometimes tricky to get right
$url->user(0);
$url->password(0);
$url->host(0);
$url->port(0);
- $url->_expect('netloc' => '0:0@0:0');
+ is($url->netloc, '0:0@0:0', ref($url) . '->as_string');
$url->host(undef);
- $url->_expect('netloc' => '0:0@:0');
+ is($url->netloc, '0:0@:0', ref($url) . '->as_string');
$url->host('h');
$url->user(undef);
- $url->_expect('netloc' => ':0@h:0');
+ is($url->netloc, ':0@h:0', ref($url) . '->as_string');
$url->user('');
- $url->_expect('netloc' => ':0@h:0');
+ is($url->netloc, ':0@h:0', ref($url) . '->as_string');
$url->password('');
- $url->_expect('netloc' => ':@h:0');
+ is($url->netloc, ':@h:0', ref($url) . '->as_string');
$url->user('foo');
- $url->_expect('netloc' => 'foo:@h:0');
+ is($url->netloc, 'foo:@h:0', ref($url) . '->as_string');
# Let's try a simple one
$url->user('nemo');
$url->password('p2');
$url->host('hst2');
$url->port(2);
- $url->_expect('netloc' => 'nemo:p2@hst2:2');
+ is($url->netloc, 'nemo:p2@hst2:2', ref($url) . '->as_string');
$url->user(undef);
$url->password(undef);
$url->port(undef);
- $url->_expect('netloc' => 'hst2');
- $url->_expect('port' => '21'); # the default ftp port
+ is($url->netloc, 'hst2', ref($url) . '->as_string');
+ is($url->port, '21', ref($url) . '->as_string'); # the default ftp port
$url->port(21);
- $url->_expect('netloc' => 'hst2:21');
+ is($url->netloc, 'hst2:21', ref($url) . '->as_string');
# Let's try some reserved chars
$url->user("@");
$url->password(":-#-;-/-?");
- $url->_expect('as_string' => 'ftp://%40::-%23-;-%2F-%3F@hst2:21');
+ is($url->as_string, 'ftp://%40::-%23-;-%2F-%3F@hst2:21', ref($url) . '->as_string');
}
# Test port behaviour
#
sub port_test {
- print "port_test:\n";
-
$url = URI::URL->new('http://foo/root/dir/');
my $port = $url->port;
- die "Port undefined" unless defined $port;
- die "Wrong port $port" unless $port == 80;
- die "Wrong string" unless $url->as_string eq
- 'http://foo/root/dir/';
+ is($port, 80, 'port');
+ is($url->as_string, 'http://foo/root/dir/', 'string');
$url->port(8001);
$port = $url->port;
- die "Port undefined" unless defined $port;
- die "Wrong port $port" unless $port == 8001;
- die "Wrong string" unless $url->as_string eq
- 'http://foo:8001/root/dir/';
+ is($port, 8001, 'port');
+ is($url->as_string, 'http://foo:8001/root/dir/', 'string');
$url->port(80);
$port = $url->port;
- die "Port undefined" unless defined $port;
- die "Wrong port $port" unless $port == 80;
- die "Wrong string" unless $url->canonical->as_string eq
- 'http://foo/root/dir/';
+ is($port, 80, 'port');
+ is($url->canonical->as_string, 'http://foo/root/dir/', 'string');
$url->port(8001);
$url->port(undef);
$port = $url->port;
- die "Port undefined" unless defined $port;
- die "Wrong port $port" unless $port == 80;
- die "Wrong string" unless $url->as_string eq
- 'http://foo/root/dir/';
+ is($port, 80, 'port');
+ is($url->canonical->as_string, 'http://foo/root/dir/', 'string');
}
# escaping functions
sub escape_test {
- print "escape_test:\n";
-
# supply escaped URL
$url = new URI::URL 'http://web/this%20has%20spaces';
# check component is unescaped
- $url->_expect('path', '/this has spaces');
+ is($url->path, '/this has spaces', ref($url) . '->as_string');
# modify the unescaped form
$url->path('this ALSO has spaces');
# check whole url is escaped
- $url->_expect('as_string',
- 'http://web/this%20ALSO%20has%20spaces');
+ is($url->as_string,
+ 'http://web/this%20ALSO%20has%20spaces', ref($url) . '->as_string');
$url = new URI::URL uri_escape('http://web/try %?#" those');
- $url->_expect('as_string',
- 'http%3A%2F%2Fweb%2Ftry%20%25%3F%23%22%20those');
+ is($url->as_string,
+ 'http%3A%2F%2Fweb%2Ftry%20%25%3F%23%22%20those', ref($url) . '->as_string');
my $all = pack('C*',0..255);
my $esc = uri_escape($all);
my $new = uri_unescape($esc);
- die "uri_escape->uri_unescape mismatch" unless $all eq $new;
+ is($all, $new, "uri_escape->uri_unescape"),
$url->path($all);
- $url->_expect('full_path' => q(%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%20!%22%23$%&'()*+,-./0123456789:;%3C=%3E%3F@ABCDEFGHIJKLMNOPQRSTUVWXYZ[%5C]%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D~%7F%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF));
+ is($url->full_path, q(%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%20!%22%23$%&'()*+,-./0123456789:;%3C=%3E%3F@ABCDEFGHIJKLMNOPQRSTUVWXYZ[%5C]%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D~%7F%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF), ref($url) . '->as_string');
# test escaping uses uppercase (preferred by rfc1837)
$url = new URI::URL 'file://h/';
$url->path(chr(0x7F));
- $url->_expect('as_string', 'file://h/%7F');
+ is($url->as_string, 'file://h/%7F', ref($url) . '->as_string');
return;
# reserved characters differ per scheme
## XXX is this '?' allowed to be unescaped
$url = new URI::URL 'file://h/test?ing';
- $url->_expect('path', '/test?ing');
+ is($url->path, '/test?ing', ref($url) . '->as_string');
$url = new URI::URL 'file://h/';
$url->epath('question?mark');
- $url->_expect('as_string', 'file://h/question?mark');
+ is($url->as_string, 'file://h/question?mark', ref($url) . '->as_string');
# XXX Why should this be any different???
# Perhaps we should not expect too much :-)
$url->path('question?mark');
- $url->_expect('as_string', 'file://h/question%3Fmark');
+ is($url->as_string, 'file://h/question%3Fmark', ref($url) . '->as_string');
# See what happens when set different elements to this ugly sting
my $reserved = ';/?:@&=#%';
$url->path($reserved . "foo");
- $url->_expect('as_string', 'file://h/%3B/%3F%3A%40%26%3D%23%25foo');
+ is($url->as_string, 'file://h/%3B/%3F%3A%40%26%3D%23%25foo', ref($url) . '->as_string');
$url->scheme('http');
$url->path('');
- $url->_expect('as_string', 'http://h/');
+ is($url->as_string, 'http://h/', ref($url) . '->as_string');
$url->query($reserved);
$url->params($reserved);
$url->frag($reserved);
- $url->_expect('as_string', 'http://h/;%3B%2F%3F%3A%40&=%23%25?%3B%2F%3F%3A%40&=%23%25#;/?:@&=#%');
+ is($url->as_string, 'http://h/;%3B%2F%3F%3A%40&=%23%25?%3B%2F%3F%3A%40&=%23%25#;/?:@&=#%', ref($url) . '->as_string');
- $str = $url->as_string;
+ my $str = $url->as_string;
$url = new URI::URL $str;
die "URL changed" if $str ne $url->as_string;
$url = new URI::URL 'ftp:foo';
$url->user($reserved);
$url->host($reserved);
- $url->_expect('as_string', 'ftp://%3B%2F%3F%3A%40%26%3D%23%25@%3B%2F%3F%3A%40%26%3D%23%25/foo');
+ is($url->as_string, 'ftp://%3B%2F%3F%3A%40%26%3D%23%25@%3B%2F%3F%3A%40%26%3D%23%25/foo', ref($url) . '->as_string');
}
sub newlocal_test {
return 1 if $^O eq "MacOS";
- print "newlocal_test:\n";
my $isMSWin32 = ($^O =~ /MSWin32/i);
my $pwd = ($isMSWin32 ? 'cd' :
($^O eq 'qnx' ? '/usr/bin/fullpath -t' :
($^O eq 'VMS' ? 'show default' :
(-e '/bin/pwd' ? '/bin/pwd' : 'pwd'))));
- my $tmpdir = ($^O eq 'MSWin32' ? $ENV{TEMP} : '/tmp');
+ my $tmpdir = tempdir();
if ( $^O eq 'qnx' ) {
$tmpdir = `/usr/bin/fullpath -t $tmpdir`;
chomp $tmpdir;
$dir =~ s/^(\w)%3A/$1:/ if $isMSWin32 or $^O eq 'os2';
$url = newlocal URI::URL;
my $ss = $isMSWin32 ? '//' : (($dir =~ m,^/,) ? '' : '///' );
- $url->_expect('as_string', URI::URL->new("file:$ss$dir/")->as_string);
+ is($url->as_string, URI::URL->new("file:$ss$dir/")->as_string, ref($url) . '->as_string');
- print "Local directory is ". $url->local_path . "\n";
+ note "Local directory is ". $url->local_path . "\n";
if ($^O ne 'VMS') {
# absolute dir
chdir('/') or die $!;
$url = newlocal URI::URL '/usr/';
- $url->_expect('as_string', 'file:/usr/');
+ is($url->as_string, 'file:/usr/', ref($url) . '->as_string');
# absolute file
$url = newlocal URI::URL '/vmunix';
- $url->_expect('as_string', 'file:/vmunix');
+ is($url->as_string, 'file:/vmunix', ref($url) . '->as_string');
}
# relative file
- chdir($tmpdir) or die $!;
+ chdir($tmpdir) or fail $!;
$dir = `$pwd`; $dir =~ tr|\\|/|;
chomp $dir;
if ($^O eq 'VMS') {
$dir = uri_escape($dir, ':');
$dir =~ s/^(\w)%3A/$1:/ if $isMSWin32 or $^O eq 'os2';
$url = newlocal URI::URL 'foo';
- $url->_expect('as_string', "file:$ss$dir/foo");
+ is($url->as_string, "file:$ss$dir/foo", ref($url) . '->as_string');
# relative dir
- chdir($tmpdir) or die $!;
+ chdir($tmpdir) or fail $!;
$dir = `$pwd`; $dir =~ tr|\\|/|;
chomp $dir;
if ($^O eq 'VMS') {
$dir = uri_escape($dir, ':');
$dir =~ s/^(\w)%3A/$1:/ if $isMSWin32 or $^O eq 'os2';
$url = newlocal URI::URL 'bar/';
- $url->_expect('as_string', "file:$ss$dir/bar/");
+ is($url->as_string, "file:$ss$dir/bar/", ref($url) . '->as_string');
# 0
if ($^O ne 'VMS') {
- chdir('/') or die $!;
+ chdir('/') or fail $!;
$dir = `$pwd`; $dir =~ tr|\\|/|;
chomp $dir;
$dir = uri_escape($dir, ':');
$dir =~ s/^(\w)%3A/$1:/ if $isMSWin32 or $^O eq 'os2';
$url = newlocal URI::URL '0';
- $url->_expect('as_string', "file:$ss${dir}0");
+ is($url->as_string, "file:$ss${dir}0", ref($url) . '->as_string');
}
# Test access methods for file URLs
$url = new URI::URL 'file:/c:/dos';
- $url->_expect('dos_path', 'C:\\DOS');
- $url->_expect('unix_path', '/c:/dos');
- #$url->_expect('vms_path', '[C:]DOS');
- $url->_expect('mac_path', 'UNDEF');
+ is($url->dos_path, 'C:\\DOS', ref($url) . '->as_string');
+ is($url->unix_path, '/c:/dos', ref($url) . '->as_string');
+ #is($url->vms_path, '[C:]DOS', ref($url) . '->as_string');
+ is($url->mac_path, undef, ref($url) . '->as_string');
$url = new URI::URL 'file:/foo/bar';
- $url->_expect('unix_path', '/foo/bar');
- $url->_expect('mac_path', 'foo:bar');
+ is($url->unix_path, '/foo/bar', ref($url) . '->as_string');
+ is($url->mac_path, 'foo:bar', ref($url) . '->as_string');
# Some edge cases
# $url = new URI::URL 'file:';
-# $url->_expect('unix_path', '/');
+# is($url->unix_path, '/', ref($url) . '->as_string');
$url = new URI::URL 'file:/';
- $url->_expect('unix_path', '/');
+ is($url->unix_path, '/', ref($url) . '->as_string');
$url = new URI::URL 'file:.';
- $url->_expect('unix_path', '.');
+ is($url->unix_path, '.', ref($url) . '->as_string');
$url = new URI::URL 'file:./foo';
- $url->_expect('unix_path', './foo');
+ is($url->unix_path, './foo', ref($url) . '->as_string');
$url = new URI::URL 'file:0';
- $url->_expect('unix_path', '0');
+ is($url->unix_path, '0', ref($url) . '->as_string');
$url = new URI::URL 'file:../../foo';
- $url->_expect('unix_path', '../../foo');
+ is($url->unix_path, '../../foo', ref($url) . '->as_string');
$url = new URI::URL 'file:foo/../bar';
- $url->_expect('unix_path', 'foo/../bar');
+ is($url->unix_path, 'foo/../bar', ref($url) . '->as_string');
# Relative files
$url = new URI::URL 'file:foo/b%61r/Note.txt';
- $url->_expect('unix_path', 'foo/bar/Note.txt');
- $url->_expect('mac_path', ':foo:bar:Note.txt');
- $url->_expect('dos_path', 'FOO\\BAR\\NOTE.TXT');
- #$url->_expect('vms_path', '[.FOO.BAR]NOTE.TXT');
+ is($url->unix_path, 'foo/bar/Note.txt', ref($url) . '->as_string');
+ is($url->mac_path, ':foo:bar:Note.txt', ref($url) . '->as_string');
+ is($url->dos_path, 'FOO\\BAR\\NOTE.TXT', ref($url) . '->as_string');
+ #is($url->vms_path', '[.FOO.BAR]NOTE.TXT', ref($url) . '->as_string');
# The VMS path found in RFC 1738 (section 3.10)
$url = new URI::URL 'file://vms.host.edu/disk$user/my/notes/note12345.txt';
-# $url->_expect('vms_path', 'DISK$USER:[MY.NOTES]NOTE12345.TXT');
-# $url->_expect('mac_path', 'disk$user:my:notes:note12345.txt');
+# is($url->vms_path, 'DISK$USER:[MY.NOTES]NOTE12345.TXT', ref($url) . '->as_string');
+# is($url->mac_path, 'disk$user:my:notes:note12345.txt', ref($url) . '->as_string');
- chdir($savedir) or die $!;
+ chdir($savedir) or fail $!;
}
# absolute_test()
#
sub absolute_test {
-
- print "Test relative/absolute URI::URL parsing:\n";
-
# Tests from draft-ietf-uri-relative-url-06.txt
# Copied verbatim from the draft, parsed below
my $base = 'http://a/b/c/d;p?q#f';
- $absolute_tests = <<EOM;
+ my $absolute_tests = <<EOM;
5.1. Normal Examples
g:h = <URL:g:h>
# convert text to list like
# @absolute_tests = ( ['g:h' => 'g:h'], ...)
- for $line (split("\n", $absolute_tests)) {
+ my @absolute_tests;
+ for my $line (split("\n", $absolute_tests)) {
next unless $line =~ /^\s{6}/;
if ($line =~ /^\s+(\S+)\s*=\s*<URL:([^>]*)>/) {
my($rel, $abs) = ($1, $2);
# ['%2e%2e/a' => 'http://a/b/c/%2e%2e/a'],
);
- print " Relative + Base => Expected Absolute URL\n";
- print "================================================\n";
- for $test (@absolute_tests) {
+ note " Relative + Base => Expected Absolute URL";
+ note "------------------------------------------------\n";
+ for my $test (@absolute_tests) {
my($rel, $abs) = @$test;
my $abs_url = new URI::URL $abs;
my $abs_str = $abs_url->as_string;
- printf(" %-10s + $base => %s\n", $rel, $abs);
+ note sprintf(" %-10s + $base => %s", $rel, $abs);
my $u = new URI::URL $rel, $base;
my $got = $u->abs;
- $got->_expect('as_string', $abs_str);
+ is($got->as_string, $abs_str, ref($url) . '->as_string');
}
# bug found and fixed in 1.9 by "J.E. Fritz" <FRITZ@gems.vcu.edu>
my $result = $relative->abs;
my ($a, $b) = ($base->path, $result->path);
- die "'$a' and '$b' should be the same" unless $a eq $b;
+ is($a, $b, 'identity');
# Counter the expectation of least surprise,
# section 6 of the draft says the URL should
$base = new URI::URL 'http://host/dir1/../dir2/file';
$relative = new URI::URL 'file', $base;
$result = $relative->abs;
- die 'URL not canonicalised' unless $result eq 'http://host/dir2/file';
+ is($result, 'http://host/dir2/file', 'URL canonicalised');
- print "--------\n";
+ note "--------";
# Test various other kinds of URLs and how they like to be absolutized
for (["http://abc/", "news:45664545", "http://abc/"],
["news:abc", "http://abc/", "news:abc"],
my($url, $base, $expected_abs) = @$_;
my $rel = new URI::URL $url, $base;
my $abs = $rel->abs($base, 1);
- printf(" %-12s+ $base => %s\n", $rel, $abs);
- $abs->_expect('as_string', $expected_abs);
+ note sprintf(" %-12s+ $base => %s", $rel, $abs);
+ is($abs->as_string, $expected_abs, ref($url) . '->as_string');
}
- print "absolute test ok\n";
+ note "absolute test ok\n";
# Test relative function
for (
)
{
my($abs, $base, $expect) = @$_;
- printf "url('$abs', '$base')->rel eq '$expect'\n";
my $rel = URI::URL->new($abs, $base)->rel;
- $rel->_expect('as_string', $expect);
+ is($rel->as_string, $expect, "url('$abs', '$base')->rel = '$expect'");
}
- print "relative test ok\n";
+ note "relative test ok\n";
}
my $u3 = new URI::URL 'http://ABC.com:/%7esmith/home.html';
# Test all permutations of these tree
- $u1->eq($u2) or die "1: $u1 ne $u2";
- $u1->eq($u3) or die "2: $u1 ne $u3";
- $u2->eq($u1) or die "3: $u2 ne $u1";
- $u2->eq($u3) or die "4: $u2 ne $u3";
- $u3->eq($u1) or die "5: $u3 ne $u1";
- $u3->eq($u2) or die "6: $u3 ne $u2";
+ ok($u1->eq($u2), "1: $u1 ne $u2");
+ ok($u1->eq($u3), "2: $u1 ne $u3");
+ ok($u2->eq($u1), "3: $u2 ne $u1");
+ ok($u2->eq($u3), "4: $u2 ne $u3");
+ ok($u3->eq($u1), "5: $u3 ne $u1");
+ ok($u3->eq($u2), "6: $u3 ne $u2");
# Test empty path
my $u4 = new URI::URL 'http://www.sn.no';
- $u4->eq("HTTP://WWW.SN.NO:80/") or die "7: $u4";
- $u4->eq("http://www.sn.no:81") and die "8: $u4";
+ ok($u4->eq("HTTP://WWW.SN.NO:80/"), "7: $u4");
+ ok(!$u4->eq("http://www.sn.no:81"),"8: $u4");
# Test mailto
# my $u5 = new URI::URL 'mailto:AAS@SN.no';
-# $u5->eq('mailto:aas@sn.no') or die "9: $u5";
+# ok($u5->eq('mailto:aas@sn.no'), "9: $u5");
+
# Test reserved char
my $u6 = new URI::URL 'ftp://ftp/%2Fetc';
- $u6->eq("ftp://ftp/%2fetc") or die "10: $u6";
- $u6->eq("ftp://ftp://etc") and die "11: $u6";
+ ok($u6->eq("ftp://ftp/%2fetc"), "10: $u6");
+ ok(!$u6->eq("ftp://ftp://etc"), "11: $u6");
}
-
-#!perl -w
+use strict;
+use warnings;
use URI::file;
$URI::file::DEFAULT_AUTHORITY = undef;
-@tests = (
+my @tests = (
[ "file", "unix", "win32", "mac" ],
#---------------- ------------ --------------- --------------
[ "file://localhost/foo/bar",
"!/foo/bar", "!\\foo\\bar", "!foo:bar", ],
[ "file:/foo/bar", "/foo/bar", "\\foo\\bar", "foo:bar", ],
[ "foo/bar", "foo/bar", "foo\\bar", ":foo:bar",],
-[ "file://foo/bar","!//foo/bar", "\\\\foo\\bar", "!foo:bar"],
+[ "file://foo3445x/bar","!//foo3445x/bar", "\\\\foo3445x\\bar", "!foo3445x:bar"],
[ "file://a:/", "!//a:/", "!A:\\", undef],
[ "file:/", "/", "\\", undef],
[ "file://A:relative/", "!//A:relative/", "A:", undef],
[ "../%2E%2E", "!../..", "!..\\..", "::.."],
);
if ($^O eq "MacOS") {
-@extratests = (
+my @extratests = (
[ "../..", "../..", "..\\..", ":::"],
[ "../../", "../../", "..\\..\\", "!:::"],
[ "file:./foo.bar", "!./foo.bar", "!.\\foo.bar", "!:foo.bar"],
push(@tests,@extratests);
}
-@os = @{shift @tests};
+my @os = @{shift @tests};
shift @os; # file
my $num = @tests;
print "1..$num\n";
-$testno = 1;
+my $testno = 1;
-for $t (@tests) {
+for my $t (@tests) {
my @t = @$t;
my $file = shift @t;
my $err;
my $u = URI->new($file, "file");
my $i = 0;
- for $os (@os) {
+ for my $os (@os) {
my $f = $u->file($os);
my $expect = $t[$i];
$f = "<undef>" unless defined $f;
$err++;
}
if (defined($t[$i]) && !$loose) {
- $u2 = URI::file->new($t[$i], $os);
+ my $u2 = URI::file->new($t[$i], $os);
unless ($u2->as_string eq $file) {
print "URI::file->new('$t[$i]', '$os') ne $file, but $u2\n";
$err++;
-#!perl -w
+use strict;
+use warnings;
print "1..5\n";
# We used to have problems with URLs that used a base that was
# not absolute itself.
-$u1 = url("/foo/bar", "http://www.acme.com/");
-$u2 = url("../foo/", $u1);
-$u3 = url("zoo/foo", $u2);
+my $u1 = url("/foo/bar", "http://www.acme.com/");
+my $u2 = url("../foo/", $u1);
+my $u3 = url("zoo/foo", $u2);
-$a1 = $u1->abs->as_string;
-$a2 = $u2->abs->as_string;
-$a3 = $u3->abs->as_string;
+my $a1 = $u1->abs->as_string;
+my $a2 = $u2->abs->as_string;
+my $a3 = $u3->abs->as_string;
print "$a1\n$a2\n$a3\n";
print "ok 3\n";
# We used to have problems with URI::URL as the base class :-(
-$u4 = url("foo", "URI::URL");
-$a4 = $u4->abs;
+my $u4 = url("foo", "URI::URL");
+my $a4 = $u4->abs;
print "$a4\n";
print "not " unless $u4 eq "foo" && $a4 eq "uri:/foo";
print "ok 4\n";
--- /dev/null
+use strict;
+use warnings;
+
+use Test::More 'no_plan';
+
+use URI ();
+
+{
+ my $u = URI->new("http://www.example.org/a/b/c");
+
+ is_deeply [$u->path_segments], ['', qw(a b c)], 'path_segments in list context';
+ is $u->path_segments, '/a/b/c', 'path_segments in scalar context';
+
+ is_deeply [$u->path_segments('', qw(z y x))], ['', qw(a b c)], 'set path_segments in list context';
+ is $u->path_segments('/i/j/k'), '/z/y/x', 'set path_segments in scalar context';
+
+ $u->path_segments('', qw(q r s));
+ is $u->path_segments, '/q/r/s', 'set path_segments in void context';
+}
+
+{
+ my $u = URI->new("http://www.example.org/abc");
+ $u->path_segments('', '%', ';', '/');
+ is $u->path_segments, '/%25/%3B/%2F', 'escaping special characters';
+}
+
+{
+ my $u = URI->new("http://www.example.org/abc;param1;param2");
+ my @ps = $u->path_segments;
+ isa_ok $ps[1], 'URI::_segment';
+ $u->path_segments(@ps);
+ is $u->path_segments, '/abc;param1;param2', 'dealing with URI segments';
+}
-#!perl -w
+use strict;
+use warnings;
print "1..8\n";
use URI;
-$u = URI->new('pop://aas@pop.sn.no');
+my $u = URI->new('pop://aas@pop.sn.no');
print "not " unless $u->user eq "aas" &&
!defined($u->auth) &&
-#!perl -w
-
use strict;
+use warnings;
+
use utf8;
use Test::More tests => 15;
use URI::_punycode qw(encode_punycode decode_punycode);
-#!perl -w
-
use strict;
+use warnings;
use Test::More tests => 19;
-#!perl -w
-
use strict;
+use warnings;
+
use Test::More tests => 23;
use URI ();
-#!/usr/bin/perl -w
+use strict;
+use warnings;
-use Test;
+use Test::More;
plan tests => 6;
-use strict;
use URI;
my $uri;
$uri = URI->new("http://www.example.com/foo/bar/");
-ok($uri->rel("http://www.example.com/foo/bar/"), "./");
-ok($uri->rel("HTTP://WWW.EXAMPLE.COM/foo/bar/"), "./");
-ok($uri->rel("HTTP://WWW.EXAMPLE.COM/FOO/BAR/"), "../../foo/bar/");
-ok($uri->rel("HTTP://WWW.EXAMPLE.COM:80/foo/bar/"), "./");
+is($uri->rel("http://www.example.com/foo/bar/"), "./");
+is($uri->rel("HTTP://WWW.EXAMPLE.COM/foo/bar/"), "./");
+is($uri->rel("HTTP://WWW.EXAMPLE.COM/FOO/BAR/"), "../../foo/bar/");
+is($uri->rel("HTTP://WWW.EXAMPLE.COM:80/foo/bar/"), "./");
$uri = URI->new("http://www.example.com/foo/bar");
-ok($uri->rel("http://www.example.com/foo/bar"), "bar");
-ok($uri->rel("http://www.example.com/foo"), "foo/bar");
+is($uri->rel("http://www.example.com/foo/bar"), "bar");
+is($uri->rel("http://www.example.com/foo"), "foo/bar");
-#!perl -w
-
# Test URIs containing IPv6 addresses
use strict;
+use warnings;
+
use Test::More tests => 19;
use URI;
-#!perl -w
-
use strict;
+use warnings;
+
use Test qw(plan ok);
plan tests => 102;
-#!perl -w
+use strict;
+use warnings;
print "1..4\n";
-use strict;
use URI;
my $u = URI->new('rsync://gisle@perl.com/foo/bar');
-#!perl -w
+use strict;
+use warnings;
print "1..9\n";
use URI;
-$u = URI->new("<rtsp://media.perl.com/fôo.smi/>");
+my $u = URI->new("<rtsp://media.perl.com/fôo.smi/>");
#print "$u\n";
print "not " unless $u eq "rtsp://media.perl.com/f%F4o.smi/";
print "ok 2\n";
# play with port
-$old = $u->port(8554);
+my $old = $u->port(8554);
print "not " unless $old == 554 && $u eq "rtsp://media.perl.com:8554/f%F4o.smi/";
print "ok 3\n";
--- /dev/null
+use strict;
+use warnings;
+
+use Test::More;
+use URI;
+
+plan skip_all => 'this test assumes that URI::javascript does not exist'
+ if eval { +require URI::javascript };
+plan tests => 4;
+
+for (0..1) {
+ my $uri = URI->new('javascript://foo/bar');
+
+ is($@, '', 'no exception when trying to load a scheme handler class');
+ ok($uri->isa('URI'), 'but URI still instantiated as foreign');
+}
-#!perl -w
+use strict;
+use warnings;
print "1..11\n";
use URI;
-use strict;
my $u = URI->new('sip:phone@domain.ext');
print "not " unless $u->user eq 'phone' &&
--- /dev/null
+use strict;
+use warnings;
+
+use Test::More;
+
+# ABSTRACT: Make sure query_form(\%hash) is sorted
+
+use URI;
+
+my $base = URI->new('http://example.org/');
+
+my $i = 1;
+
+my $hash = { map { $_ => $i++ } qw( a b c d e f ) };
+
+$base->query_form($hash);
+
+is("$base","http://example.org/?a=1&b=2&c=3&d=4&e=5&f=6", "Query parameters are sorted");
+
+done_testing;
+
+
-#!perl -w
+use strict;
+use warnings;
print "1..17\n";
-use strict;
use URI::Split qw(uri_split uri_join);
sub j { join("-", map { defined($_) ? $_ : "<undef>" } @_) }
-#!perl -w
-
use strict;
+use warnings;
use Storable;
if (@ARGV && $ARGV[0] eq "store") {
-#!perl -w
+use strict;
+use warnings;
-eval {
- require Storable;
- print "1..3\n";
-};
-if ($@) {
- print "1..0 # skipped: Needs the Storable module installed\n";
- exit;
-}
+use Test::Needs 'Storable';
+print "1..3\n";
system($^X, "-Iblib/lib", "t/storable-test.pl", "store");
system($^X, "-Iblib/lib", "t/storable-test.pl", "retrieve");
-#!perl -w
-
-eval {
- require Business::ISBN;
-};
-if ($@) {
- print "1..0 # Skipped: Needs the Business::ISBN module installed\n\n";
- print $@;
- exit;
-}
+use strict;
+use warnings;
+
+use Test::Needs 'Business::ISBN';
print "1..13\n";
-#!perl -w
+use strict;
+use warnings;
print "1..4\n";
-use strict;
use URI;
my $u = URI->new("urn:oid");
-#!perl
-
use strict;
use warnings;
#!/usr/bin/perl -w
+use strict;
+use warnings;
+
sub usage {
my $prog = $0; $prog =~ s,.*/,,;
die "Usage: $prog <uri> [<method> [<args>]...]\n";
--- /dev/null
+use 5.006;
+use strict;
+use warnings;
+
+# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.058
+
+use Test::More 0.94;
+
+plan tests => 54;
+
+my @module_files = (
+ 'URI.pm',
+ 'URI/Escape.pm',
+ 'URI/Heuristic.pm',
+ 'URI/IRI.pm',
+ 'URI/QueryParam.pm',
+ 'URI/Split.pm',
+ 'URI/URL.pm',
+ 'URI/WithBase.pm',
+ 'URI/_foreign.pm',
+ 'URI/_generic.pm',
+ 'URI/_idna.pm',
+ 'URI/_ldap.pm',
+ 'URI/_login.pm',
+ 'URI/_punycode.pm',
+ 'URI/_query.pm',
+ 'URI/_segment.pm',
+ 'URI/_server.pm',
+ 'URI/_userpass.pm',
+ 'URI/data.pm',
+ 'URI/file.pm',
+ 'URI/file/Base.pm',
+ 'URI/file/FAT.pm',
+ 'URI/file/Mac.pm',
+ 'URI/file/OS2.pm',
+ 'URI/file/QNX.pm',
+ 'URI/file/Unix.pm',
+ 'URI/file/Win32.pm',
+ 'URI/ftp.pm',
+ 'URI/gopher.pm',
+ 'URI/http.pm',
+ 'URI/https.pm',
+ 'URI/ldap.pm',
+ 'URI/ldapi.pm',
+ 'URI/ldaps.pm',
+ 'URI/mailto.pm',
+ 'URI/mms.pm',
+ 'URI/news.pm',
+ 'URI/nntp.pm',
+ 'URI/pop.pm',
+ 'URI/rlogin.pm',
+ 'URI/rsync.pm',
+ 'URI/rtsp.pm',
+ 'URI/rtspu.pm',
+ 'URI/sftp.pm',
+ 'URI/sip.pm',
+ 'URI/sips.pm',
+ 'URI/snews.pm',
+ 'URI/ssh.pm',
+ 'URI/telnet.pm',
+ 'URI/tn3270.pm',
+ 'URI/urn.pm',
+ 'URI/urn/isbn.pm',
+ 'URI/urn/oid.pm'
+);
+
+
+
+# no fake home requested
+
+my @switches = (
+ -d 'blib' ? '-Mblib' : '-Ilib',
+);
+
+use File::Spec;
+use IPC::Open3;
+use IO::Handle;
+
+open my $stdin, '<', File::Spec->devnull or die "can't open devnull: $!";
+
+my @warnings;
+for my $lib (@module_files)
+{
+ # see L<perlfaq8/How can I capture STDERR from an external command?>
+ my $stderr = IO::Handle->new;
+
+ diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g; q{'} . $str . q{'} }
+ $^X, @switches, '-e', "require q[$lib]"))
+ if $ENV{PERL_COMPILE_TEST_DEBUG};
+
+ my $pid = open3($stdin, '>&STDERR', $stderr, $^X, @switches, '-e', "require q[$lib]");
+ binmode $stderr, ':crlf' if $^O eq 'MSWin32';
+ my @_warnings = <$stderr>;
+ waitpid($pid, 0);
+ is($?, 0, "$lib loaded ok");
+
+ shift @_warnings if @_warnings and $_warnings[0] =~ /^Using .*\bblib/
+ and not eval { +require blib; blib->VERSION('1.01') };
+
+ if (@_warnings)
+ {
+ warn @_warnings;
+ push @warnings, @_warnings;
+ }
+}
+
+
+
+is(scalar(@warnings), 0, 'no warnings found')
+ or diag 'got warnings: ', explain(\@warnings);
+
+BAIL_OUT("Compilation problems") if !Test::More->builder->is_passing;
--- /dev/null
+#!perl
+
+use Test::More;
+
+use Test::MinimumVersion;
+all_minimum_version_from_metayml_ok();
--- /dev/null
+#!perl
+
+use strict;
+use warnings qw(all);
+
+use Test::More;
+use Test::Mojibake;
+
+all_files_encoding_ok();
--- /dev/null
+#!perl
+# This file was automatically generated by Dist::Zilla::Plugin::Test::Pod::Coverage::Configurable 0.07.
+
+use Test::Pod::Coverage 1.08;
+use Test::More 0.88;
+
+BEGIN {
+ if ( $] <= 5.008008 ) {
+ plan skip_all => 'These tests require Pod::Coverage::TrustPod, which only works with Perl 5.8.9+';
+ }
+}
+use Pod::Coverage::TrustPod;
+
+my %skip = map { $_ => 1 } qw( URI::IRI URI::_foreign URI::_idna URI::_login URI::_ldap URI::file::QNX URI::nntp URI::urn::isbn URI::urn::oid URI::sftp );
+
+my @modules;
+for my $module ( all_modules() ) {
+ next if $skip{$module};
+
+ push @modules, $module;
+}
+
+plan skip_all => 'All the modules we found were excluded from POD coverage test.'
+ unless @modules;
+
+plan tests => scalar @modules;
+
+my %trustme = (
+ 'URI' => [
+ qr/^(?:STORABLE_freeze|STORABLE_thaw|TO_JSON|implementor)$/
+ ],
+ 'URI::Escape' => [
+ qr/^(?:escape_char)$/
+ ],
+ 'URI::Heuristic' => [
+ qr/^(?:MY_COUNTRY|uf_url|uf_urlstr)$/
+ ],
+ 'URI::URL' => [
+ qr/^(?:address|article|crack|dos_path|encoded822addr|eparams|epath|frag)$/,
+ qr/^(?:full_path|groupart|keywords|local_path|mac_path|netloc|newlocal|params|path|path_components|print_on|query|strict|unix_path|url|vms_path)$/
+ ],
+ 'URI::WithBase' => [
+ qr/^(?:can|clone|eq|new_abs)$/
+ ],
+ 'URI::_punycode' => [
+ qr/^(?:adapt|code_point|digit_value|min)$/
+ ],
+ 'URI::_query' => [
+ qr/^(?:equery|query|query_form|query_form_hash|query_keywords|query_param|query_param_append|query_param_delete)$/
+ ],
+ 'URI::_segment' => [
+ qr/^(?:new)$/
+ ],
+ 'URI::_userpass' => [
+ qr/^(?:password|user)$/
+ ],
+ 'URI::file' => [
+ qr/^(?:os_class)$/
+ ],
+ 'URI::file::Base' => [
+ qr/^(?:dir|file|new)$/
+ ],
+ 'URI::file::FAT' => [
+ qr/^(?:fix_path)$/
+ ],
+ 'URI::file::Mac' => [
+ qr/^(?:dir|file)$/
+ ],
+ 'URI::file::OS2' => [
+ qr/^(?:file)$/
+ ],
+ 'URI::file::Unix' => [
+ qr/^(?:file)$/
+ ],
+ 'URI::file::Win32' => [
+ qr/^(?:file|fix_path)$/
+ ],
+ 'URI::ftp' => [
+ qr/^(?:password|user)$/
+ ],
+ 'URI::gopher' => [
+ qr/^(?:gopher_type|gtype|search|selector|string)$/
+ ],
+ 'URI::ldapi' => [
+ qr/^(?:un_path)$/
+ ],
+ 'URI::mailto' => [
+ qr/^(?:headers|to)$/
+ ],
+ 'URI::news' => [
+ qr/^(?:group|message)$/
+ ],
+ 'URI::pop' => [
+ qr/^(?:auth|user)$/
+ ],
+ 'URI::sip' => [
+ qr/^(?:params|params_form)$/
+ ],
+ 'URI::urn' => [
+ qr/^(?:nid|nss)$/
+ ]
+ );
+
+my @also_private;
+
+for my $module ( sort @modules ) {
+ pod_coverage_ok(
+ $module,
+ {
+ coverage_class => 'Pod::Coverage::TrustPod',
+ also_private => \@also_private,
+ trustme => $trustme{$module} || [],
+ },
+ "pod coverage for $module"
+ );
+}
+
+done_testing();
--- /dev/null
+use strict;
+use warnings;
+use Test::More;
+
+# generated by Dist::Zilla::Plugin::Test::PodSpelling 2.007005
+use Test::Spelling 0.12;
+use Pod::Wordlist;
+
+set_spell_cmd('aspell list');
+add_stopwords(<DATA>);
+all_pod_files_spelling_ok( qw( bin lib ) );
+__DATA__
+Aas
+Adam
+Alders
+Alex
+Base
+Berners
+Bonaccorso
+Brendan
+Byrd
+Chase
+David
+Dubois
+Escape
+Etheridge
+FAT
+Fredric
+Förtsch
+Gisle
+Herzog
+Heuristic
+Honma
+IDNA
+IRI
+ISBNs
+Ishigaki
+Jan
+John
+Kaitlyn
+Kaji
+Kapranoff
+Karen
+Karr
+Kenichi
+Kent
+Koster
+Lawrence
+Mac
+Mark
+Martijn
+Masahiro
+Masinter
+Matt
+Michael
+Miller
+Miyagawa
+OIDs
+OS2
+Olaf
+OpenLDAP
+Parkhurst
+Perl
+Peter
+Piotr
+Punycode
+QNX
+QueryParam
+Rabbitson
+Rezic
+Roszatycki
+Salvatore
+Schmidt
+Schwern
+Shoichi
+Skyttä
+Slaven
+Split
+Stosberg
+TCP
+TLS
+Tatsuhiko
+Torsten
+UDP
+UNC
+URI
+URL
+Unix
+Ville
+Whitener
+Win32
+WithBase
+_foreign
+_generic
+_idna
+_ldap
+_login
+_punycode
+_query
+_segment
+_server
+_userpass
+adam
+brainbuz
+capoeirab
+carnil
+data
+davewood
+ether
+etype
+evalue
+file
+ftp
+gerard
+gisle
+gopher
+hiratara
+http
+https
+isbn
+ishigaki
+jand
+john
+kapranoff
+kentfredric
+ldap
+ldapi
+ldaps
+lib
+lowercasing
+mailto
+mark
+matthewlawrence
+miyagawa
+mms
+news
+nntp
+oid
+olaf
+piotr
+pop
+relativize
+ribasushi
+rlogin
+rsync
+rtsp
+rtspu
+schwern
+sftp
+sip
+sips
+skaji
+slaven
+snews
+ssh
+symkat
+telnet
+tn3270
+torsten
+uppercasing
+urn
+ville
--- /dev/null
+#!perl
+# This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests.
+use strict; use warnings;
+use Test::More;
+use Test::Pod 1.41;
+
+all_pod_files_ok();
--- /dev/null
+use strict;
+use warnings;
+
+use Test::More;
+
+eval 'use Test::Portability::Files';
+plan skip_all => 'Test::Portability::Files required for testing portability'
+ if $@;
+
+run_tests();
--- /dev/null
+use strict;
+use warnings;
+use Test::More;
+
+# generated by Dist::Zilla::Plugin::Test::Version 1.09
+use Test::Version;
+
+my @imports = qw( version_all_ok );
+
+my $params = {
+ is_strict => 0,
+ has_version => 1,
+ multiple => 0,
+
+};
+
+push @imports, $params
+ if version->parse( $Test::Version::VERSION ) >= version->parse('1.002');
+
+Test::Version->import(@imports);
+
+version_all_ok;
+done_testing;
--- /dev/null
+use Test::More tests => 2;
+
+note 'Checking Changes';
+my $changes_file = 'Changes';
+my $newver = '1.74';
+my $trial_token = '-TRIAL';
+my $encoding = 'UTF-8';
+
+SKIP: {
+ ok(-e $changes_file, "$changes_file file exists")
+ or skip 'Changes is missing', 1;
+
+ ok(_get_changes($newver), "$changes_file has content for $newver");
+}
+
+done_testing;
+
+sub _get_changes
+{
+ my $newver = shift;
+
+ # parse changelog to find commit message
+ open(my $fh, '<', $changes_file) or die "cannot open $changes_file: $!";
+ my $changelog = join('', <$fh>);
+ if ($encoding) {
+ require Encode;
+ $changelog = Encode::decode($encoding, $changelog, Encode::FB_CROAK());
+ }
+ close $fh;
+
+ my @content =
+ grep { /^$newver(?:$trial_token)?(?:\s+|$)/ ... /^\S/ } # from newver to un-indented
+ split /\n/, $changelog;
+ shift @content; # drop the version line
+
+ # drop unindented last line and trailing blank lines
+ pop @content while ( @content && $content[-1] =~ /^(?:\S|\s*$)/ );
+
+ # return number of non-blank lines
+ return scalar @content;
+}
+
--- /dev/null
+#!perl
+# This file was automatically generated by Dist::Zilla::Plugin::MetaTests.
+
+use Test::CPAN::Meta;
+
+meta_yaml_ok();