Слияние кода завершено, страница обновится автоматически
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright 2015 Qing Liang (https://github.com/liangqing)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from __future__ import print_function
from __future__ import unicode_literals
import unittest
import os
import os.path
import shutil
from tempfile import mkstemp, mkdtemp
from syncrypto import FileEntry, FileTree
from time import time
from util import prepare_filetree
try:
from cStringIO import StringIO as BytesIO
except ImportError:
from io import BytesIO
class FileEntryTestCase(unittest.TestCase):
def setUp(self):
file_fp, file_path = mkstemp()
self.file_path = file_path
stat = os.stat(self.file_path)
self.file_attrs = {
'pathname': os.path.basename(self.file_path),
'size': stat.st_size,
'ctime': int(time()),
'mtime': stat.st_mtime,
'mode': stat.st_mode,
}
self.file_object = FileEntry(**self.file_attrs)
os.close(file_fp)
def tearDown(self):
os.remove(self.file_path)
def test_property(self):
stat = os.stat(self.file_path)
self.assertEqual(self.file_object.isdir, False)
self.assertEqual(self.file_object.digest, None)
self.assertEqual(self.file_object.size, stat.st_size)
self.assertEqual(self.file_object.ctime, int(stat.st_ctime))
self.assertEqual(self.file_object.mtime, stat.st_mtime)
self.assertEqual(self.file_object.mode, stat.st_mode)
self.assertEqual(self.file_object.pathname,
os.path.basename(self.file_path))
def test_to_dict(self):
d = self.file_object.to_dict()
for k in self.file_attrs:
self.assertEqual(d[k], self.file_attrs[k])
def test_from_file(self):
stat = os.stat(self.file_path)
d = {
'pathname': os.path.basename(self.file_path),
'fs_pathname': os.path.basename(self.file_path),
'size': stat.st_size,
'ctime': stat.st_ctime,
'mtime': stat.st_mtime,
'mode': stat.st_mode,
'digest': None,
'isdir': False,
'salt': None
}
file_object = FileEntry.from_file(self.file_path, d['pathname'])
self.assertEqual(d, file_object.to_dict())
def test_from_dict(self):
stat = os.stat(self.file_path)
d = {
'pathname': os.path.basename(self.file_path),
'fs_pathname': os.path.basename(self.file_path),
'size': stat.st_size,
'ctime': int(time()),
'mtime': stat.st_mtime,
'mode': stat.st_mode,
'digest': None,
'isdir': False,
'salt': None
}
file_object = FileEntry(**d)
self.assertEqual(d, file_object.to_dict())
class FileTreeTestCase(unittest.TestCase):
def setUp(self):
self.directory_path = mkdtemp()
def tearDown(self):
shutil.rmtree(self.directory_path)
def test_walk_tree(self):
prepare_filetree(self.directory_path, '''
a
b/
c/d/e/f
1/2
''')
filetree = FileTree.from_fs(self.directory_path)
self.assertEqual(filetree.get('a').isdir, False)
self.assertEqual(filetree.get('b').isdir, True)
self.assertEqual(filetree.get('c').isdir, True)
self.assertEqual(filetree.get('c/d').isdir, True)
self.assertEqual(filetree.get('c/d/e').isdir, True)
self.assertEqual(filetree.get('c/d/e/f').isdir, False)
self.assertEqual(filetree.get('1').isdir, True)
self.assertEqual(filetree.get('1/2').isdir, False)
self.assertEqual(len(filetree.files()), 3)
self.assertEqual(len(filetree.folders()), 5)
if __name__ == '__main__':
unittest.main()
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарий ( 0 )