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