d0df704d8a
added python.path vm arg to startup script fixed infinite loop in unwrap() when displaying sequences of sequences git-svn-id: http://google-refine.googlecode.com/svn/trunk@509 7d457c2a-affb-35e4-300a-418c747d4874
145 lines
4.6 KiB
Python
145 lines
4.6 KiB
Python
"""Slot tests
|
|
|
|
Made for Jython.
|
|
"""
|
|
from test import test_support
|
|
import unittest
|
|
|
|
# The strict tests fail on PyPy (but work on CPython and Jython).
|
|
# They're questionable
|
|
strict = True
|
|
|
|
class SlottedTestCase(unittest.TestCase):
|
|
|
|
def test_slotted(self):
|
|
class Foo(object):
|
|
__slots__ = 'bar'
|
|
self.assert_('__dict__' not in Foo.__dict__)
|
|
foo = Foo()
|
|
self.assert_(not hasattr(foo, '__dict__'))
|
|
foo.bar = 'hello bar'
|
|
self.assertEqual(foo.bar, 'hello bar')
|
|
self.assertRaises(AttributeError, setattr, foo, 'foo', 'hello foo')
|
|
|
|
class Baz(object):
|
|
__slots__ = ['python', 'jython']
|
|
self.assert_('__dict__' not in Baz.__dict__)
|
|
baz = Baz()
|
|
self.assert_(not hasattr(baz, '__dict__'))
|
|
baz.python = 'hello python'
|
|
baz.jython = 'hello jython'
|
|
self.assertEqual(baz.python, 'hello python')
|
|
self.assertEqual(baz.jython, 'hello jython')
|
|
self.assertRaises(AttributeError, setattr, baz, 'foo', 'hello')
|
|
|
|
|
|
class SlottedWithDictTestCase(unittest.TestCase):
|
|
|
|
def test_subclass(self):
|
|
class Base(object):
|
|
pass
|
|
class Foo(Base):
|
|
__slots__ = 'bar'
|
|
self.assert_('__dict__' not in Foo.__dict__)
|
|
foo = Foo()
|
|
self.assert_(hasattr(foo, '__dict__'))
|
|
foo.bar = 'hello bar'
|
|
foo.foo = 'hello foo'
|
|
self.assertEqual(foo.bar, 'hello bar')
|
|
self.assertEqual(foo.__dict__, {'foo': 'hello foo'})
|
|
|
|
def test_subclass_mro(self):
|
|
class Base(object):
|
|
pass
|
|
class Slotted(object):
|
|
__slots__ = 'baz'
|
|
class Foo(Slotted, Base):
|
|
__slots__ = 'bar'
|
|
if strict:
|
|
self.assert_('__dict__' in Foo.__dict__)
|
|
self.assertEqual(Foo.__dict__['__dict__'].__objclass__, Foo)
|
|
foo = Foo()
|
|
self.assert_(hasattr(foo, '__dict__'))
|
|
foo.bar = 'hello bar'
|
|
foo.baz = 'hello baz'
|
|
foo.foo = 'hello foo'
|
|
self.assertEqual(foo.bar, 'hello bar')
|
|
self.assertEqual(foo.baz, 'hello baz')
|
|
self.assertEqual(foo.__dict__, {'foo': 'hello foo'})
|
|
|
|
class Bar(Slotted, Base):
|
|
pass
|
|
if strict:
|
|
self.assert_('__dict__' in Bar.__dict__)
|
|
self.assertEqual(Bar.__dict__['__dict__'].__objclass__, Bar)
|
|
bar = Bar()
|
|
self.assert_(hasattr(bar, '__dict__'))
|
|
bar.bar = 'hello bar'
|
|
bar.baz = 'hello baz'
|
|
bar.foo = 'hello foo'
|
|
self.assertEqual(bar.bar, 'hello bar')
|
|
self.assertEqual(bar.baz, 'hello baz')
|
|
self.assertEqual(bar.__dict__, {'foo': 'hello foo', 'bar': 'hello bar'})
|
|
|
|
def test_subclass_oldstyle(self):
|
|
class OldBase:
|
|
pass
|
|
class Foo(OldBase, object):
|
|
__slots__ = 'bar'
|
|
if strict:
|
|
self.assert_('__dict__' in Foo.__dict__)
|
|
self.assertEqual(Foo.__dict__['__dict__'].__objclass__, Foo)
|
|
foo = Foo()
|
|
self.assert_(hasattr(foo, '__dict__'))
|
|
foo.bar = 'hello bar'
|
|
foo.foo = 'hello foo'
|
|
self.assertEqual(foo.bar, 'hello bar')
|
|
self.assertEqual(foo.__dict__, {'foo': 'hello foo'})
|
|
|
|
class Bar(OldBase, object):
|
|
__slots__ = '__dict__'
|
|
self.assert_('__dict__' in Bar.__dict__)
|
|
self.assertEqual(Bar.__dict__['__dict__'].__objclass__, Bar)
|
|
bar = Bar()
|
|
self.assert_(hasattr(bar, '__dict__'))
|
|
bar.bar = 'hello bar'
|
|
bar.foo = 'hello foo'
|
|
self.assertEqual(bar.bar, 'hello bar')
|
|
self.assertEqual(bar.__dict__, {'foo': 'hello foo', 'bar': 'hello bar'})
|
|
|
|
def test_mixin_oldstyle(self):
|
|
class OldBase:
|
|
pass
|
|
class NewBase(object):
|
|
pass
|
|
class Baz(NewBase, OldBase):
|
|
__slots__ = 'baz'
|
|
self.assert_('__dict__' not in Baz.__dict__)
|
|
baz = Baz()
|
|
self.assert_(hasattr(baz, '__dict__'))
|
|
baz.baz = 'hello baz'
|
|
baz.bar = 'hello bar'
|
|
self.assertEqual(baz.baz, 'hello baz')
|
|
self.assertEqual(baz.bar, 'hello bar')
|
|
self.assertEqual(baz.__dict__, {'bar': 'hello bar'})
|
|
|
|
|
|
class SlottedWithWeakrefTestCase(unittest.TestCase):
|
|
|
|
def test_subclass_oldstyle(self):
|
|
class OldBase:
|
|
pass
|
|
class Foo(OldBase, object):
|
|
__slots__ = '__dict__'
|
|
self.assert_(hasattr(Foo, '__weakref__'))
|
|
|
|
|
|
def test_main():
|
|
test_support.run_unittest(SlottedTestCase,
|
|
SlottedWithDictTestCase,
|
|
SlottedWithWeakrefTestCase)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
test_main()
|