summaryrefslogtreecommitdiff
path: root/test/orm/inheritance/test_basic.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/orm/inheritance/test_basic.py')
-rw-r--r--test/orm/inheritance/test_basic.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/test/orm/inheritance/test_basic.py b/test/orm/inheritance/test_basic.py
index 0e647a66e..28aced07b 100644
--- a/test/orm/inheritance/test_basic.py
+++ b/test/orm/inheritance/test_basic.py
@@ -11,6 +11,7 @@ from test.lib import fixtures
from test.orm import _fixtures
from test.lib.schema import Table, Column
from sqlalchemy.ext.declarative import declarative_base
+from test.lib.util import gc_collect
class O2MTest(fixtures.MappedTest):
"""deals with inheritance and one-to-many relationships"""
@@ -1695,6 +1696,62 @@ class OptimizedLoadTest(fixtures.MappedTest):
),
)
+class TransientInheritingGCTest(fixtures.TestBase):
+ def _fixture(self):
+ Base = declarative_base()
+ class A(Base):
+ __tablename__ = 'a'
+ id = Column(Integer, primary_key=True, test_needs_pk=True)
+ data = Column(String(10))
+ self.A = A
+ return Base
+
+ def setUp(self):
+ self.Base = self._fixture()
+
+ def tearDown(self):
+ self.Base.metadata.drop_all(testing.db)
+ #clear_mappers()
+ self.Base = None
+
+ def _do_test(self, go):
+ B = go()
+ self.Base.metadata.create_all(testing.db)
+ sess = Session(testing.db)
+ sess.add(B(data='some b'))
+ sess.commit()
+
+ b1 = sess.query(B).one()
+ assert isinstance(b1, B)
+ sess.close()
+ del sess
+ del b1
+ del B
+
+ gc_collect()
+
+ eq_(
+ len(self.A.__subclasses__()),
+ 0)
+
+ def test_single(self):
+ def go():
+ class B(self.A):
+ pass
+ return B
+ self._do_test(go)
+
+ @testing.fails_if(lambda: True,
+ "not supported for joined inh right now.")
+ def test_joined(self):
+ def go():
+ class B(self.A):
+ __tablename__ = 'b'
+ id = Column(Integer, ForeignKey('a.id'),
+ primary_key=True)
+ return B
+ self._do_test(go)
+
class NoPKOnSubTableWarningTest(fixtures.TestBase):
def _fixture(self):