summaryrefslogtreecommitdiff
path: root/tests/model_regress/test_state.py
blob: 8abcc58382c52905242bfd75526868d48010f0aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import gc

from django.db.models.base import ModelState, ModelStateFieldsCacheDescriptor
from django.test import SimpleTestCase
from django.test.utils import garbage_collect

from .models import Worker, WorkerProfile


class ModelStateTests(SimpleTestCase):
    def test_fields_cache_descriptor(self):
        self.assertIsInstance(ModelState.fields_cache, ModelStateFieldsCacheDescriptor)

    def test_one_to_one_field_cycle_collection(self):
        self.addCleanup(gc.set_debug, gc.get_debug())
        gc.set_debug(gc.DEBUG_SAVEALL)

        def clear_garbage():
            del gc.garbage[:]

        self.addCleanup(clear_garbage)

        worker = Worker()
        profile = WorkerProfile(worker=worker)
        worker_id = id(worker)

        del worker
        del profile

        garbage_collect()

        leaked = [obj for obj in gc.garbage if id(obj) == worker_id]
        self.assertEqual(leaked, [])