~lifeless/storm/bug-620615

« back to all changes in this revision

Viewing changes to tests/info.py

  • Committer: Gustavo Niemeyer
  • Date: 2008-06-18 23:13:04 UTC
  • mto: (235.2.21 need-for-speed-revenge)
  • mto: This revision was merged to the branch mainline in revision 245.
  • Revision ID: gustavo@niemeyer.net-20080618231304-iww2kewacv2ux78v
Simplify the calling semantics of _when in the expr module, as
suggested by James.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
# You should have received a copy of the GNU Lesser General Public License
19
19
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
20
#
 
21
from weakref import ref
21
22
import gc
22
23
 
23
24
from storm.exceptions import ClassInfoError
26
27
from storm.expr import Undef, Select, compile
27
28
from storm.info import *
28
29
 
29
 
from tests.helper import TestHelper
 
30
from tests.helper import TestHelper, run_this
30
31
 
31
32
 
32
33
class Wrapper(object):
574
575
            prop1 = Property("column1", primary=True)
575
576
        Alias = ClassAlias(Class, "USE_THIS")
576
577
        self.assertEquals(Alias.__storm_table__, "USE_THIS")
577
 
        
 
578
 
 
579
    def test_cached_aliases(self):
 
580
        """
 
581
        Class aliases are cached such that multiple invocations of
 
582
        C{ClassAlias} return the same object.
 
583
        """
 
584
        alias1 = ClassAlias(self.Class, "something_unlikely")
 
585
        alias2 = ClassAlias(self.Class, "something_unlikely")
 
586
        self.assertIdentical(alias1, alias2)
 
587
        alias3 = ClassAlias(self.Class, "something_unlikely2")
 
588
        self.assertNotIdentical(alias1, alias3)
 
589
        alias4 = ClassAlias(self.Class, "something_unlikely2")
 
590
        self.assertIdentical(alias3, alias4)
 
591
 
 
592
    def test_unnamed_aliases_not_cached(self):
 
593
        alias1 = ClassAlias(self.Class)
 
594
        alias2 = ClassAlias(self.Class)
 
595
        self.assertNotIdentical(alias1, alias2)
 
596
 
 
597
    def test_alias_cache_is_per_class(self):
 
598
        """
 
599
        The cache of class aliases is not as bad as it once was.
 
600
        """
 
601
        class LocalClass(self.Class):
 
602
            pass
 
603
        alias = ClassAlias(self.Class, "something_unlikely")
 
604
        alias2 = ClassAlias(LocalClass, "something_unlikely")
 
605
        self.assertNotIdentical(alias, alias2)
 
606
 
 
607
    def test_aliases_only_last_as_long_as_class(self):
 
608
        """
 
609
        The cached ClassAliases only last for as long as the class is alive.
 
610
        """
 
611
        class LocalClass(self.Class):
 
612
            pass
 
613
        alias = ClassAlias(LocalClass, "something_unlikely3")
 
614
        alias_ref = ref(alias)
 
615
        class_ref = ref(LocalClass)
 
616
        del alias
 
617
        del LocalClass
 
618
 
 
619
        gc.collect(); gc.collect(); gc.collect()
 
620
 
 
621
        self.assertIdentical(class_ref(), None)
 
622
        self.assertIdentical(alias_ref(), None)
578
623
 
579
624
 
580
625
class TypeCompilerTest(TestHelper):
592
637
        alias = ClassAlias(Class2, "alias")
593
638
        statement = compile(Select(alias.id))
594
639
        self.assertEquals(statement, "SELECT alias.id FROM class1 AS alias")
 
640