make File_Printer testable

This commit is contained in:
Sebastian Sdorra
2020-03-02 14:48:17 +01:00
parent f74db39a4c
commit b4441ae1c8
2 changed files with 81 additions and 9 deletions

View File

@@ -196,10 +196,17 @@ def collect_sub_repositories(revCtx):
return subrepos
class Writer:
def __init__(self, ui):
self.ui = ui
def write(self, value):
self.ui.write(value)
class File_Printer:
def __init__(self, ui, repo, revCtx, disableLastCommit, transport, limit, offset):
self.ui = ui
def __init__(self, writer, repo, revCtx, disableLastCommit, transport, limit, offset):
self.writer = writer
self.repo = repo
self.revCtx = revCtx
self.disableLastCommit = disableLastCommit
@@ -213,7 +220,7 @@ class File_Printer:
format = '%s/\n'
if self.transport:
format = 'd%s/\0'
self.ui.write( format % path)
self.writer.write( format % path)
def print_file(self, path):
if self.shouldPrintResult():
@@ -227,14 +234,14 @@ class File_Printer:
format = '%s %i %s %s\n'
if self.transport:
format = 'f%s\n%i %s %s\0'
self.ui.write( format % (file.path(), file.size(), date, description) )
self.writer.write( format % (file.path(), file.size(), date, description) )
def print_sub_repository(self, path, subrepo):
if self.shouldPrintResult():
format = '%s/ %s %s\n'
if self.transport:
format = 's%s/\n%s %s\0'
self.ui.write( format % (path, subrepo.revision, subrepo.url))
self.writer.write( format % (path, subrepo.revision, subrepo.url))
def visit(self, file):
if file.sub_repository:
@@ -256,9 +263,9 @@ class File_Printer:
def finish(self):
if self.isTruncated():
if self.transport:
self.ui.write( "t")
self.writer.write( "t")
else:
self.ui.write("truncated")
self.writer.write("truncated")
class File_Viewer:
def __init__(self, revCtx, visitor):
@@ -302,7 +309,8 @@ def fileview(ui, repo, **opts):
subrepos = {}
if not opts["disableSubRepositoryDetection"]:
subrepos = collect_sub_repositories(revCtx)
printer = File_Printer(ui, repo, revCtx, opts["disableLastCommit"], opts["transport"], opts["limit"], opts["offset"])
writer = Writer(ui)
printer = File_Printer(writer, repo, revCtx, opts["disableLastCommit"], opts["transport"], opts["limit"], opts["offset"])
viewer = File_Viewer(revCtx, printer)
viewer.recursive = opts["recursive"]
viewer.sub_repositories = subrepos

View File

@@ -1,11 +1,24 @@
from fileview import File_Viewer, SubRepository
from fileview import File_Viewer, File_Printer, SubRepository
import unittest
class DummyManifestEntry:
def __init__(self, name):
self.name = name
def path(self):
return self.name
def size(self):
return len(self.name)
class DummyRevContext():
def __init__(self, mf):
self.mf = mf
def __getitem__(self, path):
return DummyManifestEntry(path)
def manifest(self):
return self.mf
@@ -31,6 +44,18 @@ class File_Object_Collector():
self.stack.append(file)
self.last = file
class CollectingWriter:
def __init__(self):
self.stack = []
def __len__(self):
return len(self.stack)
def __getitem__(self, key):
return self.stack[key]
def write(self, value):
self.stack.append(value)
class Test_File_Viewer(unittest.TestCase):
@@ -53,6 +78,45 @@ class Test_File_Viewer(unittest.TestCase):
self.assertDirectory(g, "c/g")
self.assertChildren(g, ["c/g/h.txt"])
def test_printer(self):
paths = ["a", "b", "c/d.txt", "c/e.txt", "f.txt", "c/g/h.txt"]
writer = self.view_with_limit_and_offset(paths, 1000, 0)
self.assertPaths(writer, ["/", "c/", "c/g/", "c/g/h.txt", "c/d.txt", "c/e.txt", "a", "b", "f.txt"])
def test_printer_with_limit(self):
paths = ["a", "b", "c/d.txt", "c/e.txt", "f.txt", "c/g/h.txt"]
writer = self.view_with_limit_and_offset(paths, 3, 0)
self.assertPaths(writer, ["/", "c/", "c/g/", "c/g/h.txt"])
# TODO fix
def x_test_printer_with_offset(self):
paths = ["a", "b", "c/d.txt", "c/e.txt", "f.txt", "c/g/h.txt"]
writer = self.view_with_limit_and_offset(paths, 100, 3)
self.assertPaths(writer, ["/", "c", "c/d.txt", "c/e.txt", "a", "b", "f.txt"])
def view_with_limit_and_offset(self, paths, limit, offset):
revCtx = DummyRevContext(paths)
collector = File_Object_Collector()
writer = CollectingWriter()
printer = File_Printer(writer, None, revCtx, True, False, limit, offset)
viewer = File_Viewer(revCtx, printer)
viewer.recursive = True
viewer.view("")
return writer
def assertPath(self, actual, expected):
path = actual[:len(expected)]
self.assertEqual(path, expected)
nextChar = actual[len(expected)]
self.assertTrue(nextChar == " " or nextChar == "\n", expected + " does not match " + actual)
def assertPaths(self, actual, expected):
for idx,item in enumerate(actual):
self.assertPath(item, expected[idx])
self.assertEqual(len(actual), len(expected))
def test_recursive_with_path(self):
root = self.collect(["a", "b", "c/d.txt", "c/e.txt", "f.txt", "c/g/h.txt"], "c", True)
self.assertDirectory(root, "c")