blob: 556589120859056f34740ae27c3834be9f21b9df [file] [log] [blame]
#!/usr/bin/env python
# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unit tests for watchlists.py."""
# pylint: disable=E1103,no-value-for-parameter,protected-access
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from testing_support import super_mox
import watchlists
class WatchlistsTest(super_mox.SuperMoxTestBase):
def setUp(self):
super_mox.SuperMoxTestBase.setUp(self)
self.mox.StubOutWithMock(watchlists.Watchlists, '_HasWatchlistsFile')
self.mox.StubOutWithMock(watchlists.Watchlists, '_ContentsOfWatchlistsFile')
self.mox.StubOutWithMock(watchlists.logging, 'error')
def testMissingWatchlistsFileOK(self):
"""Test that we act gracefully if WATCHLISTS file is missing."""
watchlists.Watchlists._HasWatchlistsFile().AndReturn(False)
self.mox.ReplayAll()
wl = watchlists.Watchlists('/some/random/path')
self.assertEqual(wl.GetWatchersForPaths(['some_path']), [])
def testGarbledWatchlistsFileOK(self):
"""Test that we act gracefully if WATCHLISTS file is garbled."""
contents = 'some garbled and unwanted text'
watchlists.Watchlists._HasWatchlistsFile().AndReturn(True)
watchlists.Watchlists._ContentsOfWatchlistsFile().AndReturn(contents)
watchlists.logging.error(super_mox.mox.IgnoreArg())
self.mox.ReplayAll()
wl = watchlists.Watchlists('/a/path')
self.assertEqual(wl.GetWatchersForPaths(['some_path']), [])
def testNoWatchers(self):
contents = \
"""{
'WATCHLIST_DEFINITIONS': {
'a_module': {
'filepath': 'a_module',
},
},
'WATCHLISTS': {
'a_module': [],
},
} """
watchlists.Watchlists._HasWatchlistsFile().AndReturn(True)
watchlists.Watchlists._ContentsOfWatchlistsFile().AndReturn(contents)
self.mox.ReplayAll()
wl = watchlists.Watchlists('/a/path')
self.assertEqual(wl.GetWatchersForPaths(['a_module']), [])
def testValidWatcher(self):
watchers = ['abc@def.com', 'x1@xyz.org']
contents = \
"""{
'WATCHLIST_DEFINITIONS': {
'a_module': {
'filepath': 'a_module',
},
},
'WATCHLISTS': {
'a_module': %s,
},
} """ % watchers
watchlists.Watchlists._HasWatchlistsFile().AndReturn(True)
watchlists.Watchlists._ContentsOfWatchlistsFile().AndReturn(contents)
self.mox.ReplayAll()
wl = watchlists.Watchlists('/a/path')
self.assertEqual(wl.GetWatchersForPaths(['a_module']), watchers)
def testMultipleWatchlistsTrigger(self):
"""Test that multiple watchlists can get triggered for one filepath."""
contents = \
"""{
'WATCHLIST_DEFINITIONS': {
'mac': {
'filepath': 'mac',
},
'views': {
'filepath': 'views',
},
},
'WATCHLISTS': {
'mac': ['x1@chromium.org'],
'views': ['x2@chromium.org'],
},
} """
watchlists.Watchlists._HasWatchlistsFile().AndReturn(True)
watchlists.Watchlists._ContentsOfWatchlistsFile().AndReturn(contents)
self.mox.ReplayAll()
wl = watchlists.Watchlists('/a/path')
self.assertEqual(wl.GetWatchersForPaths(['file_views_mac']),
['x1@chromium.org', 'x2@chromium.org'])
def testDuplicateWatchers(self):
"""Test that multiple watchlists can get triggered for one filepath."""
watchers = ['someone@chromium.org']
contents = \
"""{
'WATCHLIST_DEFINITIONS': {
'mac': {
'filepath': 'mac',
},
'views': {
'filepath': 'views',
},
},
'WATCHLISTS': {
'mac': %s,
'views': %s,
},
} """ % (watchers, watchers)
watchlists.Watchlists._HasWatchlistsFile().AndReturn(True)
watchlists.Watchlists._ContentsOfWatchlistsFile().AndReturn(contents)
self.mox.ReplayAll()
wl = watchlists.Watchlists('/a/path')
self.assertEqual(wl.GetWatchersForPaths(['file_views_mac']), watchers)
def testWinPathWatchers(self):
"""Test watchers for a windows path (containing backward slashes)."""
watchers = ['abc@def.com', 'x1@xyz.org']
contents = \
"""{
'WATCHLIST_DEFINITIONS': {
'browser': {
'filepath': 'chrome/browser/.*',
},
},
'WATCHLISTS': {
'browser': %s,
},
} """ % watchers
saved_sep = watchlists.os.sep
watchlists.os.sep = '\\' # to pose as win32
watchlists.Watchlists._HasWatchlistsFile().AndReturn(True)
watchlists.Watchlists._ContentsOfWatchlistsFile().AndReturn(contents)
self.mox.ReplayAll()
wl = watchlists.Watchlists(r'a\path')
returned_watchers = wl.GetWatchersForPaths(
[r'chrome\browser\renderer_host\render_widget_host.h'])
watchlists.os.sep = saved_sep # revert back os.sep before asserts
self.assertEqual(returned_watchers, watchers)
if __name__ == '__main__':
import unittest
unittest.main()