You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
4.9 KiB
Python
162 lines
4.9 KiB
Python
#!/usr/bin/python
|
|
# Copyright (c) 2009 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 is too confused.
|
|
# pylint: disable=E1103,E1120,W0212,W0403
|
|
|
|
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()
|