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