~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/interversionedfile_implementations/__init__.py

  • Committer: Robert Collins
  • Date: 2007-07-04 08:08:13 UTC
  • mfrom: (2572 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2587.
  • Revision ID: robertc@robertcollins.net-20070704080813-wzebx0r88fvwj5rq
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006 by Canonical Ltd
 
1
# Copyright (C) 2006 Canonical Ltd
2
2
# Authors: Robert Collins <robert.collins@canonical.com>
3
3
#
4
4
# This program is free software; you can redistribute it and/or modify
24
24
rather than in tests/interversionedfile_implementations/*.py.
25
25
"""
26
26
 
27
 
from bzrlib.versionedfile import InterVersionedFileTestProviderAdapter
28
 
                            
29
27
from bzrlib.tests import (
30
28
                          adapt_modules,
31
29
                          default_transport,
32
30
                          TestLoader,
 
31
                          TestScenarioApplier,
33
32
                          TestSuite,
34
33
                          )
35
34
 
36
35
 
 
36
class InterVersionedFileTestProviderAdapter(TestScenarioApplier):
 
37
    """A tool to generate a suite testing multiple inter versioned-file classes.
 
38
 
 
39
    This is done by copying the test once for each InterVersionedFile provider
 
40
    and injecting the transport_server, transport_readonly_server,
 
41
    versionedfile_factory and versionedfile_factory_to classes into each copy.
 
42
    Each copy is also given a new id() to make it easy to identify.
 
43
    """
 
44
 
 
45
    def __init__(self, transport_server, transport_readonly_server, formats):
 
46
        self._transport_server = transport_server
 
47
        self._transport_readonly_server = transport_readonly_server
 
48
        self.scenarios = self.formats_to_scenarios(formats)
 
49
    
 
50
    def formats_to_scenarios(self, formats):
 
51
        """Transform the input formats to a list of scenarios.
 
52
 
 
53
        :param formats: A list of tuples:
 
54
            (interversionedfile_class, versionedfile_factory,
 
55
             versionedfile_factory_to).
 
56
        """
 
57
        result = []
 
58
        for (interversionedfile_class,
 
59
             versionedfile_factory,
 
60
             versionedfile_factory_to) in formats:
 
61
            scenario = (interversionedfile_class.__name__, {
 
62
                "transport_server":self._transport_server,
 
63
                "transport_readonly_server":self._transport_readonly_server,
 
64
                "interversionedfile_class":interversionedfile_class,
 
65
                "versionedfile_factory":versionedfile_factory,
 
66
                "versionedfile_factory_to":versionedfile_factory_to,
 
67
                })
 
68
            result.append(scenario)
 
69
        return result
 
70
 
 
71
    @staticmethod
 
72
    def default_test_list():
 
73
        """Generate the default list of interversionedfile permutations to test."""
 
74
        from bzrlib.versionedfile import InterVersionedFile
 
75
        from bzrlib.weave import WeaveFile
 
76
        from bzrlib.knit import KnitVersionedFile
 
77
        result = []
 
78
        # test the fallback InterVersionedFile from annotated knits to weave
 
79
        result.append((InterVersionedFile,
 
80
                       KnitVersionedFile,
 
81
                       WeaveFile))
 
82
        for optimiser in InterVersionedFile._optimisers:
 
83
            result.append((optimiser,
 
84
                           optimiser._matching_file_from_factory,
 
85
                           optimiser._matching_file_to_factory
 
86
                           ))
 
87
        # if there are specific combinations we want to use, we can add them 
 
88
        # here.
 
89
        return result
 
90
 
 
91
 
37
92
def test_suite():
38
93
    result = TestSuite()
39
94
    test_interversionedfile_implementations = [