~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_inv.py

(jameinel) Fix bug #737234. When running iter_entries_by_dir preload all the
 data if we are going to be looking at it all. (John A Meinel)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1223
1223
        self.assertEqual(('tree\xce\xa9name', 'tree-root-id', 'tree-rev-id'),
1224
1224
                         inv._bytes_to_utf8name_key(bytes))
1225
1225
 
 
1226
    def make_basic_utf8_inventory(self):
 
1227
        inv = Inventory()
 
1228
        inv.revision_id = "revid"
 
1229
        inv.root.revision = "rootrev"
 
1230
        root_id = inv.root.file_id
 
1231
        inv.add(InventoryFile("fileid", u'f\xefle', root_id))
 
1232
        inv["fileid"].revision = "filerev"
 
1233
        inv["fileid"].text_sha1 = "ffff"
 
1234
        inv["fileid"].text_size = 0
 
1235
        inv.add(InventoryDirectory("dirid", u'dir-\N{EURO SIGN}', root_id))
 
1236
        inv.add(InventoryFile("childid", u'ch\xefld', "dirid"))
 
1237
        inv["childid"].revision = "filerev"
 
1238
        inv["childid"].text_sha1 = "ffff"
 
1239
        inv["childid"].text_size = 0
 
1240
        chk_bytes = self.get_chk_bytes()
 
1241
        chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
 
1242
        bytes = ''.join(chk_inv.to_lines())
 
1243
        return CHKInventory.deserialise(chk_bytes, bytes, ("revid",))
 
1244
 
 
1245
    def test__preload_handles_utf8(self):
 
1246
        new_inv = self.make_basic_utf8_inventory()
 
1247
        self.assertEqual({}, new_inv._fileid_to_entry_cache)
 
1248
        self.assertFalse(new_inv._fully_cached)
 
1249
        new_inv._preload_cache()
 
1250
        self.assertEqual(
 
1251
            sorted([new_inv.root_id, "fileid", "dirid", "childid"]),
 
1252
            sorted(new_inv._fileid_to_entry_cache.keys()))
 
1253
        ie_root = new_inv._fileid_to_entry_cache[new_inv.root_id]
 
1254
        self.assertEqual([u'dir-\N{EURO SIGN}', u'f\xefle'],
 
1255
                         sorted(ie_root._children.keys()))
 
1256
        ie_dir = new_inv._fileid_to_entry_cache['dirid']
 
1257
        self.assertEqual([u'ch\xefld'], sorted(ie_dir._children.keys()))
 
1258
 
 
1259
    def test__preload_populates_cache(self):
 
1260
        inv = Inventory()
 
1261
        inv.revision_id = "revid"
 
1262
        inv.root.revision = "rootrev"
 
1263
        root_id = inv.root.file_id
 
1264
        inv.add(InventoryFile("fileid", "file", root_id))
 
1265
        inv["fileid"].revision = "filerev"
 
1266
        inv["fileid"].executable = True
 
1267
        inv["fileid"].text_sha1 = "ffff"
 
1268
        inv["fileid"].text_size = 1
 
1269
        inv.add(InventoryDirectory("dirid", "dir", root_id))
 
1270
        inv.add(InventoryFile("childid", "child", "dirid"))
 
1271
        inv["childid"].revision = "filerev"
 
1272
        inv["childid"].executable = False
 
1273
        inv["childid"].text_sha1 = "dddd"
 
1274
        inv["childid"].text_size = 1
 
1275
        chk_bytes = self.get_chk_bytes()
 
1276
        chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
 
1277
        bytes = ''.join(chk_inv.to_lines())
 
1278
        new_inv = CHKInventory.deserialise(chk_bytes, bytes, ("revid",))
 
1279
        self.assertEqual({}, new_inv._fileid_to_entry_cache)
 
1280
        self.assertFalse(new_inv._fully_cached)
 
1281
        new_inv._preload_cache()
 
1282
        self.assertEqual(
 
1283
            sorted([root_id, "fileid", "dirid", "childid"]),
 
1284
            sorted(new_inv._fileid_to_entry_cache.keys()))
 
1285
        self.assertTrue(new_inv._fully_cached)
 
1286
        ie_root = new_inv._fileid_to_entry_cache[root_id]
 
1287
        self.assertEqual(['dir', 'file'], sorted(ie_root._children.keys()))
 
1288
        ie_dir = new_inv._fileid_to_entry_cache['dirid']
 
1289
        self.assertEqual(['child'], sorted(ie_dir._children.keys()))
 
1290
 
 
1291
    def test__preload_handles_partially_evaluated_inventory(self):
 
1292
        new_inv = self.make_basic_utf8_inventory()
 
1293
        ie = new_inv[new_inv.root_id]
 
1294
        self.assertIs(None, ie._children)
 
1295
        self.assertEqual([u'dir-\N{EURO SIGN}', u'f\xefle'],
 
1296
                         sorted(ie.children.keys()))
 
1297
        # Accessing .children loads _children
 
1298
        self.assertEqual([u'dir-\N{EURO SIGN}', u'f\xefle'],
 
1299
                         sorted(ie._children.keys()))
 
1300
        new_inv._preload_cache()
 
1301
        # No change
 
1302
        self.assertEqual([u'dir-\N{EURO SIGN}', u'f\xefle'],
 
1303
                         sorted(ie._children.keys()))
 
1304
        ie_dir = new_inv["dirid"]
 
1305
        self.assertEqual([u'ch\xefld'],
 
1306
                         sorted(ie_dir._children.keys()))
 
1307
 
1226
1308
 
1227
1309
class TestCHKInventoryExpand(tests.TestCaseWithMemoryTransport):
1228
1310