blob: 9716122ed0e1ee354268f440f6ed25e72d56a71e [file] [log] [blame]
# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""This file provides unit tests for Validate functions."""
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
import unittest
from framework import validate
class ValidateUnitTest(unittest.TestCase):
"""Set of unit tests for validation functions."""
GOOD_EMAIL_ADDRESSES = [
'user@example.com',
'user@e.com',
'user+tag@example.com',
'u.ser@example.com',
'us.er@example.com',
'u.s.e.r@example.com',
'user@ex-ample.com',
'user@ex.ample.com',
'user@e.x.ample.com',
'user@exampl.e.com',
'user@e-x-ample.com',
'user@e-x-a-m-p-l-e.com',
'user@e-x.am-ple.com',
'user@e--xample.com',
'user@example.c',
'user@example.comcomcomc',
'user@example.co-m',
'user@example.c0m',
'very-long-email-address@very-long-domain.iam.abcdefghijklmnopqrstuvwxyz',
]
BAD_EMAIL_ADDRESSES = [
' leading.whitespace@example.com',
'trailing.whitespace@example.com ',
'(paren.quoted@example.com)',
'<angle.quoted@example.com>',
'trailing.@example.com',
'trailing.dot.@example.com',
'.leading@example.com',
'.leading.dot@example.com',
'user@example.com.',
'us..er@example.com',
'user@ex..ample.com',
'user@example..com',
'user@ex-.ample.com',
'user@-example.com',
'user@.example.com',
'user@example-.com',
'user@example',
'user@example.',
'user@exa_mple.com',
'user@exa-_mple.com',
]
def testIsValidEmail(self):
"""Tests the Email validator class."""
for email in self.GOOD_EMAIL_ADDRESSES:
self.assertTrue(validate.IsValidEmail(email), msg='Rejected:%r' % email)
for email in self.BAD_EMAIL_ADDRESSES:
self.assertFalse(validate.IsValidEmail(email), msg='Accepted:%r' % email)
def testIsValidMailTo(self):
for email in self.GOOD_EMAIL_ADDRESSES:
self.assertTrue(
validate.IsValidMailTo('mailto:' + email),
msg='Rejected:%r' % ('mailto:' + email))
for email in self.BAD_EMAIL_ADDRESSES:
self.assertFalse(
validate.IsValidMailTo('mailto:' + email),
msg='Accepted:%r' % ('mailto:' + email))
GOOD_URLS = [
'http://google.com',
'http://maps.google.com/',
'https://secure.protocol.com',
'https://dash-domain.com',
'http://www.google.com/search?q=foo&hl=en',
'https://a.very.long.domain.name.net/with/a/long/path/inf0/too',
'http://funny.ws/',
'http://we.love.anchors.info/page.html#anchor',
'http://redundant-slashes.com//in/path//info',
'http://trailingslashe.com/in/path/info/',
'http://domain.with.port.com:8080',
'http://domain.with.port.com:8080/path/info',
'ftp://ftp.gnu.org',
'ftp://some.server.some.place.com',
'http://b/123456',
'http://cl/123456/',
]
BAD_URLS = [
' http://leading.whitespace.com',
'http://trailing.domain.whitespace.com ',
'http://trailing.whitespace.com/after/path/info ',
'http://underscore_domain.com/',
'http://space in domain.com',
'http://user@example.com', # standard, but we purposely don't accept it.
'http://user:pass@ex.com', # standard, but we purposely don't accept it.
'http://:password@ex.com', # standard, but we purposely don't accept it.
'missing-http.com',
'http:missing-slashes.com',
'http:/only-one-slash.com',
'http://trailing.dot.',
'mailto:bad.scheme',
'javascript:attempt-to-inject',
'http://short-with-no-final-slash',
'http:///',
'http:///no.host.name',
'http://:8080/',
'http://badport.com:808a0/ ',
]
def testURL(self):
for url in self.GOOD_URLS:
self.assertTrue(validate.IsValidURL(url), msg='Rejected:%r' % url)
for url in self.BAD_URLS:
self.assertFalse(validate.IsValidURL(url), msg='Accepted:%r' % url)