blob: ee5ae1f496fc07316029ba50da0e1799fe88a12d [file] [log] [blame]
require "test_helper"
class PublicSuffixTest < Minitest::Test
def test_private_domains_enabled_by_default
domain = PublicSuffix.parse("www.example.blogspot.com")
assert_equal "blogspot.com", domain.tld
end
def test_private_domains_disable
data = File.read(PublicSuffix::List::DEFAULT_LIST_PATH)
PublicSuffix::List.default = PublicSuffix::List.parse(data, private_domains: false)
domain = PublicSuffix.parse("www.example.blogspot.com")
assert_equal "com", domain.tld
ensure
PublicSuffix::List.default = nil
end
def test_self_parse_a_domain_with_tld_and_sld
domain = PublicSuffix.parse("example.com")
assert_instance_of PublicSuffix::Domain, domain
assert_equal "com", domain.tld
assert_equal "example", domain.sld
assert_nil domain.trd
domain = PublicSuffix.parse("example.co.uk")
assert_instance_of PublicSuffix::Domain, domain
assert_equal "co.uk", domain.tld
assert_equal "example", domain.sld
assert_nil domain.trd
end
def test_self_parse_a_domain_with_tld_and_sld_and_trd
domain = PublicSuffix.parse("alpha.example.com")
assert_instance_of PublicSuffix::Domain, domain
assert_equal "com", domain.tld
assert_equal "example", domain.sld
assert_equal "alpha", domain.trd
domain = PublicSuffix.parse("alpha.example.co.uk")
assert_instance_of PublicSuffix::Domain, domain
assert_equal "co.uk", domain.tld
assert_equal "example", domain.sld
assert_equal "alpha", domain.trd
end
def test_self_parse_a_domain_with_tld_and_sld_and_4rd
domain = PublicSuffix.parse("one.two.example.com")
assert_instance_of PublicSuffix::Domain, domain
assert_equal "com", domain.tld
assert_equal "example", domain.sld
assert_equal "one.two", domain.trd
domain = PublicSuffix.parse("one.two.example.co.uk")
assert_instance_of PublicSuffix::Domain, domain
assert_equal "co.uk", domain.tld
assert_equal "example", domain.sld
assert_equal "one.two", domain.trd
end
def test_self_parse_name_fqdn
domain = PublicSuffix.parse("www.example.com.")
assert_instance_of PublicSuffix::Domain, domain
assert_equal "com", domain.tld
assert_equal "example", domain.sld
assert_equal "www", domain.trd
end
def test_self_parse_with_custom_list
list = PublicSuffix::List.new
list << PublicSuffix::Rule.factory("test")
domain = PublicSuffix.parse("www.example.test", list: list)
assert_instance_of PublicSuffix::Domain, domain
assert_equal "test", domain.tld
assert_equal "example", domain.sld
assert_equal "www", domain.trd
end
def test_self_parse_with_notlisted_name
domain = PublicSuffix.parse("example.tldnotlisted")
assert_instance_of PublicSuffix::Domain, domain
assert_equal "tldnotlisted", domain.tld
assert_equal "example", domain.sld
assert_nil domain.trd
end
def test_self_parse_with_unallowed_domain
error = assert_raises(PublicSuffix::DomainNotAllowed) { PublicSuffix.parse("example.ke") }
assert_match(/example\.ke/, error.message)
end
def test_self_parse_with_uri
error = assert_raises(PublicSuffix::DomainInvalid) { PublicSuffix.parse("http://google.com") }
assert_match(%r{http://google\.com}, error.message)
end
def test_self_valid
assert PublicSuffix.valid?("google.com")
assert PublicSuffix.valid?("www.google.com")
assert PublicSuffix.valid?("google.co.uk")
assert PublicSuffix.valid?("www.google.co.uk")
end
def test_self_valid_with_notlisted_name
assert PublicSuffix.valid?("google.tldnotlisted")
assert PublicSuffix.valid?("www.google.tldnotlisted")
end
# def test_self_valid_with_fully_qualified_domain_name
# assert PublicSuffix.valid?("google.com.")
# assert PublicSuffix.valid?("google.co.uk.")
# assert !PublicSuffix.valid?("google.tldnotlisted.")
# end
def test_self_domain
assert_equal "google.com", PublicSuffix.domain("google.com")
assert_equal "google.com", PublicSuffix.domain("www.google.com")
assert_equal "google.co.uk", PublicSuffix.domain("google.co.uk")
assert_equal "google.co.uk", PublicSuffix.domain("www.google.co.uk")
end
def test_self_domain_with_notlisted_name
assert_equal "example.tldnotlisted", PublicSuffix.domain("example.tldnotlisted")
end
def test_self_domain_with_unallowed_name
assert_nil PublicSuffix.domain("example.ke")
end
def test_self_domain_with_blank_sld
assert_nil PublicSuffix.domain("com")
assert_nil PublicSuffix.domain(".com")
end
def test_self_normalize
[
["com", "com"],
["example.com", "example.com"],
["www.example.com", "www.example.com"],
["example.com.", "example.com"], # strip FQDN
[" example.com ", "example.com"], # strip spaces
["Example.COM", "example.com"], # downcase
].each do |input, output|
assert_equal output, PublicSuffix.normalize(input)
end
end
def test_normalize_blank
[
nil,
"",
" ",
].each do |input, _|
error = PublicSuffix.normalize(input)
assert_instance_of PublicSuffix::DomainInvalid, error
assert_equal "Name is blank", error.message
end
end
def test_normalize_scheme
[
"https://google.com",
].each do |input, _|
error = PublicSuffix.normalize(input)
assert_instance_of PublicSuffix::DomainInvalid, error
assert_match(/scheme/, error.message)
end
end
def test_normalize_leading_dot
[
".google.com",
].each do |input, _|
error = PublicSuffix.normalize(input)
assert_instance_of PublicSuffix::DomainInvalid, error
assert_match "Name starts with a dot", error.message
end
end
end