class_docstr: TestRunner to handle running various tests
docstr: Process rules and test files in the the rule directory
docstr_tok: ["Process","rules","and","test","files","in","the","the","rule","directory"]
code: def _process_directory(self, directory):
      """Process rules and test files in the the rule directory"""
      print("\nRunning tests for files found in: {}".format(directory))
  
      for root, event_files in self._get_test_files(directory):
          for event_file in event_files:
              full_path = os.path.join(root, event_file)
              if (
                  self._files_filter
                  and full_path not in self._files_filter
              ):
                  continue
              self._process_test_file(full_path)
  
imports: import argparse
  import os
  import jmespath
  from mock import patch, MagicMock
  from streamalert.alert_processor import main
  from streamalert.alert_processor.helpers import compose_alert
  from streamalert.alert_processor.outputs.output_base import OutputDispatcher
  from streamalert.classifier import classifier
  from streamalert.rules_engine import rules_engine
  from streamalert.shared import rule
  from streamalert.shared.config import ConfigError
  from streamalert.shared.logger import get_logger
  from streamalert.shared.stats import RuleStatisticTracker
  from streamalert_cli.helpers import check_credentials
  from streamalert_cli.test.format import format_green, format_red, format_underline, format_yellow
  from streamalert_cli.test.mocks import LookupTableMocks, ThreatIntelMocks
  from streamalert_cli.test.event_file import TestEventFile
  from streamalert_cli.utils import CLICommand, DirectoryType, generate_subparser, UniqueSortedFileListAction, UniqueSortedListAction
label_desc: Use image node_id 10 for calling the TestRunner obj's underlying member method code with example usage: obj._process_directory(directory) without return types