code: def test_multiple_dirs_can_cause_rebuild(
      self, site_dir, extra_dir, docs_dir
  ):
      started_building = threading.Barrier(2)
  
      def rebuild():
          started_building.wait(timeout=10)
          content1 = Path(docs_dir, "foo.docs").read_text()
          content2 = Path(extra_dir, "foo.extra").read_text()
          Path(site_dir, "foo.site").write_text(content1 + content2)
  
      with testing_server(site_dir, rebuild) as server:
          server.watch(docs_dir)
          server.watch(extra_dir)
          time.sleep(0.01)
  
          Path(docs_dir, "foo.docs").write_text("docs2")
          started_building.wait(timeout=10)
  
          _, output = do_request(server, "GET /foo.site")
          self.assertEqual(output, "docs2extra1")
  
          Path(extra_dir, "foo.extra").write_text("extra2")
          started_building.wait(timeout=10)
  
          _, output = do_request(server, "GET /foo.site")
          self.assertEqual(output, "docs2extra2")
  
imports: import contextlib
  import email
  import io
  import sys
  import threading
  import time
  import unittest
  from pathlib import Path
  from unittest import mock
  from mkdocs.livereload import LiveReloadServer
  from mkdocs.tests.base import change_dir, tempdir
label_desc: Use image node_id 7 for calling the BuildTests obj's underlying member method code with example usage: obj.test_multiple_dirs_can_cause_rebuild(site_dir, extra_dir, docs_dir) without return types