Kai Ma

114 papers B 1C 4Journal 96Unranked 13
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Cui-Hua Zhang, Yu-Jia Li, Ze-Yun Hu, Changchun Hua, Kai Ma, Ying Zhang
2026 J jnl
IEEE Trans. Green Commun. Netw.
Yazhou Yuan, Zhuoyu Li, Wei Gong, Yanan Yu, Zhixin Liu, Kai Ma
2026 J jnl
IEEE Trans. Ind. Electron.
Hao Ding, Zengzeng Zhu, Xiaoqiang Guo, Shouxiang Li, Zhenbin Zhang, Kai Ma
2026 J jnl
IEEE Trans. Ind. Informatics
Qi Liu, Bo Yang, Mengqi Han, Mingxuan Cai, Kai Ma, Xinping Guan
2026 J jnl
IEEE Trans. Ind. Informatics
Kai Ma, Yifu Li, Jie Yang, Pei Liu, Yajing Zhang, Jianbo Li, Xinping Guan
2026 J jnl
IEEE Trans. Multim.
Ying Zhang, Haopeng Zhang, Maoliang Yin, Kai Ma, Cui-Hua Zhang, Changchun Hua
2025 J jnl
IEEE CAA J. Autom. Sinica
Jiawei Su, Zhixin Liu, Yaping Li, Yazhou Yuan, Kai Ma
2025 J jnl
IEEE Trans. Smart Grid
Mingyue Sun, Yazhou Yuan, Kai Ma, Zhixin Liu, Xiaoling Dong, Xiaoyuan Luo, Daniele Tarchi
2025 J jnl
CoRR
Chi Liu, Zhezhuang Xu, Jiawei Zhou, Yazhou Yuan, Kai Ma, Meng Yuan
2025 J jnl
IEEE Trans. Netw. Sci. Eng.
Yazhou Yuan, Ning Yu, Zhuolin Zheng, Yong Yang, Kai Ma, Zhixin Liu, Cailian Chen, Jianmin Zhang
2025 J jnl
IEEE Internet Things J.
Mingyue Sun, Yazhou Yuan, Kai Ma, Cailian Chen, Jianmin Zhang, Xiaoyuan Luo
2025 J jnl
IEEE Internet Things J.
Xiaocao Jin, Zhixin Liu, Kai Ma
2025 J jnl
IEEE Trans. Instrum. Meas.
Yazhou Yuan, Lili Zhou, Shihao Wang, Yi Guo, Kai Ma, Zhixin Liu
2025 J jnl
IEEE Trans. Smart Grid
Mingqi Xing, Dazhong Ma, Kai Ma, Qiuye Sun
2025 J jnl
IEEE Trans. Smart Grid
Dafeng Zhu, Bo Yang, Lei Li, Yu Wu, Haoran Deng, Zhaoyang Dong, Kai Ma, Xinping Guan
2025 J jnl
IEEE Trans. Ind. Informatics
Qi Liu, Bo Yang, Mingxuan Cai, Yuxiang Liu, Kai Ma, Xinping Guan
2024 J jnl
IEEE Trans. Mob. Comput.
Pei Liu, Kai Ma, Jie Yang, Bo Yang, Zhixin Liu
2024 J jnl
IEEE Trans. Ind. Informatics
Kai Ma, Chunfu Kang, Pei Liu, Yazhou Yuan, Jie Yang, Haibin Li
2024 J jnl
Expert Syst. Appl.
Jie Yang, Zehui Li, Kai Ma, Hui Li, Zongxu Jiao
2024 J jnl
IEEE Trans. Instrum. Meas.
Yazhou Yuan, Cheng Liu, Lili Zhou, Zhezhuang Xu, Zhixin Liu, Kai Ma
2024 J jnl
IEEE Internet Things J.
Pei Liu, Jianxiao Wang, Kai Ma, Qinglai Guo
2024 J jnl
IEEE Trans. Smart Grid
Dafeng Zhu, Bo Yang, Yu Wu, Haoran Deng, Zhaoyang Dong, Kai Ma, Xinping Guan
2024 J jnl
IEEE Trans. Ind. Informatics
Kai Ma, Pei Liu, Jie Yang, Bo Yang, Rong Wu, Kuan Zhang
2024 J jnl
IEEE Trans. Veh. Technol.
Zhixin Liu, Ben Zhu, Yuanai Xie, Kai Ma, Xinping Guan
2024 J jnl
IEEE Internet Things J.
Jiawei Su, Zhixin Liu, Yuanai Xie, Yaping Li, Kai Ma, Xinping Guan
2023 J jnl
IEEE Trans Autom. Sci. Eng.
Jie Yang, Hongru Liu, Kai Ma, Bo Yang, Josep M. Guerrero
2023 J jnl
IEEE Trans. Instrum. Meas.
Qi Liu, Bo Yang, Yuxiang Liu, Kai Ma, Xinping Guan
2023 J jnl
IEEE Trans. Mob. Comput.
Jie Yang, Yajing Zhang, Yazhou Yuan, Kai Ma, Jianbo Li
2023 C conf
IECON
Yazhou Yuan, Zhenghang Lian, Mingyue Sun, Zhixin Liu, Kai Ma
2023 J jnl
IEEE Internet Things J.
Xiaocao Jin, Zhixin Liu, Kai Ma
2023 J jnl
CoRR
Dafeng Zhu, Bo Yang, Yu Wu, Haoran Deng, Zhaoyang Dong, Kai Ma, Xinping Guan
2023 J jnl
IEEE Internet Things J.
Zhixin Liu, Junxiao Qi, Yanyan Shen, Kai Ma, Xinping Guan
2023 conf
RICAI
Kai Ma, Qiuhan Cao, Peng Zhao, Jie Yang
2023 J jnl
IEEE Trans. Veh. Technol.
Jiawei Su, Zhixin Liu, Yuanai Xie, Kai Ma, Hongyang Du, Jiawen Kang, Dusit Niyato
2022 J jnl
Adv. Eng. Informatics
Linlin Zha, Kai Ma, Guoqiang Li, Qi Fang, Xiaobin Hu
2022 J jnl
Adv. Eng. Informatics
Linlin Zha, Kai Ma, Guoqiang Li, Jie Yang, Qi Fang
2022 J jnl
CoRR
Qi Liu, Bo Yang, Zhaojian Wang, Dafeng Zhu, Xinyi Wang, Kai Ma, Xinping Guan
2022 J jnl
IEEE Trans. Netw. Sci. Eng.
Qi Liu, Bo Yang, Zhaojian Wang, Dafeng Zhu, Xinyi Wang, Kai Ma, Xinping Guan
2022 J jnl
CoRR
Jiaxin Cao, Bo Yang, Shanying Zhu, Kai Ma, Xinping Guan
2022 conf
ICCA
Kai Ma, Dongdong Qiao, Wenna Zhao, Shiliang Guo, Jie Yang
2022 J jnl
Medical Biol. Eng. Comput.
Hao Cheng, Kaijie Wu, Jie Tian, Kai Ma, Chaocheng Gu, Xinping Guan
2022 J jnl
IEEE Syst. J.
Peng Zhao, Chunxia Dou, Kai Ma, Zhanqiang Zhang, Bo Zhang
2022 C conf
IECON
Kai Ma, Yufei Dong, Peng Zhao, Jie Yang
2022 J jnl
IEEE Trans. Veh. Technol.
Kai Ma, Xiaoyan Hu, Jie Yang, Zhiyuan Yue, Bo Yang, Zhixin Liu, Xinping Guan
2022 J jnl
CoRR
Dafeng Zhu, Bo Yang, Yuxiang Liu, Zhaojian Wang, Kai Ma, Xinping Guan
2022 J jnl
IEEE Internet Things J.
Zhixin Liu, Xiaocao Jin, Yi Yang, Kai Ma, Xinping Guan
2022 J jnl
IEEE Internet Things J.
Zhixin Liu, Xiangyun Meng, Yi Yang, Kai Ma, Xinping Guan
2022 J jnl
CoRR
Yi Lin, Luyan Liu, Kai Ma, Yefeng Zheng
2022 J jnl
IEEE Trans. Smart Grid
Mingyue Sun, Yazhou Yuan, Kai Ma, Pei Liu, Xinbin Li, Xiaoyuan Luo
2022 J jnl
CoRR
Dafeng Zhu, Bo Yang, Chengbin Ma, Zhaojian Wang, Shanying Zhu, Kai Ma, Xinping Guan
2022 J jnl
IEEE Internet Things J.
Zhixin Liu, Songhan Zhao, Yi Yang, Kai Ma, Xinping Guan
2022 J jnl
IEEE Trans. Veh. Technol.
Kai Ma, Xiaoyan Hu, Zhiyuan Yue, Yuze Wang, Jie Yang, Hui Zhao, Zhixin Liu
2021 conf
ICPS
Dafeng Zhu, Bo Yang, Zhaojian Wang, Chengbin Ma, Kai Ma, Shanying Zhu
2021 J jnl
IEEE Trans. Ind. Informatics
Jie Yang, Weiqiang Wang, Kai Ma, Bo Yang, Chunxia Dou
2021 J jnl
IEEE Internet Things J.
Pei Liu, Kai Ma, Jie Yang, Bo Yang, Zhixin Liu, Xinping Guan
2021 J jnl
IEEE Internet Things J.
Kai Ma, Zhixue Li, Pei Liu, Jie Yang, Yafei Geng, Bo Yang, Xinping Guan
2021 J jnl
IEEE Trans. Veh. Technol.
Zhixin Liu, Jiawei Su, Yuanai Xie, Kai Ma, Yi Yang, Xinping Guan
2020 conf
ICCA
Kai Ma, Zongxu Jiao, Jie Yang
2020 conf
ICCA
Kai Ma, Yege Bai, Jinlong Wang, Congshan Wang, Jie Yang
2020 B conf
IJCNN
Hao Cheng, Kaijie Wu, Kai Ma, Jie Tian, Rui Xu, Chaochen Gu, Xinping Guan
2020 J jnl
IEEE Trans. Ind. Informatics
Zhixin Liu, Lu Gao, Yang Liu, Xinping Guan, Kai Ma, Yu Wang
2020 J jnl
IEEE Trans. Control. Syst. Technol.
Kai Ma, Shubing Hu, Guoqiang Hu, Yege Bai, Jie Yang, Chunxia Dou, Josep M. Guerrero
2020 J jnl
CoRR
Dafeng Zhu, Bo Yang, Qi Liu, Kai Ma, Shanying Zhu, Xinping Guan
2020 J jnl
IEEE Internet Things J.
Pei Liu, Kai Ma, Jie Yang, Bo Yang, Zhixin Liu, Xinping Guan
2020 J jnl
IEEE Trans. Veh. Technol.
Zhixin Liu, Weimin Wang, Kit Yan Chan, Kai Ma, Xinping Guan
2020 J jnl
IEEE J. Sel. Areas Commun.
Kai Ma, Jie Yang, Pei Liu
2020 J jnl
IEEE Syst. J.
Zhixin Liu, Yuanai Xie, Yazhou Yuan, Kai Ma, Kit Yan Chan, Xinping Guan
2020 J jnl
Comput. Networks
Zhixin Liu, Guochen Hou, Yazhou Yuan, Kit Yan Chan, Kai Ma, Xinping Guan
2019 J jnl
IEEE Trans. Veh. Technol.
Zhixin Liu, Yuanai Xie, Kit Yan Chan, Kai Ma, Xinping Guan
2019 conf
ICCA
Jie Yang, Weiqiang Wang, Kai Ma
2019 J jnl
IEEE Trans. Ind. Informatics
Kai Ma, Yangqing Yu, Bin Yang, Jie Yang
2019 J jnl
Trans. Emerg. Telecommun. Technol.
Zhixin Liu, Lu Gao, Yang Liu, Kai Ma
2019 conf
ICONIP (4)
Jie Tian, Kaijie Wu, Kai Ma, Hao Cheng, Chaocheng Gu
2019 J jnl
IEEE Syst. J.
Chun-xia Dou, Dong Yue, Zhanqiang Zhang, Kai Ma
2019 J jnl
IEEE Access
Jie Yang, Weiqiang Wang, Kai Ma, Bo Yang
2019 J jnl
IEEE Trans. Cybern.
Kai Ma, Congshan Wang, Jie Yang, Changchun Hua, Xinping Guan
2019 J jnl
Eng. Appl. Artif. Intell.
Kai Ma, Xuemei Liu, Guoqiang Li, Shubing Hu, Jie Yang, Xinping Guan
2019 J jnl
IET Commun.
Zhixin Liu, Mingye Zhao, Kit Yan Chan, Yang Liu, Kai Ma
2019 J jnl
IEEE Access
Zhixin Liu, Peng Zhang, Kit Yan Chan, Kai Ma, Li Li
2019 J jnl
Comput. Commun.
Zhixin Liu, Peng Zhang, Kai Ma, Xinping Guan, Kit Yan Chan
2019 J jnl
IEEE Trans. Ind. Informatics
Kai Ma, Pei Liu, Jie Yang, Xiaomin Wei, Chun-xia Dou
2018 J jnl
IEEE Access
Jie Yang, Zhenhua Tian, Kai Ma, Congshan Wang, Zhixin Liu
2018 C conf
ICARCV
Jie Yang, Zhenhua Tian, Kai Ma
2018 conf
ICONIP (6)
Kai Ma, Kaijie Wu, Hao Cheng, Chaochen Gu, Rui Xu, Xinping Guan
2018 J jnl
Appl. Soft Comput.
Kai Ma, Shubing Hu, Jie Yang, Xia Xu, Xinping Guan
2018 conf
ICCA
Kai Ma, Yangqing Yu, Shanying Zhu, Jie Yang, Xinping Guan
2018 J jnl
IEEE Trans. Smart Grid
Kai Ma, Guoqiang Hu, Costas J. Spanos
2018 J jnl
IEEE Access
Lijun Yang, Pei Liu, Liang Li, Kai Ma, Zhixin Liu
2017 J jnl
Wirel. Networks
Feilong Lin, Cailian Chen, Tian He, Kai Ma, Xinping Guan
2017 J jnl
IEEE Internet Things J.
Kai Ma, Xuemei Liu, Zhixin Liu, Cailian Chen, Hao Liang, Xinping Guan
2017 J jnl
IEEE Access
Kai Ma, Congshan Wang, Jie Yang, Zhenhua Tian, Xinping Guan
2017 J jnl
Comput. Networks
Zhixin Liu, Shiyi Li, Kai Ma, Xinping Guan, Xinbin Li
2017 J jnl
Softw. Pract. Exp.
Zhixin Liu, Peng Zhang, Hak-Keung Lam, Kit Yan Chan, Kai Ma
2016 J jnl
Int. J. Syst. Sci.
Jie Yang, Guoshan Zhang, Kai Ma
2016 conf
VTC Spring
Lei Yan, Xinbin Li, Kai Ma, Jing Yan, Song Han
2015 J jnl
IEEE Trans. Ind. Informatics
Kai Ma, Guoqiang Hu, Costas J. Spanos
2015 J jnl
Int. J. Autom. Comput.
Kai Ma, Liang Li, Jie Yang, Zhixin Liu, Xinbin Li, Xin-Ping Guan
2015 J jnl
Int. J. Commun. Syst.
Kai Ma, Jie Yang, Guoqiang Hu, Xinping Guan
2015 J jnl
Int. J. Commun. Syst.
Xiaocheng Wang, Qiaoni Han, Xin-Ping Guan, Kai Ma
2014 C conf
ICARCV
Kai Ma, Guoqiang Hu, Costas J. Spanos
2014 J jnl
IEEE Trans. Control. Syst. Technol.
Kai Ma, Guoqiang Hu, Costas J. Spanos
2014 conf
ICCA
Kai Ma, Guoqiang Hu, Costas J. Spanos
2014 J jnl
IEEE Trans. Veh. Technol.
Qiaoni Han, Bo Yang, Xiaocheng Wang, Kai Ma, Cailian Chen, Xinping Guan
2014 J jnl
J. Appl. Math.
Jie Yang, Guoshan Zhang, Kai Ma
2014 J jnl
Telecommun. Syst.
Xin-Ping Guan, Xiaocheng Wang, Kai Ma, Zhixin Liu, Qiaoni Han
2013 J jnl
Int. J. Autom. Comput.
Xiao-Cheng Wang, Xin-Ping Guan, Qiaoni Han, Zhi-Xin Liu, Kai Ma
2013 conf
ASCC
Kai Ma, Guoqiang Hu, Costas J. Spanos
2013 J jnl
Wirel. Pers. Commun.
Qiaoni Han, Kai Ma, Zhixin Liu, Xinping Guan
2013 J jnl
Phys. Commun.
Xinping Guan, Qiaoni Han, Kai Ma, Zhixin Liu
2013 J jnl
Wirel. Networks
Qiaoni Han, Kai Ma, Xiaocheng Wang, Xinping Guan, Juhai Ma
2013 conf
CASE
Kai Ma, Guoqiang Hu, Costas J. Spanos
2012 J jnl
Int. J. Commun. Syst.
Kai Ma, Qiaoni Han, Cailian Chen, Xinping Guan
2012 J jnl
Wirel. Pers. Commun.
Kai Ma, Zhixin Liu, Xinping Guan
2011 J jnl
Int. J. Autom. Comput.
Kai Ma, Xin-Ping Guan, Juan Wang, Xiaomin Wei
tests/scripts/test_macho_extractors_local.py
← Index tests/scripts/test_macho_extractors_local.py python
#!/usr/bin/env python3
"""
Local MachO extractors test - test actual extractors without server connections
"""

import sys
import os
import logging
import hashlib
from datetime import datetime, timezone
from typing import Dict, Any, Optional
from unittest.mock import Mock, patch

# Add the redb directory to the path so we can import the extractors
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'redb'))

# Mock settings to avoid database connections
with patch.dict('os.environ', {'REDB_ENV': 'test'}):
    # Import the actual extractors
    from redb.extractors.macho_extractors.macho_features import MachOFeaturesExtractor
    from redb.extractors.macho_extractors.macho_segments import MachOSegmentExtractor
    from redb.extractors.macho_extractors.macho_imports import MachOImportExtractor
    from redb.extractors.macho_extractors.macho_exports import MachOExportExtractor
    from redb.extractors.macho_extractors.macho_dylibs import MachODylibExtractor
    from redb.extractors.macho_extractors.macho_signature import MachOSignatureExtractor
    from redb.extractors.macho_extractors.macho_universal import MachOUniversalExtractor

def setup_logging():
    """Setup basic logging configuration."""
    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s - %(levelname)s - %(message)s'
    )
    return logging.getLogger(__name__)

class MockLogger:
    """Mock logger for testing without RedB dependencies."""
    def __init__(self):
        self.logger = logging.getLogger(__name__)
    
    def debug(self, msg):
        self.logger.debug(msg)
    
    def info(self, msg):
        self.logger.info(msg)
    
    def warning(self, msg):
        self.logger.warning(msg)
    
    def error(self, msg):
        self.logger.error(msg)

class MockExporter:
    """Mock exporter that does nothing."""
    def export(self, data):
        pass

def create_mock_extractor(extractor_class, filepath):
    """Create an extractor instance with mocked dependencies."""
    log = MockLogger()
    
    # Mock the exporters to avoid database connections
    mock_exporters = [MockExporter()]
    
    # Create the extractor with mocked dependencies
    extractor = extractor_class(
        filepath=filepath,
        log=log,
        exporters=mock_exporters,
        index_prefix="test",
        elastic_index="test_macho",
        known_benign=False,
        known_malicious=False
    )
    
    return extractor

def test_extractor(extractor_class, filepath, extractor_name):
    """Test a specific extractor."""
    log = setup_logging()
    log.info(f"Testing {extractor_name}...")
    
    try:
        # Create the extractor with mocked dependencies
        extractor = create_mock_extractor(extractor_class, filepath)
        
        if not extractor.macho:
            log.error(f"{extractor_name}: No MachO object created")
            return False

        # Test the actual extract method
        result = extractor.extract()
        
        if result:
            log.info(f"{extractor_name}: Successfully extracted data")
            print(f"\n{'='*60}")
            print(f"=== {extractor_name.upper()} RESULTS ===")
            print(f"{'='*60}")
            
            if isinstance(result, list):
                print(f"📊 Extracted {len(result)} items")
                print()
                for i, item in enumerate(result):
                    print(f"📦 Item {i+1}:")
                    print(f"   {'─'*40}")
                    # Handle dataclass objects in lists
                    if hasattr(item, '__dataclass_fields__'):
                        from dataclasses import asdict
                        item_dict = asdict(item)
                        for key, value in item_dict.items():
                            if isinstance(value, (list, dict)):
                                if isinstance(value, list):
                                    print(f"   🔹 {key}: List with {len(value)} items")
                                    print(f"      {value}")
                                elif isinstance(value, dict):
                                    print(f"   🔹 {key}: Dict with {len(value)} keys")
                                    for k, v in value.items():
                                        print(f"      {k}: {v}")
                            else:
                                print(f"   🔹 {key}: {value}")
                    else:
                        # Regular dict
                        for key, value in item.items():
                            if isinstance(value, (list, dict)):
                                if isinstance(value, list):
                                    print(f"   🔹 {key}: List with {len(value)} items")
                                    print(f"      {value}")
                                elif isinstance(value, dict):
                                    print(f"   🔹 {key}: Dict with {len(value)} keys")
                                    for k, v in value.items():
                                        print(f"      {k}: {v}")
                            else:
                                print(f"   🔹 {key}: {value}")
                    print()
            else:
                print("📊 Extracted data:")
                print()
                # Handle dataclass objects
                if hasattr(result, '__dataclass_fields__'):
                    # It's a dataclass, use dataclasses.asdict
                    from dataclasses import asdict
                    result_dict = asdict(result)
                    for key, value in result_dict.items():
                        if isinstance(value, (list, dict)):
                            if isinstance(value, list):
                                print(f"🔹 {key}: List with {len(value)} items")
                                print(f"   {value}")
                            elif isinstance(value, dict):
                                print(f"🔹 {key}: Dict with {len(value)} keys")
                                for k, v in value.items():
                                    print(f"   {k}: {v}")
                        else:
                            print(f"🔹 {key}: {value}")
                        print()
                else:
                    # It's a regular dict
                    for key, value in result.items():
                        if isinstance(value, (list, dict)):
                            if isinstance(value, list):
                                print(f"🔹 {key}: List with {len(value)} items")
                                print(f"   {value}")
                            elif isinstance(value, dict):
                                print(f"🔹 {key}: Dict with {len(value)} keys")
                                for k, v in value.items():
                                    print(f"   {k}: {v}")
                        else:
                            print(f"🔹 {key}: {value}")
                        print()
        else:
            log.warning(f"{extractor_name}: No data extracted")
            print(f"\n❌ {extractor_name}: No data extracted")
        
        return True
        
    except Exception as e:
        log.error(f"{extractor_name}: Error during extraction: {e}")
        import traceback
        traceback.print_exc()
        return False

def main():
    """Main function."""
    if len(sys.argv) < 2:
        print("Usage: python test_macho_extractors_local.py <macho_file> [extractor_name]")
        print("\nAvailable extractors:")
        print("  features    - Basic MachO header and metadata")
        print("  segments    - Segment information and analysis")
        print("  imports     - Imported functions and libraries")
        print("  exports     - Exported symbols")
        print("  dylibs      - Dynamic library dependencies")
        print("  signature   - Code signing information")
        print("  universal   - FAT/Universal binary information")
        print("  all         - Test all extractors")
        sys.exit(1)
    
    filepath = sys.argv[1]
    extractor_name = sys.argv[2] if len(sys.argv) > 2 else "all"
    
    if not os.path.exists(filepath):
        print(f"File not found: {filepath}")
        sys.exit(1)
    
    # Define extractors
    extractors = {
        'features': (MachOFeaturesExtractor, "MachO Features"),
        'segments': (MachOSegmentExtractor, "MachO Segments"),
        'imports': (MachOImportExtractor, "MachO Imports"),
        'exports': (MachOExportExtractor, "MachO Exports"),
        'dylibs': (MachODylibExtractor, "MachO Dylibs"),
        'signature': (MachOSignatureExtractor, "MachO Code Signature"),
        'universal': (MachOUniversalExtractor, "MachO Universal/FAT"),
    }
    
    if extractor_name == "all":
        print(f"Testing all extractors with file: {filepath}")
        success_count = 0
        for name, (extractor_class, display_name) in extractors.items():
            if test_extractor(extractor_class, filepath, display_name):
                success_count += 1
            print("-" * 50)
        
        print(f"\n✅ {success_count}/{len(extractors)} extractors completed successfully")
        
    elif extractor_name in extractors:
        extractor_class, display_name = extractors[extractor_name]
        success = test_extractor(extractor_class, filepath, display_name)
        
        if success:
            print(f"\n✅ {display_name} testing completed successfully")
        else:
            print(f"\n❌ {display_name} testing failed")
            sys.exit(1)
    else:
        print(f"Unknown extractor: {extractor_name}")
        print("Available extractors:", ", ".join(extractors.keys()) + ", all")
        sys.exit(1)

if __name__ == "__main__":
    main()