docstr: The EmitterGroup.add
docstr_tok: ["The","EmitterGroup.add"]
code: def test_group_add_emitter(self):
      """The EmitterGroup.add"""
      grp = EmitterGroup(em1=Event)
      grp.em1.connect(self.record_event)
      self.result = None
      ev = grp.em1()
      self.assert_result(event=ev, type="em1")
  
      grp.add(em2=BasicEvent)
      grp.em2.connect(self.record_event)
      ev = grp.em2()
      self.assert_result(event=ev, type="em2", event_class=BasicEvent)
  
      grp.add(em3=TypedEvent)
      grp.em3.connect(self.record_event)
      ev = grp.em3(test_key=2)
      self.assert_result(
          event=ev,
          type="typed_event",
          event_class=TypedEvent,
          test_key=2,
      )
  
      try:
          grp.add(em3=Event)
          assert False, "Double-added emitter"
      except ValueError:
          pass
  
      try:
          grp.add(add=Event)
          assert False, "Added event with invalid name"
      except ValueError:
          pass
  
imports: import unittest
  import copy
  from vispy.util.event import Event, EventEmitter, EmitterGroup
  from vispy.util import use_log_level
  from vispy.testing import run_tests_if_main, assert_true, assert_raises
label_desc: Use image node_id 2 for calling the TestGroups obj's underlying member method code with example usage: obj.test_group_add_emitter() without return types