code: def test_set_downstream(self, dag_maker):
      with dag_maker("test_set_downstream"):
          op_a = BashOperator(task_id="a", bash_command="echo a")
          op_b = BashOperator(task_id="b", bash_command="echo b")
          bash_op1 = BashOperator(task_id="c", bash_command="echo c")
          bash_op2 = BashOperator(task_id="d", bash_command="echo c")
          xcom_args_a = XComArg(op_a)
          xcom_args_b = XComArg(op_b)
  
          bash_op1 >> xcom_args_a >> xcom_args_b >> bash_op2
      dag_maker.create_dagrun()
      assert op_a in bash_op1.downstream_list
      assert op_b in op_a.downstream_list
      assert bash_op2 in op_b.downstream_list
  
imports: from __future__ import annotations
  import pytest
  from airflow.models.xcom_arg import XComArg
  from airflow.operators.bash import BashOperator
  from airflow.operators.python import PythonOperator
  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 3 for calling the TestXComArgBuild obj's underlying member method code with example usage: obj.test_set_downstream(dag_maker) without return types