Rev 3373: Prepare parameterised test environment. in http://people.ubuntu.com/~robertc/baz2.0/versioned_files
Robert Collins
robertc at robertcollins.net
Sun May 4 23:05:51 BST 2008
At http://people.ubuntu.com/~robertc/baz2.0/versioned_files
------------------------------------------------------------
revno: 3373
revision-id: robertc at robertcollins.net-20080504220541-vb8twmt85bxjzitc
parent: robertc at robertcollins.net-20080502033007-j9tl9gdrx4yxmtm9
committer: Robert Collins <robertc at robertcollins.net>
branch nick: VersionedFiles.add_api
timestamp: Mon 2008-05-05 08:05:41 +1000
message:
Prepare parameterised test environment.
modified:
bzrlib/tests/test_versionedfile.py test_versionedfile.py-20060222045249-db45c9ed14a1c2e5
bzrlib/versionedfile.py versionedfile.py-20060222045106-5039c71ee3b65490
=== modified file 'bzrlib/tests/test_versionedfile.py'
--- a/bzrlib/tests/test_versionedfile.py 2008-05-02 03:30:07 +0000
+++ b/bzrlib/tests/test_versionedfile.py 2008-05-04 22:05:41 +0000
@@ -42,7 +42,14 @@
KnitPlainFactory,
)
from bzrlib.symbol_versioning import one_four, one_five
-from bzrlib.tests import TestCaseWithMemoryTransport, TestSkipped
+from bzrlib.tests import (
+ TestCaseWithMemoryTransport,
+ TestScenarioApplier,
+ TestSkipped,
+ condition_isinstance,
+ split_suite_by_condition,
+ iter_suite_tests,
+ )
from bzrlib.tests.http_utils import TestCaseWithWebserver
from bzrlib.trace import mutter
from bzrlib.transport import get_transport
@@ -50,10 +57,79 @@
from bzrlib.tsort import topo_sort
from bzrlib.tuned_gzip import GzipFile
import bzrlib.versionedfile as versionedfile
+from bzrlib.versionedfile import (
+ ConstantMapper,
+ HashEscapedPrefixMapper,
+ PrefixMapper,
+ make_pack_factory,
+ make_versioned_files_factory,
+ )
from bzrlib.weave import WeaveFile
from bzrlib.weavefile import read_weave, write_weave
+def load_tests(standard_tests, module, loader):
+ """Parameterize VersionedFiles tests for different implementations."""
+ to_adapt, result = split_suite_by_condition(
+ standard_tests, condition_isinstance(TestVersionedFiles))
+ len_one_adapter = TestScenarioApplier()
+ len_two_adapter = TestScenarioApplier()
+ # We want to be sure of behaviour for:
+ # weaves prefix layout (weave texts)
+ # individually named weaves (weave inventories)
+ # annotated knits - prefix|hash|hash-escape layout, we test the third only
+ # as it is the most complex mapper.
+ # individually named knits
+ # individual no-graph knits in packs (signatures)
+ # individual graph knits in packs (inventories)
+ # individual graph nocompression knits in packs (revisions)
+ # plain text knits in packs (texts)
+ len_one_adapter.scenarios = [
+ ('weave-named', {
+ 'factory':make_versioned_files_factory(WeaveFile,
+ ConstantMapper('inventory')),
+ 'len':1,
+ }),
+ ('named-knit', {
+ 'factory':make_versioned_files_factory(make_file_knit,
+ ConstantMapper('revisions')),
+ 'len':1,
+ }),
+ ('named-nograph-knit-pack', {
+ 'factory':make_pack_factory(False, False, 1),
+ 'len':1,
+ }),
+ ('named-graph-knit-pack', {
+ 'factory':make_pack_factory(True, True, 1),
+ 'len':1,
+ }),
+ ('named-graph-nodelta-knit-pack', {
+ 'factory':make_pack_factory(True, False, 1),
+ 'len':1,
+ }),
+ ]
+ len_two_adapter.scenarios = [
+ ('weave-prefix', {
+ 'factory':make_versioned_files_factory(WeaveFile,
+ PrefixMapper()),
+ 'len':2,
+ }),
+ ('annotated-knit-escape', {
+ 'factory':make_versioned_files_factory(make_file_knit,
+ HashEscapedPrefixMapper()),
+ 'len':2,
+ }),
+ ('plain-knit-pack', {
+ 'factory':make_pack_factory(True, True, 2),
+ 'len':2,
+ }),
+ ]
+ for test in iter_suite_tests(to_adapt):
+ result.addTests(len_one_adapter.adapt(test))
+ result.addTests(len_two_adapter.adapt(test))
+ return result
+
+
def get_diamond_vf(f, trailing_eol=True, left_only=False):
"""Get a diamond graph to exercise deltas and merges.
@@ -1580,3 +1656,11 @@
"revision-id")))
self.assertEqual(('filE-Id',), mapper.unmap("ed/fil%45-%49d"))
self.assertEqual(('neW-Id',), mapper.unmap("88/ne%57-%49d"))
+
+
+class TestVersionedFiles(TestCaseWithMemoryTransport):
+ """Tests for the multiple-file variant of VersionedFile."""
+
+ def test_construct(self):
+ """Each parameterised test can be constructed on a transport."""
+ files = self.factory(self.get_transport())
=== modified file 'bzrlib/versionedfile.py'
--- a/bzrlib/versionedfile.py 2008-05-02 03:30:07 +0000
+++ b/bzrlib/versionedfile.py 2008-05-04 22:05:41 +0000
@@ -889,3 +889,34 @@
def _unescape(self, basename):
"""Escaped names are unescaped by urlutils."""
return urllib.unquote(basename)
+
+
+def make_pack_factory(graph, delta, keylength):
+ """Create a factory for creating a pack based VersionedFiles.
+
+ :param graph: Store a graph.
+ :param delta: Delta compress contents.
+ :param keylength: How long should keys be.
+ """
+ return lambda x:None
+
+
+def make_versioned_files_factory(versioned_file_factory, mapper):
+ """Create a ThunkedVersionedFiles factory.
+
+ This will create a callable which when called creates a
+ ThunkedVersionedFiles on a transport, using mapper to access individual
+ versioned files, and versioned_file_factory to create each individual file.
+ """
+ return lambda x:None
+
+
+class VersionedFiles(object):
+ """Storage for many versioned files.
+
+ This object allows a single keyspace for accessing the history graph and
+ contents of named bytestrings.
+
+ Currently no implementation allows the graph of different key prefixes to
+ intersect, but the API does allow such implementations in the future.
+ """
More information about the bazaar-commits
mailing list