public void FindAndRemovesUnusedKeys()
{
StoreJobInDictionary("programming", "code");
StoreJobInDictionary("chess", "mate");
using (var tr = _db.StartTransaction())
{
var sports = tr.Singleton<Directory>();
sports.Dir["programming"] = new JobMap();
tr.Commit();
}
using (var visitor = new FindUnusedKeysVisitor())
{
using (var tr = _db.StartReadOnlyTransaction())
{
visitor.ImportAllKeys(tr);
visitor.Iterate(tr);
}
var report = DumpUnseenKeys(visitor, "\r\n");
Approvals.Verify(report);
using (var tr = _db.StartTransaction())
{
visitor.DeleteUnused(tr);
tr.Commit();
}
}
ReopenDb();
AssertNoLeaksInDb();
using (var tr = _db.StartReadOnlyTransaction())
{
//check that db has is not broken after removing unused keys
var sports = tr.Singleton<Directory>();
Assert.Equal(sports.Dir["chess"].Jobs[0].Duty.Name, "mate");
}
}