130 lines
3.8 KiB
Ruby
130 lines
3.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "test_helper"
|
|
|
|
class AcceptanceTest < Minitest::Test
|
|
|
|
VALID_CASES = [
|
|
["example.com", "example.com", [nil, "example", "com"]],
|
|
["foo.example.com", "example.com", ["foo", "example", "com"]],
|
|
|
|
["verybritish.co.uk", "verybritish.co.uk", [nil, "verybritish", "co.uk"]],
|
|
["foo.verybritish.co.uk", "verybritish.co.uk", ["foo", "verybritish", "co.uk"]],
|
|
|
|
["parliament.uk", "parliament.uk", [nil, "parliament", "uk"]],
|
|
["foo.parliament.uk", "parliament.uk", ["foo", "parliament", "uk"]],
|
|
].freeze
|
|
|
|
def test_valid
|
|
VALID_CASES.each do |input, domain, results|
|
|
parsed = PublicSuffix.parse(input)
|
|
trd, sld, tld = results
|
|
assert_equal tld, parsed.tld, "Invalid tld for `#{name}`"
|
|
assert_equal sld, parsed.sld, "Invalid sld for `#{name}`"
|
|
if trd.nil?
|
|
assert_nil parsed.trd, "Invalid trd for `#{name}`"
|
|
else
|
|
assert_equal trd, parsed.trd, "Invalid trd for `#{name}`"
|
|
end
|
|
|
|
assert_equal domain, PublicSuffix.domain(input)
|
|
assert PublicSuffix.valid?(input)
|
|
end
|
|
end
|
|
|
|
|
|
INVALID_CASES = [
|
|
["nic.bd", PublicSuffix::DomainNotAllowed],
|
|
[nil, PublicSuffix::DomainInvalid],
|
|
["", PublicSuffix::DomainInvalid],
|
|
[" ", PublicSuffix::DomainInvalid],
|
|
].freeze
|
|
|
|
def test_invalid
|
|
INVALID_CASES.each do |(name, error)|
|
|
assert_raises(error) { PublicSuffix.parse(name) }
|
|
assert !PublicSuffix.valid?(name)
|
|
end
|
|
end
|
|
|
|
|
|
REJECTED_CASES = [
|
|
["www. .com", true],
|
|
["foo.co..uk", true],
|
|
["goo,gle.com", true],
|
|
["-google.com", true],
|
|
["google-.com", true],
|
|
|
|
# This case was covered in GH-15.
|
|
# I decided to cover this case because it's not easily reproducible with URI.parse
|
|
# and can lead to several false positives.
|
|
["http://google.com", false],
|
|
].freeze
|
|
|
|
def test_rejected
|
|
REJECTED_CASES.each do |name, expected|
|
|
assert_equal expected, PublicSuffix.valid?(name),
|
|
"Expected %s to be %s" % [name.inspect, expected.inspect]
|
|
assert !valid_domain?(name),
|
|
"#{name} expected to be invalid"
|
|
end
|
|
end
|
|
|
|
|
|
CASE_CASES = [
|
|
["Www.google.com", %w( www google com )],
|
|
["www.Google.com", %w( www google com )],
|
|
["www.google.Com", %w( www google com )],
|
|
].freeze
|
|
|
|
def test_ignore_case
|
|
CASE_CASES.each do |name, results|
|
|
domain = PublicSuffix.parse(name)
|
|
trd, sld, tld = results
|
|
assert_equal tld, domain.tld, "Invalid tld for `#{name}'"
|
|
assert_equal sld, domain.sld, "Invalid sld for `#{name}'"
|
|
assert_equal trd, domain.trd, "Invalid trd for `#{name}'"
|
|
assert PublicSuffix.valid?(name)
|
|
end
|
|
end
|
|
|
|
|
|
INCLUDE_PRIVATE_CASES = [
|
|
["blogspot.com", true, "blogspot.com"],
|
|
["blogspot.com", false, nil],
|
|
["subdomain.blogspot.com", true, "blogspot.com"],
|
|
["subdomain.blogspot.com", false, "subdomain.blogspot.com"],
|
|
].freeze
|
|
|
|
def test_ignore_private
|
|
# test domain and parse
|
|
INCLUDE_PRIVATE_CASES.each do |given, ignore_private, expected|
|
|
if expected.nil?
|
|
assert_nil PublicSuffix.domain(given, ignore_private: ignore_private)
|
|
else
|
|
assert_equal expected, PublicSuffix.domain(given, ignore_private: ignore_private)
|
|
end
|
|
end
|
|
# test valid?
|
|
INCLUDE_PRIVATE_CASES.each do |given, ignore_private, expected|
|
|
assert_equal !expected.nil?, PublicSuffix.valid?(given, ignore_private: ignore_private)
|
|
end
|
|
end
|
|
|
|
|
|
def valid_uri?(name)
|
|
uri = URI.parse(name)
|
|
!uri.host.nil?
|
|
rescue
|
|
false
|
|
end
|
|
|
|
def valid_domain?(name)
|
|
uri = URI.parse(name)
|
|
!uri.host.nil? && uri.scheme.nil?
|
|
rescue
|
|
false
|
|
end
|
|
|
|
end
|