docstr: Test ForwardMsgCache's CacheStatsProvider implementation.
docstr_tok: ["Test","ForwardMsgCache","'s","CacheStatsProvider","implementation","."]
code: def test_cache_stats_provider(self):
      """Test ForwardMsgCache's CacheStatsProvider implementation."""
      cache = ForwardMsgCache()
      session = _create_mock_session()
  
      # Test empty cache
      self.assertEqual([], cache.get_stats())
  
      msg1 = create_dataframe_msg([1, 2, 3])
      populate_hash_if_needed(msg1)
      cache.add_message(msg1, session, 0)
  
      msg2 = create_dataframe_msg([5, 4, 3, 2, 1, 0])
      populate_hash_if_needed(msg2)
      cache.add_message(msg2, session, 0)
  
      # Test cache with messages
      expected = [
          CacheStat(
              category_name="ForwardMessageCache",
              cache_name="",
              byte_length=msg1.ByteSize() + msg2.ByteSize(),
          ),
      ]
      self.assertEqual(set(expected), set(cache.get_stats()))
  
imports: import unittest
  from unittest.mock import MagicMock
  from streamlit import config
  from streamlit.runtime import app_session
  from streamlit.runtime.forward_msg_cache import ForwardMsgCache, create_reference_msg, populate_hash_if_needed
  from streamlit.runtime.stats import CacheStat
  from streamlit.testing.v1.util import patch_config_options
  from tests.streamlit.message_mocks import create_dataframe_msg
label_desc: Use image node_id 10 for calling the ForwardMsgCacheTest obj's underlying member method code with example usage: obj.test_cache_stats_provider() without return types