code: def test_cbwc006_grouping_callbacks(dash_duo):
      app = grouping_app()
      dash_duo.start_server(app)
  
      dash_duo.wait_for_text_to_equal("#title", "Dash To-Do list")
  
      new_item = dash_duo.find_element("#new-item")
      add_item = dash_duo.find_element("#add")
  
      def assert_count(items):
          assert (
              len(dash_duo.find_elements("#list-container>div"))
              == items
          )
  
      def assert_callback_context(items_text):
          # Check args_grouping
          args_grouping = dict(
              items=dict(
                  all=[
                      {
                          "id": {"id": i},
                          "property": "children",
                          "value": text,
                          "str_id": stringify_id({"id": i}),
                          "triggered": False,
                      }
                      for i, text in enumerate(items_text[:-1])
                  ],
                  new=dict(
                      id="new-item",
                      property="value",
                      value=items_text[-1],
                      str_id="new-item",
                      triggered=False,
                  ),
              ),
              triggers=[
                  {
                      "id": "add",
                      "property": "n_clicks",
                      "value": len(items_text),
                      "str_id": "add",
                      "triggered": True,
                  },
                  {
                      "id": "new-item",
                      "property": "n_submit",
                      "value": None,
                      "str_id": "new-item",
                      "triggered": False,
                  },
              ],
          )
          dash_duo.wait_for_text_to_equal(
              "#cc-args-grouping", repr(args_grouping)
          )
  
          # Check outputs_grouping
          outputs_grouping = dict(
              list_container={
                  "id": "list-container",
                  "property": "children",
              },
              new_item={"id": "new-item", "property": "value"},
              totals={"id": "totals", "property": "children"},
              cc_args_grouping={
                  "id": "cc-args-grouping",
                  "property": "children",
              },
              cc_outputs_grouping={
                  "id": "cc-outputs-grouping",
                  "property": "children",
              },
          )
          dash_duo.wait_for_text_to_equal(
              "#cc-outputs-grouping", repr(outputs_grouping)
          )
  
      new_item.send_keys("apples")
      add_item.click()
      dash_duo.wait_for_text_to_equal("#totals", "1 total item(s)")
      assert_count(1)
      assert_callback_context(["apples"])
  
      new_item.send_keys("bananas")
      add_item.click()
      dash_duo.wait_for_text_to_equal("#totals", "2 total item(s)")
      assert_count(2)
      assert_callback_context(["apples", "bananas"])
  
      new_item.send_keys("carrots")
      add_item.click()
      dash_duo.wait_for_text_to_equal("#totals", "3 total item(s)")
      assert_count(3)
      assert_callback_context(["apples", "bananas", "carrots"])
  
file_path: dash/tests/integration/callbacks/test_wildcards.py
imports: import pytest
  import re
  from selenium.webdriver.common.keys import Keys
  import json
  from dash.testing import wait
  import dash
  from dash import Dash, Input, Output, State, ALL, ALLSMALLER, MATCH, html, dcc
  from tests.assets.todo_app import todo_app
  from tests.assets.grouping_app import grouping_app
label_desc: Use image node_id 9 for calling a global function with example usage: test_cbwc006_grouping_callbacks(dash_duo) without return types