code: def test_proc_exited(self):
      waiter = self.loop.create_future()
      transport, protocol = self.create_transport(waiter)
      transport._process_exited(6)
      self.loop.run_until_complete(waiter)
  
      self.assertEqual(transport.get_returncode(), 6)
  
      self.assertTrue(protocol.connection_made.called)
      self.assertTrue(protocol.process_exited.called)
      self.assertTrue(protocol.connection_lost.called)
      self.assertEqual(protocol.connection_lost.call_args[0], (None,))
  
      self.assertFalse(transport.is_closing())
      self.assertIsNone(transport._loop)
      self.assertIsNone(transport._proc)
      self.assertIsNone(transport._protocol)
  
      # methods must raise ProcessLookupError if the process exited
      self.assertRaises(
          ProcessLookupError, transport.send_signal, signal.SIGTERM
      )
      self.assertRaises(ProcessLookupError, transport.terminate)
      self.assertRaises(ProcessLookupError, transport.kill)
  
      transport.close()
  
imports: import os
  import signal
  import sys
  import textwrap
  import unittest
  import warnings
  from unittest import mock
  import asyncio
  from asyncio import base_subprocess
  from asyncio import subprocess
  from test.test_asyncio import utils
  from test import support
  from test.support import os_helper
label_desc: Use image node_id 3 for calling the SubprocessTransportTests obj's underlying member method code with example usage: obj.test_proc_exited() without return types