@@ -1616,5 +1616,75 @@ def test_child_watcher_replace_mainloop_existing(self):
16161616 new_loop .close ()
16171617
16181618
1619+ class TestFunctional (unittest .TestCase ):
1620+
1621+ def setUp (self ):
1622+ self .loop = asyncio .new_event_loop ()
1623+ asyncio .set_event_loop (self .loop )
1624+
1625+ def tearDown (self ):
1626+ self .loop .close ()
1627+ asyncio .set_event_loop (None )
1628+
1629+ def test_add_reader_invalid_argument (self ):
1630+ def assert_raises ():
1631+ return self .assertRaisesRegex (ValueError , r'Invalid file object' )
1632+
1633+ cb = lambda : None
1634+
1635+ with assert_raises ():
1636+ self .loop .add_reader (object (), cb )
1637+ with assert_raises ():
1638+ self .loop .add_writer (object (), cb )
1639+
1640+ with assert_raises ():
1641+ self .loop .remove_reader (object ())
1642+ with assert_raises ():
1643+ self .loop .remove_writer (object ())
1644+
1645+ def test_add_reader_or_writer_transport_fd (self ):
1646+ def assert_raises ():
1647+ return self .assertRaisesRegex (
1648+ RuntimeError ,
1649+ r'File descriptor .* is used by transport' )
1650+
1651+ async def runner ():
1652+ tr , pr = await self .loop .create_connection (
1653+ lambda : asyncio .Protocol (), sock = rsock )
1654+
1655+ try :
1656+ cb = lambda : None
1657+
1658+ with assert_raises ():
1659+ self .loop .add_reader (rsock , cb )
1660+ with assert_raises ():
1661+ self .loop .add_reader (rsock .fileno (), cb )
1662+
1663+ with assert_raises ():
1664+ self .loop .remove_reader (rsock )
1665+ with assert_raises ():
1666+ self .loop .remove_reader (rsock .fileno ())
1667+
1668+ with assert_raises ():
1669+ self .loop .add_writer (rsock , cb )
1670+ with assert_raises ():
1671+ self .loop .add_writer (rsock .fileno (), cb )
1672+
1673+ with assert_raises ():
1674+ self .loop .remove_writer (rsock )
1675+ with assert_raises ():
1676+ self .loop .remove_writer (rsock .fileno ())
1677+
1678+ finally :
1679+ tr .close ()
1680+
1681+ rsock , wsock = socket .socketpair ()
1682+ try :
1683+ self .loop .run_until_complete (runner ())
1684+ finally :
1685+ rsock .close ()
1686+ wsock .close ()
1687+
1688+
16191689if __name__ == '__main__' :
16201690 unittest .main ()
0 commit comments