code: def test_validation_warnings(self):
      class InvalidConfigOption(c.BaseConfigOption):
          def pre_validation(self, config, key_name):
              self.warnings.append("pre_validation warning")
  
          def run_validation(self, value):
              self.warnings.append("run_validation warning")
  
          def post_validation(self, config, key_name):
              self.warnings.append("post_validation warning")
  
      conf = base.Config(
          schema=(("invalid_option", InvalidConfigOption()),)
      )
  
      errors, warnings = conf.validate()
  
      self.assertEqual(errors, [])
      self.assertEqual(
          warnings,
          [
              ("invalid_option", "pre_validation warning"),
              ("invalid_option", "run_validation warning"),
              ("invalid_option", "post_validation warning"),
          ],
      )
  
imports: import os
  import unittest
  from mkdocs import exceptions
  from mkdocs.config import base
  from mkdocs.config import config_options
  from mkdocs.config import defaults
  from mkdocs.config.base import ValidationError
  from mkdocs.tests.base import change_dir, tempdir
label_desc: Use image node_id 16 for calling the ConfigBaseTests obj's underlying member method code with example usage: obj.test_validation_warnings() without return types