| Index: third_party/twisted_8_1/twisted/test/test_rebuild.py
|
| diff --git a/third_party/twisted_8_1/twisted/test/test_rebuild.py b/third_party/twisted_8_1/twisted/test/test_rebuild.py
|
| deleted file mode 100644
|
| index c96853a408d716c68fe322835bcb53792def4def..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/test/test_rebuild.py
|
| +++ /dev/null
|
| @@ -1,217 +0,0 @@
|
| -# Copyright (c) 2001-2007 Twisted Matrix Laboratories.
|
| -# See LICENSE for details.
|
| -
|
| -
|
| -import sys, os
|
| -import new
|
| -
|
| -from twisted.trial import unittest
|
| -from twisted.python import rebuild
|
| -
|
| -import crash_test_dummy
|
| -f = crash_test_dummy.foo
|
| -
|
| -class Foo: pass
|
| -class Bar(Foo): pass
|
| -class Baz(object): pass
|
| -class Buz(Bar, Baz): pass
|
| -
|
| -class RebuildTestCase(unittest.TestCase):
|
| - """
|
| - Simple testcase for rebuilding, to at least exercise the code.
|
| - """
|
| - def setUp(self):
|
| - self.libPath = self.mktemp()
|
| - os.mkdir(self.libPath)
|
| - self.fakelibPath = os.path.join(self.libPath, 'twisted_rebuild_fakelib')
|
| - os.mkdir(self.fakelibPath)
|
| - file(os.path.join(self.fakelibPath, '__init__.py'), 'w').close()
|
| - sys.path.insert(0, self.libPath)
|
| -
|
| - def tearDown(self):
|
| - sys.path.remove(self.libPath)
|
| -
|
| - def testFileRebuild(self):
|
| - from twisted.python.util import sibpath
|
| - import shutil, time
|
| - shutil.copyfile(sibpath(__file__, "myrebuilder1.py"),
|
| - os.path.join(self.fakelibPath, "myrebuilder.py"))
|
| - from twisted_rebuild_fakelib import myrebuilder
|
| - a = myrebuilder.A()
|
| - try:
|
| - object
|
| - except NameError:
|
| - pass
|
| - else:
|
| - from twisted.test import test_rebuild
|
| - b = myrebuilder.B()
|
| - class C(myrebuilder.B):
|
| - pass
|
| - test_rebuild.C = C
|
| - c = C()
|
| - i = myrebuilder.Inherit()
|
| - self.assertEquals(a.a(), 'a')
|
| - # necessary because the file has not "changed" if a second has not gone
|
| - # by in unix. This sucks, but it's not often that you'll be doing more
|
| - # than one reload per second.
|
| - time.sleep(1.1)
|
| - shutil.copyfile(sibpath(__file__, "myrebuilder2.py"),
|
| - os.path.join(self.fakelibPath, "myrebuilder.py"))
|
| - rebuild.rebuild(myrebuilder)
|
| - try:
|
| - object
|
| - except NameError:
|
| - pass
|
| - else:
|
| - b2 = myrebuilder.B()
|
| - self.assertEquals(b2.b(), 'c')
|
| - self.assertEquals(b.b(), 'c')
|
| - self.assertEquals(i.a(), 'd')
|
| - self.assertEquals(a.a(), 'b')
|
| - # more work to be done on new-style classes
|
| - # self.assertEquals(c.b(), 'c')
|
| -
|
| - def testRebuild(self):
|
| - """
|
| - Rebuilding an unchanged module.
|
| - """
|
| - # This test would actually pass if rebuild was a no-op, but it
|
| - # ensures rebuild doesn't break stuff while being a less
|
| - # complex test than testFileRebuild.
|
| -
|
| - x = crash_test_dummy.X('a')
|
| -
|
| - rebuild.rebuild(crash_test_dummy, doLog=False)
|
| - # Instance rebuilding is triggered by attribute access.
|
| - x.do()
|
| - self.failUnlessIdentical(x.__class__, crash_test_dummy.X)
|
| -
|
| - self.failUnlessIdentical(f, crash_test_dummy.foo)
|
| -
|
| - def testComponentInteraction(self):
|
| - x = crash_test_dummy.XComponent()
|
| - x.setAdapter(crash_test_dummy.IX, crash_test_dummy.XA)
|
| - oldComponent = x.getComponent(crash_test_dummy.IX)
|
| - rebuild.rebuild(crash_test_dummy, 0)
|
| - newComponent = x.getComponent(crash_test_dummy.IX)
|
| -
|
| - newComponent.method()
|
| -
|
| - self.assertEquals(newComponent.__class__, crash_test_dummy.XA)
|
| -
|
| - # Test that a duplicate registerAdapter is not allowed
|
| - from twisted.python import components
|
| - self.failUnlessRaises(ValueError, components.registerAdapter,
|
| - crash_test_dummy.XA, crash_test_dummy.X,
|
| - crash_test_dummy.IX)
|
| -
|
| - def testUpdateInstance(self):
|
| - global Foo, Buz
|
| -
|
| - b = Buz()
|
| -
|
| - class Foo:
|
| - def foo(self):
|
| - pass
|
| - class Buz(Bar, Baz):
|
| - x = 10
|
| -
|
| - rebuild.updateInstance(b)
|
| - assert hasattr(b, 'foo'), "Missing method on rebuilt instance"
|
| - assert hasattr(b, 'x'), "Missing class attribute on rebuilt instance"
|
| -
|
| - def testBananaInteraction(self):
|
| - from twisted.python import rebuild
|
| - from twisted.spread import banana
|
| - rebuild.latestClass(banana.Banana)
|
| -
|
| -
|
| -
|
| -class NewStyleTestCase(unittest.TestCase):
|
| - """
|
| - Tests for rebuilding new-style classes of various sorts.
|
| - """
|
| - def setUp(self):
|
| - self.m = new.module('whipping')
|
| - sys.modules['whipping'] = self.m
|
| -
|
| -
|
| - def tearDown(self):
|
| - del sys.modules['whipping']
|
| - del self.m
|
| -
|
| -
|
| - def test_slots(self):
|
| - """
|
| - Try to rebuild a new style class with slots defined.
|
| - """
|
| - classDefinition = (
|
| - "class SlottedClass(object):\n"
|
| - " __slots__ = ['a']\n")
|
| -
|
| - exec classDefinition in self.m.__dict__
|
| - inst = self.m.SlottedClass()
|
| - inst.a = 7
|
| - exec classDefinition in self.m.__dict__
|
| - rebuild.updateInstance(inst)
|
| - self.assertEqual(inst.a, 7)
|
| - self.assertIdentical(type(inst), self.m.SlottedClass)
|
| -
|
| - if sys.version_info < (2, 6):
|
| - test_slots.skip = "__class__ assignment for class with slots is only available starting Python 2.6"
|
| -
|
| -
|
| - def test_errorSlots(self):
|
| - """
|
| - Try to rebuild a new style class with slots defined: this should fail.
|
| - """
|
| - classDefinition = (
|
| - "class SlottedClass(object):\n"
|
| - " __slots__ = ['a']\n")
|
| -
|
| - exec classDefinition in self.m.__dict__
|
| - inst = self.m.SlottedClass()
|
| - inst.a = 7
|
| - exec classDefinition in self.m.__dict__
|
| - self.assertRaises(rebuild.RebuildError, rebuild.updateInstance, inst)
|
| -
|
| - if sys.version_info >= (2, 6):
|
| - test_errorSlots.skip = "__class__ assignment for class with slots should work starting Python 2.6"
|
| -
|
| -
|
| - def test_typeSubclass(self):
|
| - """
|
| - Try to rebuild a base type subclass.
|
| - """
|
| - classDefinition = (
|
| - "class ListSubclass(list):\n"
|
| - " pass\n")
|
| -
|
| - exec classDefinition in self.m.__dict__
|
| - inst = self.m.ListSubclass()
|
| - inst.append(2)
|
| - exec classDefinition in self.m.__dict__
|
| - rebuild.updateInstance(inst)
|
| - self.assertEqual(inst[0], 2)
|
| - self.assertIdentical(type(inst), self.m.ListSubclass)
|
| -
|
| -
|
| - def test_instanceSlots(self):
|
| - """
|
| - Test that when rebuilding an instance with a __slots__ attribute, it
|
| - fails accurately instead of giving a L{rebuild.RebuildError}.
|
| - """
|
| - classDefinition = (
|
| - "class NotSlottedClass(object):\n"
|
| - " pass\n")
|
| -
|
| - exec classDefinition in self.m.__dict__
|
| - inst = self.m.NotSlottedClass()
|
| - inst.__slots__ = ['a']
|
| - classDefinition = (
|
| - "class NotSlottedClass:\n"
|
| - " pass\n")
|
| - exec classDefinition in self.m.__dict__
|
| - # Moving from new-style class to old-style should fail.
|
| - self.assertRaises(TypeError, rebuild.updateInstance, inst)
|
| -
|
|
|