code: def test_notify_range(self):
      text = self.text
      color = self.color
      eq = self.assertEqual
  
      # Colorizing already scheduled.
      save_id = color.after_id
      eq(self.root.tk.call("after", "info", save_id)[1], "timer")
      self.assertFalse(color.colorizing)
      self.assertFalse(color.stop_colorizing)
      self.assertTrue(color.allow_colorizing)
  
      # Coloring scheduled and colorizing in progress.
      color.colorizing = True
      color.notify_range("1.0", "end")
      self.assertFalse(color.stop_colorizing)
      eq(color.after_id, save_id)
  
      # No colorizing scheduled and colorizing in progress.
      text.after_cancel(save_id)
      color.after_id = None
      color.notify_range("1.0", "1.0+3c")
      self.assertTrue(color.stop_colorizing)
      self.assertIsNotNone(color.after_id)
      eq(self.root.tk.call("after", "info", color.after_id)[1], "timer")
      # New event scheduled.
      self.assertNotEqual(color.after_id, save_id)
  
      # No colorizing scheduled and colorizing off.
      text.after_cancel(color.after_id)
      color.after_id = None
      color.allow_colorizing = False
      color.notify_range("1.4", "1.4+10c")
      # Nothing scheduled when colorizing is off.
      self.assertIsNone(color.after_id)
  
imports: from idlelib import colorizer
  from test.support import requires
  import unittest
  from unittest import mock
  from idlelib.idle_test.tkinter_testing_utils import run_in_tk_mainloop
  from functools import partial
  import textwrap
  from tkinter import Tk, Text
  from idlelib import config
  from idlelib.percolator import Percolator
label_desc: Use image node_id 10 for calling the ColorDelegatorTest obj's underlying member method code with example usage: obj.test_notify_range() without return types