1f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved. 2f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 3f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)# found in the LICENSE file. 4f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 5f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)# This is based on code from: 6f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)# https://chromium.googlesource.com/chromium/tools/build/+/master/scripts/tools/blink_roller/auto_roll_test.py 7f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)# Ideally we should share code between these. 8f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 9f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 10f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)from webkitpy.common.system.outputcapture import OutputCaptureTestCaseBase 11f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)import sheriff_calendar as calendar 12f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 13f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 14f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)class SheriffCalendarTest(OutputCaptureTestCaseBase): 15f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) def test_complete_email(self): 16f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) expected_emails = ['foo@chromium.org', 'bar@google.com', 'baz@chromium.org'] 17f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) names = ['foo', 'bar@google.com', 'baz'] 18f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertEqual(map(calendar._complete_email, names), expected_emails) 19f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 20f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) def test_emails(self): 21f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) expected_emails = ['foo@bar.com', 'baz@baz.com'] 22f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) calendar._emails_from_url = lambda urls: expected_emails 23f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertEqual(calendar.current_gardener_emails(), expected_emails) 24f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 25f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) def _assert_parse(self, js_string, expected_emails): 26f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertEqual(calendar._names_from_sheriff_js(js_string), expected_emails) 27f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 28f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) def test_names_from_sheriff_js(self): 29f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self._assert_parse('document.write(\'none (channel is sheriff)\')', []) 30f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self._assert_parse('document.write(\'foo, bar\')', ['foo', 'bar']) 31f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 32f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) def test_email_regexp(self): 33f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertTrue(calendar._email_is_valid('somebody@example.com')) 34f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertTrue(calendar._email_is_valid('somebody@example.domain.com')) 35f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertTrue(calendar._email_is_valid('somebody@example-domain.com')) 36f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertTrue(calendar._email_is_valid('some.body@example.com')) 37f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertTrue(calendar._email_is_valid('some_body@example.com')) 38f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertTrue(calendar._email_is_valid('some+body@example.com')) 39f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertTrue(calendar._email_is_valid('some+body@com')) 40f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertTrue(calendar._email_is_valid('some/body@example.com')) 41f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) # These are valid according to the standard, but not supported here. 42f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertFalse(calendar._email_is_valid('some~body@example.com')) 43f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertFalse(calendar._email_is_valid('some!body@example.com')) 44f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertFalse(calendar._email_is_valid('some?body@example.com')) 45f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertFalse(calendar._email_is_valid('some" "body@example.com')) 46f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertFalse(calendar._email_is_valid('"{somebody}"@example.com')) 47f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) # Bogus. 48f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertFalse(calendar._email_is_valid('rm -rf /#@example.com')) 49f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertFalse(calendar._email_is_valid('some body@example.com')) 50f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertFalse(calendar._email_is_valid('[some body]@example.com')) 51f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 52f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) def test_filter_emails(self): 53f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) input_emails = ['foo@bar.com', 'baz@baz.com', 'bogus email @ !!!'] 54f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) expected_emails = ['foo@bar.com', 'baz@baz.com'] 55f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertEquals(calendar._filter_emails(input_emails), expected_emails) 56f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertStdout('WARNING: Not including bogus email @ !!! (invalid email address)\n') 57