You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					78 lines
				
				2.5 KiB
			
		
		
			
		
	
	
					78 lines
				
				2.5 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								from __future__ import print_function
							 | 
						||
| 
								 | 
							
								from __future__ import absolute_import
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import sys
							 | 
						||
| 
								 | 
							
								import unittest
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import greenlet
							 | 
						||
| 
								 | 
							
								from . import _test_extension
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class CAPITests(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								    def test_switch(self):
							 | 
						||
| 
								 | 
							
								        self.assertEqual(
							 | 
						||
| 
								 | 
							
								            50, _test_extension.test_switch(greenlet.greenlet(lambda: 50)))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_switch_kwargs(self):
							 | 
						||
| 
								 | 
							
								        def foo(x, y):
							 | 
						||
| 
								 | 
							
								            return x * y
							 | 
						||
| 
								 | 
							
								        g = greenlet.greenlet(foo)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(6, _test_extension.test_switch_kwargs(g, x=3, y=2))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_setparent(self):
							 | 
						||
| 
								 | 
							
								        def foo():
							 | 
						||
| 
								 | 
							
								            def bar():
							 | 
						||
| 
								 | 
							
								                greenlet.getcurrent().parent.switch()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                # This final switch should go back to the main greenlet, since
							 | 
						||
| 
								 | 
							
								                # the test_setparent() function in the C extension should have
							 | 
						||
| 
								 | 
							
								                # reparented this greenlet.
							 | 
						||
| 
								 | 
							
								                greenlet.getcurrent().parent.switch()
							 | 
						||
| 
								 | 
							
								                raise AssertionError("Should never have reached this code")
							 | 
						||
| 
								 | 
							
								            child = greenlet.greenlet(bar)
							 | 
						||
| 
								 | 
							
								            child.switch()
							 | 
						||
| 
								 | 
							
								            greenlet.getcurrent().parent.switch(child)
							 | 
						||
| 
								 | 
							
								            greenlet.getcurrent().parent.throw(
							 | 
						||
| 
								 | 
							
								                AssertionError("Should never reach this code"))
							 | 
						||
| 
								 | 
							
								        foo_child = greenlet.greenlet(foo).switch()
							 | 
						||
| 
								 | 
							
								        self.assertEqual(None, _test_extension.test_setparent(foo_child))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_getcurrent(self):
							 | 
						||
| 
								 | 
							
								        _test_extension.test_getcurrent()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_new_greenlet(self):
							 | 
						||
| 
								 | 
							
								        self.assertEqual(-15, _test_extension.test_new_greenlet(lambda: -15))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_raise_greenlet_dead(self):
							 | 
						||
| 
								 | 
							
								        self.assertRaises(
							 | 
						||
| 
								 | 
							
								            greenlet.GreenletExit, _test_extension.test_raise_dead_greenlet)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_raise_greenlet_error(self):
							 | 
						||
| 
								 | 
							
								        self.assertRaises(
							 | 
						||
| 
								 | 
							
								            greenlet.error, _test_extension.test_raise_greenlet_error)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_throw(self):
							 | 
						||
| 
								 | 
							
								        seen = []
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        def foo():
							 | 
						||
| 
								 | 
							
								            try:
							 | 
						||
| 
								 | 
							
								                greenlet.getcurrent().parent.switch()
							 | 
						||
| 
								 | 
							
								            except ValueError:
							 | 
						||
| 
								 | 
							
								                seen.append(sys.exc_info()[1])
							 | 
						||
| 
								 | 
							
								            except greenlet.GreenletExit:
							 | 
						||
| 
								 | 
							
								                raise AssertionError
							 | 
						||
| 
								 | 
							
								        g = greenlet.greenlet(foo)
							 | 
						||
| 
								 | 
							
								        g.switch()
							 | 
						||
| 
								 | 
							
								        _test_extension.test_throw(g)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(len(seen), 1)
							 | 
						||
| 
								 | 
							
								        self.assertTrue(
							 | 
						||
| 
								 | 
							
								            isinstance(seen[0], ValueError),
							 | 
						||
| 
								 | 
							
								            "ValueError was not raised in foo()")
							 | 
						||
| 
								 | 
							
								        self.assertEqual(
							 | 
						||
| 
								 | 
							
								            str(seen[0]),
							 | 
						||
| 
								 | 
							
								            'take that sucka!',
							 | 
						||
| 
								 | 
							
								            "message doesn't match")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if __name__ == '__main__':
							 | 
						||
| 
								 | 
							
								    unittest.main()
							 |