From 40e21ffef378982a1cebad3c22227228de14c488 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 27 Jun 2020 10:03:33 +0000 Subject: URI IMAP support We'll be supporting the IMAP URL scheme described in RFC 5092 for -watch, so add this module to fill in what the `URI' package lacks. --- t/uri_imap.t | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 t/uri_imap.t (limited to 't') diff --git a/t/uri_imap.t b/t/uri_imap.t new file mode 100644 index 00000000..a2e86a7e --- /dev/null +++ b/t/uri_imap.t @@ -0,0 +1,65 @@ +#!perl -w +# Copyright (C) 2020 all contributors +# License: AGPL-3.0+ +use strict; +use Test::More; +use PublicInbox::TestCommon; +require_mods 'URI::Split'; +use_ok 'PublicInbox::URIimap'; + +is(PublicInbox::URIimap->new('https://example.com/'), undef, + 'invalid scheme ignored'); + +my $uri = PublicInbox::URIimap->new('imaps://EXAMPLE.com/'); +is($uri->host, 'EXAMPLE.com', 'host ok'); +is($uri->canonical->host, 'example.com', 'host canonicalized'); +is($uri->canonical->as_string, 'imaps://example.com/', 'URI canonicalized'); +is($uri->port, 993, 'imaps port'); +is($uri->auth, undef); +is($uri->user, undef); + +$uri = PublicInbox::URIimap->new('imaps://foo@0/'); +is($uri->host, '0', 'numeric host'); +is($uri->user, 'foo', 'user extracted'); + +$uri = PublicInbox::URIimap->new('imap://0/INBOX.sub#frag')->canonical; +is($uri->as_string, 'imap://0/INBOX.sub', 'no fragment'); +is($uri->scheme, 'imap'); + +$uri = PublicInbox::URIimap->new('imaps://;AUTH=ANONYMOUS@0/'); +is($uri->auth, 'ANONYMOUS', 'AUTH=ANONYMOUS accepted'); + +$uri = PublicInbox::URIimap->new('imaps://bar%40example.com;AUTH=99%25@0/'); +is($uri->auth, '99%', 'decoded AUTH'); +is($uri->user, 'bar@example.com', 'decoded user'); +is($uri->mailbox, undef, 'mailbox is undef'); + +$uri = PublicInbox::URIimap->new('imaps://ipv6@[::1]'); +is($uri->host, '::1', 'IPv6 host'); +is($uri->mailbox, undef, 'mailbox is undef'); + +$uri = PublicInbox::URIimap->new('imaps://0:666/INBOX'); +is($uri->port, 666, 'port read'); +is($uri->mailbox, 'INBOX'); +$uri = PublicInbox::URIimap->new('imaps://0/INBOX.sub'); +is($uri->mailbox, 'INBOX.sub'); +is($uri->scheme, 'imaps'); + +is(PublicInbox::URIimap->new('imap://0:143/')->canonical->as_string, + 'imap://0/'); +is(PublicInbox::URIimap->new('imaps://0:993/')->canonical->as_string, + 'imaps://0/'); + +$uri = PublicInbox::URIimap->new('imap://NSA:Hunter2@0/INBOX'); +is($uri->user, 'NSA'); +is($uri->password, 'Hunter2'); + +$uri = PublicInbox::URIimap->new('imap://0/%'); +is($uri->mailbox, '%', "RFC 2192 '%' supported"); +$uri = PublicInbox::URIimap->new('imap://0/%25'); +$uri = PublicInbox::URIimap->new('imap://0/*'); +is($uri->mailbox, '*', "RFC 2192 '*' supported"); + +# TODO: support UIDVALIDITY and other params + +done_testing; -- cgit v1.2.3-24-ge0c7