~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/__init__.py

Various hopefully improvements, but wsgi is broken, handing over to spiv :).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1240
1240
        # execution. Variables that the parameteriser sets need to be 
1241
1241
        # ones that are not set by setUp, or setUp will trash them.
1242
1242
        super(TestCaseWithMemoryTransport, self).__init__(methodName)
1243
 
        self.transport_server = default_transport
 
1243
        self.vfs_transport_factory = default_transport
 
1244
        self.transport_server = None
1244
1245
        self.transport_readonly_server = None
1245
1246
 
1246
1247
    def failUnlessExists(self, path):
1284
1285
                # readonly decorator requested
1285
1286
                # bring up the server
1286
1287
                self.__readonly_server = ReadonlyServer()
1287
 
                self.__readonly_server.setUp(self.get_server())
 
1288
                self.__readonly_server.setUp(self.get_vfs_only_server())
1288
1289
            else:
1289
1290
                self.__readonly_server = self.create_transport_readonly_server()
1290
 
                self.__readonly_server.setUp()
 
1291
                self.__readonly_server.setUp(self.get_vfs_only_server())
1291
1292
            self.addCleanup(self.__readonly_server.tearDown)
1292
1293
        return self.__readonly_server
1293
1294
 
1306
1307
            base = base + relpath
1307
1308
        return base
1308
1309
 
1309
 
    def get_server(self):
1310
 
        """Get the read/write server instance.
 
1310
    def get_vfs_only_server(self):
 
1311
        """Get thae vfs only read/write server instance.
1311
1312
 
1312
1313
        This is useful for some tests with specific servers that need
1313
1314
        diagnostics.
1315
1316
        For TestCaseWithMemoryTransport this is always a MemoryServer, and there
1316
1317
        is no means to override it.
1317
1318
        """
 
1319
        if self.__vfs_server is None:
 
1320
            self.__vfs_server = MemoryServer()
 
1321
            self.__vfs_server.setUp()
 
1322
            self.addCleanup(self.__vfs_server.tearDown)
 
1323
        return self.__vfs_server
 
1324
 
 
1325
    def get_server(self):
 
1326
        """Get the read/write server instance.
 
1327
 
 
1328
        This is useful for some tests with specific servers that need
 
1329
        diagnostics.
 
1330
 
 
1331
        This is built from the self.transport_server factory. If that is None,
 
1332
        then the self.get_vfs_server is returned.
 
1333
        """
1318
1334
        if self.__server is None:
1319
 
            self.__server = MemoryServer()
1320
 
            self.__server.setUp()
 
1335
            if self.transport_server is None:
 
1336
                return self.get_vfs_only_server()
 
1337
            else:
 
1338
                # bring up a decorated means of access to the vfs only server.
 
1339
                self.__server = self.transport_server()
 
1340
                self.__server.setUp(self.get_vfs_only_server())
1321
1341
            self.addCleanup(self.__server.tearDown)
1322
1342
        return self.__server
1323
1343
 
1324
 
    def get_url(self, relpath=None):
 
1344
    def _adjust_url(self, base, relpath):
1325
1345
        """Get a URL (or maybe a path) for the readwrite transport.
1326
1346
 
1327
1347
        This will either be backed by '.' or to an equivalent non-file based
1329
1349
        relpath provides for clients to get a path relative to the base url.
1330
1350
        These should only be downwards relative, not upwards.
1331
1351
        """
1332
 
        base = self.get_server().get_url()
1333
1352
        if relpath is not None and relpath != '.':
1334
1353
            if not base.endswith('/'):
1335
1354
                base = base + '/'
1343
1362
                base += urlutils.escape(relpath)
1344
1363
        return base
1345
1364
 
 
1365
    def get_url(self, relpath=None):
 
1366
        """Get a URL (or maybe a path) for the readwrite transport.
 
1367
 
 
1368
        This will either be backed by '.' or to an equivalent non-file based
 
1369
        facility.
 
1370
        relpath provides for clients to get a path relative to the base url.
 
1371
        These should only be downwards relative, not upwards.
 
1372
        """
 
1373
        base = self.get_server().get_url()
 
1374
        return self._adjust_url(base, relpath)
 
1375
 
 
1376
    def get_vfs_only_url(self, relpath=None):
 
1377
        """Get a URL (or maybe a path for the plain old vfs transport.
 
1378
 
 
1379
        This will never be a smart protocol.
 
1380
        :param relpath: provides for clients to get a path relative to the base
 
1381
            url.  These should only be downwards relative, not upwards.
 
1382
        """
 
1383
        base = self.get_vfs_only_server().get_url()
 
1384
        return self._adjust_url(base, relpath)
 
1385
 
1346
1386
    def _make_test_root(self):
1347
1387
        if TestCaseWithMemoryTransport.TEST_ROOT is not None:
1348
1388
            return
1545
1585
    readwrite one must both define get_url() as resolving to os.getcwd().
1546
1586
    """
1547
1587
 
1548
 
    def create_transport_server(self):
1549
 
        """Create a transport server from class defined at init.
1550
 
 
1551
 
        This is mostly a hook for daughter classes.
1552
 
        """
1553
 
        return self.transport_server()
1554
 
 
1555
 
    def get_server(self):
 
1588
    def get_vfs_only_server(self):
1556
1589
        """See TestCaseWithMemoryTransport.
1557
1590
 
1558
1591
        This is useful for some tests with specific servers that need
1559
1592
        diagnostics.
1560
1593
        """
1561
 
        if self.__server is None:
1562
 
            self.__server = self.create_transport_server()
1563
 
            self.__server.setUp()
1564
 
            self.addCleanup(self.__server.tearDown)
1565
 
        return self.__server
 
1594
        if self.__vfs_server is None:
 
1595
            self.__vfs_server = self.vfs_transport_factory()
 
1596
            self.__vfs_server.setUp()
 
1597
            self.addCleanup(self.__vfs_server.tearDown)
 
1598
        return self.__vfs_server
1566
1599
 
1567
1600
    def make_branch_and_tree(self, relpath, format=None):
1568
1601
        """Create a branch on the transport and a tree locally.
1613
1646
 
1614
1647
    def setUp(self):
1615
1648
        super(TestCaseWithTransport, self).setUp()
1616
 
        self.__server = None
 
1649
        self.__vfs_server = None
1617
1650
 
1618
1651
 
1619
1652
class ChrootedTestCase(TestCaseWithTransport):
1630
1663
 
1631
1664
    def setUp(self):
1632
1665
        super(ChrootedTestCase, self).setUp()
1633
 
        if not self.transport_server == MemoryServer:
 
1666
        # NB: one HttpServer is taught to decorate properly,
 
1667
        # this hack can be removed.
 
1668
        if not self.vfs_transport_factory == MemoryServer:
1634
1669
            self.transport_readonly_server = HttpServer
1635
1670
 
1636
1671