class_docstr: Tests are in order with the design doc.
code: def test_chat(self):
      # Multi turn chat
      model = generative_models.GenerativeModel("gemini-m")
      chat = model.start_chat()
  
      self.responses["generate_content"] = [
          simple_response("first"),
          simple_response("second"),
          simple_response("third"),
      ]
  
      msg1 = "I really like fantasy books."
      response = chat.send_message(msg1)
      self.assertEqual(response.text, "first")
      self.assertEqual(
          self.observed_requests[0].contents[0].parts[0].text, msg1
      )
  
      msg2 = "I also like this image."
      response = chat.send_message(
          [msg2, PIL.Image.open(TEST_IMAGE_PATH)]
      )
  
      self.assertEqual(response.text, "second")
      self.assertEqual(
          self.observed_requests[1].contents[0].parts[0].text, msg1
      )
      self.assertEqual(
          self.observed_requests[1].contents[1].parts[0].text, "first"
      )
      self.assertEqual(
          self.observed_requests[1].contents[2].parts[0].text, msg2
      )
      self.assertEqual(
          self.observed_requests[1]
          .contents[2]
          .parts[1]
          .inline_data.data[:4],
          b"\x89PNG",
      )
  
      msg3 = "What things do I like?."
      response = chat.send_message(msg3)
      self.assertEqual(response.text, "third")
      self.assertLen(chat.history, 6)
  
imports: import collections
  from collections.abc import Iterable
  import copy
  import pathlib
  import unittest.mock
  from absl.testing import absltest
  from absl.testing import parameterized
  import google.ai.generativelanguage
  from google.generativeai import client
  from google.generativeai import generative_models
  from google.generativeai.types import content_types
  from google.generativeai.types import generation_types
  import PIL.Image
label_desc: Use image node_id 10 for calling the CUJTests obj's underlying member method code with example usage: obj.test_chat() without return types