| #!/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 = ['[email protected]', '[email protected]'] |
| 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': ['[email protected]'], |
| 'views': ['[email protected]'], |
| }, |
| } """ |
| 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']), |
| ['[email protected]', '[email protected]']) |
| |
| def testDuplicateWatchers(self): |
| """Test that multiple watchlists can get triggered for one filepath.""" |
| watchers = ['[email protected]'] |
| 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 = ['[email protected]', '[email protected]'] |
| 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() |