code: def test_empty_name(self, mock_hook):
      mock_hook.return_value.delete_function.return_value = (
          self._DELETE_FUNCTION_EXPECTED
      )
      with pytest.raises(AttributeError) as ctx:
          CloudFunctionDeleteFunctionOperator(name="", task_id="id")
      err = ctx.value
      assert str(err) == "Empty parameter: name"
      mock_hook.assert_not_called()
  
imports: from __future__ import annotations
  from copy import deepcopy
  from unittest import mock
  import httplib2
  import pytest
  from googleapiclient.errors import HttpError
  from airflow.exceptions import AirflowException
  from airflow.providers.google.cloud.operators.functions import FUNCTION_NAME_PATTERN, CloudFunctionDeleteFunctionOperator, CloudFunctionDeployFunctionOperator, CloudFunctionInvokeFunctionOperator
  from airflow.version import version
label_desc: Use image node_id 4 for calling the TestGcfFunctionDelete obj's underlying member method code with example usage: obj.test_empty_name(mock_hook) without return types