test_class.file: api/src/test/java/edu/wpi/first/shuffleboard/api/util/ShutdownHooksTest.java
test_class.identifier: ShutdownHooksTest
test_class.superclass: extends UtilityClassTest<ShutdownHooks>
test_case.body: @Test
    public void testRemoveHook() {
      // given
      boolean[] ran = {false};
      ShutdownHooks.Hook hook = () -> ran[0] = true;
  
      // when
      ShutdownHooks.addHook(hook);
      ShutdownHooks.removeHook(hook);
      ShutdownHooks.runAllHooks();
  
      // then
      assertFalse(ran[0], "The hook should not have run");
    }
test_case.class_method_signature: ShutdownHooksTest.testRemoveHook()
test_case.full_signature: @Test public void testRemoveHook()
test_case.identifier: testRemoveHook
test_case.invocations: addHook removeHook runAllHooks assertFalse
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testRemoveHook()
focal_class.declarator: hooks = new ConcurrentLinkedQueue<>()
focal_class.modifier: private static final
focal_class.original_string: private static final Queue<Hook> hooks = new ConcurrentLinkedQueue<>();
focal_class.type: Queue<Hook>
focal_class.var_name: hooks
focal_class.declarator: runningHooks = false
focal_class.modifier: private static volatile
focal_class.original_string: private static volatile boolean runningHooks = false;
focal_class.type: boolean
focal_class.var_name: runningHooks
focal_class.file: api/src/main/java/edu/wpi/first/shuffleboard/api/util/ShutdownHooks.java
focal_class.identifier: ShutdownHooks
focal_class.class_method_signature: ShutdownHooks.ShutdownHooks()
focal_class.full_signature: private  ShutdownHooks()
focal_class.identifier: ShutdownHooks
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.signature:  ShutdownHooks()
focal_class.class_method_signature: ShutdownHooks.addHook(Hook hook)
focal_class.full_signature: public static void addHook(Hook hook)
focal_class.identifier: addHook
focal_class.modifiers: public static
focal_class.parameters: (Hook hook)
focal_class.return: void
focal_class.signature: void addHook(Hook hook)
focal_class.class_method_signature: ShutdownHooks.removeHook(Hook hook)
focal_class.full_signature: public static void removeHook(Hook hook)
focal_class.identifier: removeHook
focal_class.modifiers: public static
focal_class.parameters: (Hook hook)
focal_class.return: void
focal_class.signature: void removeHook(Hook hook)
focal_class.class_method_signature: ShutdownHooks.runAllHooks()
focal_class.full_signature: public static void runAllHooks()
focal_class.identifier: runAllHooks
focal_class.modifiers: public static
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void runAllHooks()
focal_class.class_method_signature: ShutdownHooks.reset()
focal_class.full_signature: @VisibleForTesting static void reset()
focal_class.identifier: reset
focal_class.modifiers: @VisibleForTesting static
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void reset()
focal_class.class_method_signature: ShutdownHooks.removeAllHooks()
focal_class.full_signature: @VisibleForTesting static void removeAllHooks()
focal_class.identifier: removeAllHooks
focal_class.modifiers: @VisibleForTesting static
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void removeAllHooks()
focal_method.body: public static void removeHook(Hook hook) {
      if (runningHooks) {
        return;
      }
      hooks.remove(hook);
    }
focal_method.class_method_signature: ShutdownHooks.removeHook(Hook hook)
focal_method.full_signature: public static void removeHook(Hook hook)
focal_method.identifier: removeHook
focal_method.invocations: remove
focal_method.modifiers: public static
focal_method.parameters: (Hook hook)
focal_method.return: void
focal_method.signature: void removeHook(Hook hook)