code: def assert_dataflow_plan_text_equal(  # noqa: D
      request: FixtureRequest,
      mf_test_session_state: MetricFlowTestSessionState,
      dataflow_plan: DataflowPlan,
      sql_client: SqlClient,
  ) -> None:
      assert_plan_snapshot_text_equal(
          request=request,
          mf_test_session_state=mf_test_session_state,
          plan=dataflow_plan,
          plan_snapshot_text=dataflow_plan_as_text(dataflow_plan),
          incomparable_strings_replacement_function=replace_dataset_id_hash,
          additional_sub_directories_for_snapshots=(
              sql_client.sql_engine_type.value,
          ),
      )
  
imports: from __future__ import annotations
  import difflib
  import logging
  import os
  import re
  import webbrowser
  from typing import Any, Callable, List, Optional, Tuple, TypeVar
  import tabulate
  from _pytest.fixtures import FixtureRequest
  from dbt_semantic_interfaces.pretty_print import pformat_big_objects
  from metricflow.dag.mf_dag import MetricFlowDag
  from metricflow.dataflow.dataflow_plan import DataflowPlan
  from metricflow.dataflow.dataflow_plan_to_text import dataflow_plan_as_text
  from metricflow.execution.execution_plan import ExecutionPlan
  from metricflow.execution.execution_plan_to_text import execution_plan_to_text
  from metricflow.mf_logging.pretty_print import mf_pformat
  from metricflow.model.semantics.linkable_spec_resolver import LinkableElementSet
  from metricflow.naming.object_builder_scheme import ObjectBuilderNamingScheme
  from metricflow.protocols.sql_client import SqlClient
  from metricflow.specs.specs import InstanceSpecSet, LinkableSpecSet
  from metricflow.test.fixtures.setup_fixtures import MetricFlowTestSessionState, check_sql_engine_snapshot_marker
label_desc: Use image node_id 8 for calling a global function with example usage: assert_dataflow_plan_text_equal(request, mf_test_session_state, dataflow_plan, sql_client) without return types