require 'test/unit' require 'url_regex' class UrlRegexTest < Test::Unit::TestCase def assert_url(string) assert_equal(true, UrlRegex.is_url(string)) end def assert_not_url(string) assert_equal(false, UrlRegex.is_url(string)) end def assert_public_url(string) assert_equal(true, UrlRegex.is_public_url(string)) end def assert_private_url(string) assert_equal(true, UrlRegex.is_private_url(string)) end def test_generic_error_input assert_not_url("") assert_not_url(nil) end def test_valid_schemes assert_url("http://www.ri.fi") assert_url("https://www.ri.fi") assert_url("ftp://www.ri.fi") end def test_invalid_schemes assert_not_url("foo://www.ri.fi") end def test_invalid_scheme_syntax assert_not_url("://www.ri.fi") assert_not_url(":/www.ri.fi") assert_not_url("//www.ri.fi") assert_not_url(":www.ri.fi") assert_not_url("http:www.ri.fi") assert_not_url("http:/www.ri.fi") assert_not_url("http//www.ri.fi") end def test_valid_domains assert_url("http://www.ri.fi") assert_url("http://ri.fi") assert_url("http://foo.bar.ri.fi") assert_url("http://www.bar-fly.com") assert_url("http://user@www.server.com") assert_url("http://user:pass@www.server.com") assert_url("http://user:@www.server.com") end def test_invalid_domains assert_not_url("http://") assert_not_url("http://www.~.fi") assert_not_url("http://www.f oo.fi") assert_not_url("http://www.bar&fly.fi") assert_not_url("http://www.-.com") assert_not_url("http://www.bar-.com") assert_not_url("http://www.-fly.com") assert_not_url("http://user::@www.server.com") assert_not_url("http://user:pass:@www.server.com") assert_not_url("http://:pass@www.server.com") assert_not_url("http://:@www.server.com") assert_not_url("http://@www.server.com") assert_not_url("http://:www.server.com") end def test_valid_ports assert_url("http://www.ri.fi:1") assert_url("http://www.ri.fi:65000") assert_url("http://www.ri.fi:80/") end def test_invalid_ports assert_not_url("http://www.ri.fi:0") assert_not_url("http://www.ri.fi:123456") end def test_valid_absolute_paths assert_url("http://www.ri.fi/") assert_url("http://www.ri.fi/uutiset") assert_url("http://www.ri.fi/uutiset/") assert_url("http://www.ri.fi/uutiset/2005") assert_url("http://www.ri.fi/uutiset/2005/") assert_url("http://www.ri.fi/index.html") assert_url("http://www.ri.fi/uutiset/index.html") assert_url("http://www.ri.fi/funky.dot/path") assert_url("http://www.ri.fi/funky.dot/path/") assert_url("http://www.ri.fi/~lkoskela") end def test_invalid_absolute_paths assert_not_url("http://www.ri.fi/+") assert_not_url("http://www.ri.fi//") assert_not_url("http://www.ri.fi/ /") assert_not_url("http://www.ri.fi/+/") end def test_valid_queries assert_url("http://www.ri.fi/?") assert_url("http://www.ri.fi/foo.html?") assert_url("http://www.ri.fi/foo.html?param") assert_url("http://www.ri.fi/foo.html?param=value") assert_url("http://www.ri.fi/foo/?param") assert_url("http://www.ri.fi/foo/?param=value") assert_url("http://www.ri.fi/foo/bar?param") assert_url("http://www.ri.fi/foo/bar?param=value") assert_url("http://www.ri.fi/?param") assert_url("http://www.ri.fi/?param=value") assert_url("http://www.ri.fi/?param¶m=value") assert_url("http://www.ri.fi/?param=value¶m=value") assert_url("http://www.ri.fi/?param=a+b") assert_url("http://www.ri.fi/?param=%2F+%20") assert_url("http://www.ri.fi/?param=foo&bar") assert_url("http://www.ri.fi/?param=foo&amp;bar") assert_url("http://www.ri.fi/?foo=(bar)") assert_url("http://www.ri.fi/?foo=.") assert_url("http://www.ri.fi/?foo=!") assert_url("http://www.ri.fi/?foo=_") assert_url("http://www.ri.fi/?foo='") assert_url("http://www.ri.fi/?foo=*") assert_url("http://www.ri.fi/?foo=;") assert_url("http://www.ri.fi/?foo=,") assert_url("http://www.ri.fi/?foo=@") end def test_invalid_queries assert_not_url("http://www.ri.fi/?param=foo and bar") assert_not_url("http://www.ri.fi/?invalid=%hex") assert_not_url("http://www.ri.fi/?invalidhex=%x0") end def test_public_versus_private_domains assert_public_url("http://www.ri.fi") assert_private_url("http://myserver") assert_private_url("http://localhost.localdomain") end def test_find_url assert_equal(nil, UrlRegex.find_url("abc")) assert_equal([1, 17], UrlRegex.find_url("xhttp://www.ri.fiy")) end def test_extract_url assert_equal(nil, UrlRegex.extract_url("abc")) assert_equal("http://www.ri.fi", UrlRegex.extract_url("xhttp://www.ri.fiy contains the fi TLD")) assert_equal("http://www.ri.xxx", UrlRegex.extract_url("see, http://www.ri.xxx is a URL")) end def test_extract_multiple_urls assert_equal("http://first", UrlRegex.extract_url("http://first http://second http://third")) assert_equal(["http://first", "http://second", "http://third"], UrlRegex.extract_urls("http://first http://second http://third")) end def test_public_url assert_public_url("http://www.bbc.co.uk") end def test_private_url assert_private_url("http://www.bbc.nosuchtld") end def test_contains_url assert_equal(true, UrlRegex.contains_url("see, http://www.ri.fi is a URL")) end end