code: def test_prune_dict(self, mode, expected):
      l1 = ["", 0, "1", None]
      d1 = {"a": None, "b": "", "c": "hi", "d": l1}
      d2 = {
          "a": None,
          "b": "",
          "c": d1,
          "d": l1,
          "e": [None, "", 0, d1, l1, [""]],
          "f": {},
          "g": [""],
      }
      assert prune_dict(d2, mode=mode) == expected
  
imports: from __future__ import annotations
  import itertools
  import re
  from typing import TYPE_CHECKING
  import pytest
  from airflow.exceptions import AirflowException
  from airflow.jobs.base_job_runner import BaseJobRunner
  from airflow.utils import helpers, timezone
  from airflow.utils.helpers import at_most_one, build_airflow_url_with_query, exactly_one, merge_dicts, prune_dict, validate_group_key, validate_key
  from airflow.utils.types import NOTSET
  from tests.test_utils.config import conf_vars
  from tests.test_utils.db import clear_db_dags, clear_db_runs
label_desc: Use image node_id 19 for calling the TestHelpers obj's underlying member method code with example usage: obj.test_prune_dict(mode, expected) without return types