UNPKG

art-standard-lib

Version:

The Standard Library for JavaScript that aught to be.

178 lines (153 loc) • 9.25 kB
{ log w findUrlOrigin, emailRegexp, domainRegexp, urlProtocolRegexp, urlPathRegexp, urlQueryRegexp, compactFlatten, urlRegexp, peek, arrayWithoutLast findUrlWithOptionalProtocolRegExp findUrlRegExp array findEmailRegExp findAllUrlsWithOptionalProtocolRegExp } = Neptune.Art.StandardLib popNullish = (a) -> a = arrayWithoutLast a while !peek(a)? a module.exports = suite: -> emails = [ "shanebdavis@gmail.com" "shane😇davis@gmail.com" "shanebdavis@www.gmail.com" "shane.davis@www.gmail.com" '"shane davis"@www.gmail.com' "shane\\@davis@www.gmail.com" "user+mailbox@example.com" "customer/department=shipping@example.com" "$A12345@example.com" "!def!xyz%abc@example.com" "_somename@example.com" "a.collewijn-haan@quicknet.nl" "a3col@icloud.com" ] array emails, (email)-> test "emailRegexp #{email}", -> assert.match email, emailRegexp [first] = emailRegexp.exec email assert.eq first, email test "emailRegexp", -> assert.eq "shanebdavis@gmail.com" .match(emailRegexp), ["shanebdavis@gmail.com", "shanebdavis", "gmail.com"] assert.eq "shanebdavis@www.gmail.com" .match(emailRegexp), ["shanebdavis@www.gmail.com", "shanebdavis", "www.gmail.com"] test "findEmailRegExp success: <a@b.c>", -> assert.eq "<a@b.c>" .match(findEmailRegExp), ["a@b.c", "a", "b.c"] test "findEmailRegExp success: <a@b.c.d.e>", -> assert.eq "<a@b.c.d.e>" .match(findEmailRegExp), ["a@b.c.d.e", "a", "b.c.d.e"] test "findEmailRegExp success: <shanebdavis@gmail.com>", -> assert.eq "<shanebdavis@gmail.com>" .match(findEmailRegExp), ["shanebdavis@gmail.com", "shanebdavis", "gmail.com"] test "findEmailRegExp 'foo@bar.com.'", -> assert.eq( 'foo@bar.com.'.match findEmailRegExp ["foo@bar.com", "foo", "bar.com"] ) for badEmail in w " <shanebdavis@@gmail.com> <shanebdavis@.gmail.com> <shanebdavis@gmail> <shanebdavis@.gmail> <shanebdavis@gmail.> " test "findEmailRegExp fail: #{badEmail}", -> assert.eq badEmail.match(findEmailRegExp), null test "domainRegexp successes", -> assert.eq "gmail.com".match(domainRegexp), ["gmail.com"] assert.eq "gmail0.com".match(domainRegexp), ["gmail0.com"] assert.eq "gmail.evilplanet".match(domainRegexp), ["gmail.evilplanet"] assert.eq "g-mail.com".match(domainRegexp), ["g-mail.com"] assert.eq "g.mail.com".match(domainRegexp), ["g.mail.com"] assert.eq "g.m-ail.com".match(domainRegexp), ["g.m-ail.com"] test "localhost valid", -> assert.eq !!"localhost".match(domainRegexp), true test "domainRegexp failures", -> assert.eq !!".com".match(domainRegexp), false test "findUrlOrigin", -> assert.eq "file://".match(findUrlOrigin), ["file://", "file", "://", undefined, undefined, undefined] assert.eq "http://foo.com".match(findUrlOrigin), ["http://foo.com", "http", "://", "foo.com", undefined, undefined] assert.eq "http://www.foo.com".match(findUrlOrigin), ["http://www.foo.com", "http", "://", "www.foo.com", undefined, undefined] assert.eq "https://foo.com".match(findUrlOrigin), ["https://foo.com", "https", "://", "foo.com", undefined, undefined] assert.eq "https://foo.com:8080".match(findUrlOrigin), ["https://foo.com:8080","https", "://", "foo.com", ":", "8080"] test "urlProtocolRegexp successes", -> assert.eq "https://".match(urlProtocolRegexp), ["https://", "https", "://"] assert.eq "http://".match(urlProtocolRegexp), ["http://", "http", "://"] assert.eq "HTTP://".match(urlProtocolRegexp), ["HTTP://", "HTTP", "://"] assert.eq "ftp://".match(urlProtocolRegexp), ["ftp://", "ftp", "://"] test "urlProtocolRegexp failures", -> assert.eq !!"http".match(urlProtocolRegexp), false assert.eq "http0://".match(urlProtocolRegexp), ["http0://", "http0", "://"] assert.eq !!"http:/".match(urlProtocolRegexp), false assert.eq !!"://".match(urlProtocolRegexp), false test "urlPathRegexp successes", -> assert.eq "/".match(urlPathRegexp), ["/"] assert.eq "//".match(urlPathRegexp), ["//"] assert.eq "/foo".match(urlPathRegexp), ["/foo"] assert.eq "/foo0".match(urlPathRegexp), ["/foo0"] assert.eq "/foo/bar".match(urlPathRegexp), ["/foo/bar"] assert.eq "/foo_bar".match(urlPathRegexp), ["/foo_bar"] assert.eq "/foo-Bar".match(urlPathRegexp), ["/foo-Bar"] assert.eq "/foo%20Bar".match(urlPathRegexp), ["/foo%20Bar"] assert.eq "/foo+Bar".match(urlPathRegexp), ["/foo+Bar"] test "urlPathRegexp failures", -> assert.eq !!"/foo Bar".match(urlPathRegexp), false assert.eq !!"/foo%2zBar".match(urlPathRegexp), false assert.eq (a = "/-._~!$&'()*+,;=:@").match(urlPathRegexp), [a] assert.eq (a = "/abcdefghijklmnopqrstuvwxyz").match(urlPathRegexp), [a] assert.eq (a = "/ABCDEFGHIJKLMNOPQRSTUVWXYZ").match(urlPathRegexp), [a] assert.eq (a = "/0123456789").match(urlPathRegexp), [a] test "urlQueryRegexp successes", -> assert.eq "foo".match(urlQueryRegexp), ["foo"] assert.eq "foo0".match(urlQueryRegexp), ["foo0"] assert.eq "foo=bar".match(urlQueryRegexp), ["foo=bar"] assert.eq "foo-bar".match(urlQueryRegexp), ["foo-bar"] assert.eq "foo+bar".match(urlQueryRegexp), ["foo+bar"] assert.eq "foo_bar".match(urlQueryRegexp), ["foo_bar"] assert.eq "foo%20bar".match(urlQueryRegexp), ["foo%20bar"] test "urlRegexp successes", -> assert.eq popNullish("http://foo.com" .match urlRegexp), ["http://foo.com", "http", "://", "foo.com"] assert.eq popNullish("http://foo.com#hi" .match urlRegexp), ["http://foo.com#hi", "http", "://", "foo.com", undefined, undefined, undefined, undefined, undefined, "#", "hi"] assert.eq popNullish("http://foo.com/here" .match urlRegexp), ["http://foo.com/here", "http", "://", "foo.com", undefined, undefined, "/here"] assert.eq popNullish("http://foo.com?this=that" .match urlRegexp), ["http://foo.com?this=that", "http", "://", "foo.com", undefined, undefined, undefined, "?", "this=that"] assert.eq popNullish("http://foo.com?this=that#hi" .match urlRegexp), ["http://foo.com?this=that#hi", "http", "://", "foo.com", undefined, undefined, undefined, "?", "this=that", "#", "hi"] assert.eq popNullish("http://foo.com?" .match urlRegexp), ["http://foo.com?", "http", "://", "foo.com", undefined, undefined, undefined, "?"] assert.eq popNullish("http://foo.com/?this=that" .match urlRegexp), ["http://foo.com/?this=that", "http", "://", "foo.com", undefined, undefined, "/", "?", "this=that"] assert.eq popNullish("http://foo.com/here?this=that" .match urlRegexp), ["http://foo.com/here?this=that", "http", "://", "foo.com", undefined, undefined, "/here", "?", "this=that"] assert.eq popNullish("http://foo.com:9000/here?this=that" .match urlRegexp), ["http://foo.com:9000/here?this=that", "http", "://", "foo.com", ":", "9000", "/here", "?", "this=that"] test "urlRegexp matches return all matched characters", -> tester = (url) -> assert.eq url, compactFlatten((url.match urlRegexp).slice(1)).join '' tester "http://foo.com" tester "http://foo.com#hi" tester "http://foo.com/here" tester "http://foo.com?this=that" tester "http://foo.com?this=that#hi" tester "http://foo.com?" tester "http://foo.com/?this=that" tester "http://foo.com/here?this=that" tester "http://foo.com:9000/here?this=that" test "regressions", -> assert.eq "http://localhost:1337/localhost:9200/imikimi_oz_dev".match(urlRegexp), [ "http://localhost:1337/localhost:9200/imikimi_oz_dev" "http" "://" "localhost" ":" "1337" "/localhost:9200/imikimi_oz_dev" undefined undefined undefined undefined ] test "findUrlRegExp", -> assert.eq findUrlRegExp.exec("https://en.wikipedia.org/wiki/Varieties_of_criticism#Constructive_criticism")[0], "https://en.wikipedia.org/wiki/Varieties_of_criticism#Constructive_criticism" test "findUrlWithOptionalProtocolRegExp", -> assert.eq findUrlWithOptionalProtocolRegExp.exec("hi there.com")[0], 'there.com' assert.eq findUrlWithOptionalProtocolRegExp.exec("hi there.com/bar")[0], 'there.com/bar' assert.eq findUrlWithOptionalProtocolRegExp.exec("hi http://there.com")[0], 'http://there.com' assert.eq findUrlWithOptionalProtocolRegExp.exec("hi https://en.wikipedia.org/wiki/Varieties_of_criticism#Constructive_criticism")[0], 'https://en.wikipedia.org/wiki/Varieties_of_criticism#Constructive_criticism' test "findAllUrlsWithOptionalProtocolRegExp", -> assert.eq findAllUrlsWithOptionalProtocolRegExp.exec("hi https://en.wikipedia.org/wiki/Varieties_of_criticism#Constructive_criticism")[0], 'https://en.wikipedia.org/wiki/Varieties_of_criticism#Constructive_criticism'