subversion_file_system_test.py revision ca12bfac764ba476d6cd062bf1dde12cc64c3f40
1#!/usr/bin/env python 2# Copyright (c) 2012 The Chromium Authors. All rights reserved. 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5 6import json 7import os 8import sys 9import unittest 10 11from fake_url_fetcher import FakeUrlFetcher 12from file_system import StatInfo 13from future import Future 14from subversion_file_system import SubversionFileSystem 15 16class SubversionFileSystemTest(unittest.TestCase): 17 def setUp(self): 18 self._base_path = os.path.join(sys.path[0], 'test_data', 'file_system') 19 20 def _CreateSubversionFileSystem(self): 21 fetcher = FakeUrlFetcher(self._base_path) 22 return SubversionFileSystem(fetcher, fetcher, self._base_path) 23 24 def _ReadLocalFile(self, filename): 25 with open(os.path.join(self._base_path, filename), 'r') as f: 26 return f.read() 27 28 def testReadFiles(self): 29 expected = { 30 'test1.txt': 'test1\n', 31 'test2.txt': 'test2\n', 32 'test3.txt': 'test3\n', 33 } 34 file_system = self._CreateSubversionFileSystem() 35 self.assertEqual( 36 expected, 37 file_system.Read(['test1.txt', 'test2.txt', 'test3.txt']).Get()) 38 39 def testListDir(self): 40 expected = ['dir/'] + ['file%d.html' % i for i in range(7)] 41 file_system = self._CreateSubversionFileSystem() 42 self.assertEqual(expected, sorted(file_system.ReadSingle('list/'))) 43 44 def testListSubDir(self): 45 expected = ['empty.txt'] + ['file%d.html' % i for i in range(3)] 46 file_system = self._CreateSubversionFileSystem() 47 self.assertEqual(expected, sorted(file_system.ReadSingle('list/dir/'))) 48 49 def testDirStat(self): 50 file_system = self._CreateSubversionFileSystem() 51 stat_info = file_system.Stat('stat/') 52 expected = StatInfo( 53 '151113', 54 child_versions=json.loads(self._ReadLocalFile('stat_result.json'))) 55 self.assertEqual(expected, stat_info) 56 57 def testFileStat(self): 58 file_system = self._CreateSubversionFileSystem() 59 stat_info = file_system.Stat('stat/extension_api.h') 60 self.assertEqual(StatInfo('146163'), stat_info) 61 62 def testRevisions(self): 63 # This is a super hacky test. Record the path that was fetched then exit the 64 # test. Compare. 65 class ValueErrorFetcher(object): 66 def __init__(self): 67 self.last_fetched = None 68 69 def FetchAsync(self, path): 70 self.last_fetched = path 71 raise ValueError() 72 73 def Fetch(self, path): 74 self.last_fetched = path 75 raise ValueError() 76 77 file_fetcher = ValueErrorFetcher() 78 stat_fetcher = ValueErrorFetcher() 79 svn_path = 'svn:' 80 81 svn_file_system = SubversionFileSystem(file_fetcher, 82 stat_fetcher, 83 svn_path, 84 revision=42) 85 86 self.assertRaises(ValueError, svn_file_system.ReadSingle, 'dir/file') 87 self.assertEqual('dir/file?p=42', file_fetcher.last_fetched) 88 # Stat() will always stat directories. 89 self.assertRaises(ValueError, svn_file_system.Stat, 'dir/file') 90 self.assertEqual('dir/?pathrev=42', stat_fetcher.last_fetched) 91 92 self.assertRaises(ValueError, svn_file_system.ReadSingle, 'dir/') 93 self.assertEqual('dir/?p=42', file_fetcher.last_fetched) 94 self.assertRaises(ValueError, svn_file_system.Stat, 'dir/') 95 self.assertEqual('dir/?pathrev=42', stat_fetcher.last_fetched) 96 97if __name__ == '__main__': 98 unittest.main() 99