diff options
Diffstat (limited to 'test/sql/test_utils.py')
-rw-r--r-- | test/sql/test_utils.py | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/test/sql/test_utils.py b/test/sql/test_utils.py index 4e713dd28..d68a74475 100644 --- a/test/sql/test_utils.py +++ b/test/sql/test_utils.py @@ -4,8 +4,11 @@ from sqlalchemy import MetaData from sqlalchemy import select from sqlalchemy import String from sqlalchemy import Table +from sqlalchemy.sql import base as sql_base from sqlalchemy.sql import util as sql_util from sqlalchemy.sql.elements import ColumnElement +from sqlalchemy.testing import assert_raises +from sqlalchemy.testing import assert_raises_message from sqlalchemy.testing import eq_ from sqlalchemy.testing import fixtures @@ -48,3 +51,41 @@ class MiscTest(fixtures.TestBase): set(sql_util.find_tables(subset_select, include_aliases=True)), {common, calias, subset_select}, ) + + def test_options_merge(self): + class opt1(sql_base.CacheableOptions): + _cache_key_traversal = [] + + class opt2(sql_base.CacheableOptions): + _cache_key_traversal = [] + + foo = "bar" + + class opt3(sql_base.CacheableOptions): + _cache_key_traversal = [] + + foo = "bar" + bat = "hi" + + o2 = opt2.safe_merge(opt1) + eq_(o2.__dict__, {}) + eq_(o2.foo, "bar") + + assert_raises_message( + TypeError, + r"other element .*opt2.* is not empty, is not of type .*opt1.*, " + r"and contains attributes not covered here .*'foo'.*", + opt1.safe_merge, + opt2, + ) + + o2 = opt2 + {"foo": "bat"} + o3 = opt2.safe_merge(o2) + + eq_(o3.foo, "bat") + + o4 = opt3.safe_merge(o2) + eq_(o4.foo, "bat") + eq_(o4.bat, "hi") + + assert_raises(TypeError, opt2.safe_merge, o4) |