mirror of
https://github.com/scm-manager/scm-manager.git
synced 2026-07-08 14:31:52 +02:00
make File_Printer testable
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user