Haixia Bi

53 papers A* 2C 10Journal 37Unranked 4
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Wei Dai, Haoyu Wang, Honghao Chang, Lijun He, Fan Li, Jian Sun, Haixia Bi
2026 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Yuchen Wang, Zuzheng Kuang, Haixia Bi, Danfeng Hong
2026 A* conf
AAAI
Zhaolin Cai, Fan Li, Ziwei Zheng, Haixia Bi, Lijun He
2026 J jnl
Pattern Recognit.
Zelin Yang, Lin Xu, Shiyang Yan, Haixia Bi, Fan Li
2026 A* conf
AAAI
Jian Wang, Lijun He, Yixing Yong, Haixia Bi, Fan Li
2026 J jnl
Neurocomputing
Ningwei Wang, Weiqiang Jin, Haixia Bi, Guang Yang
2025 J jnl
CoRR
Kaile Wang, Lijun He, Haisheng Fu, Haixia Bi, Fan Li
2025 J jnl
CoRR
Jiayi Wang, Wei Dai, Haoyu Wang, Sihan Yang, Haixia Bi, Jian Sun
2025 J jnl
CoRR
Zuzheng Kuang, Haixia Bi, Chen Xu, Jian Sun
2025 J jnl
IEEE Trans. Geosci. Remote. Sens.
Zuzheng Kuang, Haixia Bi, Fan Li, Chen Xu
2025 J jnl
IEEE Trans. Geosci. Remote. Sens.
Wenguang Tao, Xiaotian Wang, Tian Yan, Haixia Bi, Jie Yan
2025 J jnl
CoRR
Zhaolin Cai, Fan Li, Ziwei Zheng, Haixia Bi, Lijun He
2025 conf
MICCAI (2)
Sihan Yang, Jiadong Feng, Xuande Mi, Haixia Bi, Hai Zhang, Jian Sun
2025 J jnl
CoRR
Jian Wang, Lijun He, Yixing Yong, Haixia Bi, Fan Li
2025 J jnl
CoRR
Jian Wang, Yixing Yong, Haixia Bi, Lijun He, Fan Li
2025 J jnl
Appl. Soft Comput.
Ningwei Wang, Weiqiang Jin, Shirou Jing, Haixia Bi, Guang Yang
2025 J jnl
CoRR
Peiting Tian, Xi Chen, Haixia Bi, Fan Li
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Zuzheng Kuang, Kang Liu, Haixia Bi, Fan Li
2025 J jnl
IEEE Trans. Geosci. Remote. Sens.
Wei Liu, Haixia Bi, Xuehu Zhu, Chen Xu, Bin Pan
2025 J jnl
CoRR
Zhihan Ren, Lijun He, Jiaxi Liang, Xinzhu Fu, Haixia Bi, Fan Li
2024 J jnl
Remote. Sens.
Ningwei Wang, Weiqiang Jin, Haixia Bi, Chen Xu, Jinghuai Gao
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Haixia Bi, Honghao Chang, Xiaotian Wang, Danfeng Hong
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Honghao Chang, Haixia Bi, Fan Li, Chen Xu, Jocelyn Chanussot, Danfeng Hong
2024 C conf
IGARSS
Kang Liu, Zuzheng Kuang, Shirou Jing, Haixia Bi, Yaochen Li, Chen Xu
2024 C conf
IGARSS
Yuchen Wang, Ziyi Guo, Haixia Bi, Danfeng Hong, Chen Xu
2024 J jnl
CoRR
Yuchen Wang, Ziyi Guo, Haixia Bi, Danfeng Hong, Chen Xu
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Zuzheng Kuang, Haixia Bi, Fan Li, Chen Xu, Jian Sun
2024 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Xiaodi Guan, Fan Li, Haixia Bi, Lijiao Gong
2024 J jnl
CoRR
Sihan Yang, Haixia Bi, Hai Zhang, Jian Sun
2023 J jnl
Sensors
Xiaotian Wang, Ruitao Lu, Haixia Bi, Yuhai Li
2023 J jnl
J. Ambient Intell. Humaniz. Comput.
Haixia Bi, Miquel Perelló-Nieto, Raúl Santos-Rodríguez, Peter A. Flach, Ian Craddock
2023 C conf
IGARSS
Ningwei Wang, Haixia Bi, Xiaotian Wang, Zhao Chen
2023 C conf
IGARSS
Zuzheng Kuang, Haixia Bi, Fan Li
2023 C conf
IGARSS
Sihan Yang, Haixia Bi, Xiaotian Wang, Danfeng Hong
2023 J jnl
Remote. Sens.
Ningwei Wang, Haixia Bi, Fan Li, Chen Xu, Jinghuai Gao
2023 C conf
IGARSS
Yahui Xiu, Zhao Chen, Xinyang Pu, Haixia Bi, Feng Xu
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Jian Wang, Fan Li, Haixia Bi
2022 J jnl
IEEE Geosci. Remote. Sens. Lett.
Haixia Bi, Jing Yao, Zhiqiang Wei, Danfeng Hong, Jocelyn Chanussot
2021 J jnl
IEEE Geosci. Remote. Sens. Lett.
Xiangyong Cao, Jing Yao, Xueyang Fu, Haixia Bi, Danfeng Hong
2021 J jnl
IEEE J. Biomed. Health Informatics
Haixia Bi, Miquel Perelló-Nieto, Raúl Santos-Rodríguez, Peter A. Flach
2020 J jnl
CoRR
Haixia Bi, Jing Yao, Zhiqiang Wei, Danfeng Hong, Jocelyn Chanussot
2020 J jnl
IEEE Trans. Image Process.
Haixia Bi, Lin Xu, Xiangyong Cao, Yong Xue, Zongben Xu
2020 J jnl
CoRR
Haixia Bi, Lin Xu, Xiangyong Cao, Yong Xue, Zongben Xu
2020 C conf
IGARSS
Haixia Bi, Raúl Santos-Rodríguez, Peter A. Flach
2020 conf
PerCom Workshops
Emma L. Tonkin, Miquel Perelló-Nieto, Haixia Bi, Antonis Vafeas
2019 J jnl
IEEE Trans. Geosci. Remote. Sens.
Haixia Bi, Jian Sun, Zongben Xu
2019 J jnl
IEEE Trans. Geosci. Remote. Sens.
Haixia Bi, Feng Xu, Zhiqiang Wei, Yong Xue, Zongben Xu
2019 C conf
IGARSS
Haixia Bi, Feng Xu, Zhiqiang Wei, Yibo Han, Yuanlong Cui, Yong Xue, Zongben Xu
2019 conf
SmartWorld/SCALCOM/UIC/ATC/CBDCom/IOP/SCI
Yibo Han, Zheng Zhang, Bo Yuan, Haixia Bi, Mohammad Nasir Shahzad, Lu Liu
2019 C conf
IGARSS
Haixia Bi, Feng Xu, Zhiqiang Wei, Yibo Han, Yuanlong Cui, Yong Xue, Zongben Xu
2017 C conf
IGARSS
Haixia Bi, Lin Xu, Xiangyong Cao, Zongben Xu
2017 J jnl
IEEE Trans. Geosci. Remote. Sens.
Haixia Bi, Jian Sun, Zongben Xu
2014 conf
ICIA
Zhiqiang Wei, Haixia Bi
tests/unit/test_extractor_registry.py
← Index tests/unit/test_extractor_registry.py python
"""
Unit tests for the extractor registry (redb/extractor_registry.py).

Verifies that all file-type groups load correctly, return the expected
extractors, and that lookup/filtering logic works as intended.
"""
import pytest

from redb.extractor_registry import (
    get_filetype_modules,
    get_extractor_class,
    FILETYPE_TO_GROUP,
    _REGISTRY,
)

pytestmark = [pytest.mark.unit]


# ============================================================================
# get_filetype_modules — group loading
# ============================================================================

class TestGetFiletypeModules:

    @pytest.mark.parametrize("filetype,expected_names", [
        ("pebin", [
            "PEFeaturesExtractor", "PEImportExtractor", "PEResourceExtractor",
            "PEOverlayExtractor", "PESectionExtractor", "PESignatureExtractor",
            "PEExtraFindings", "PEInconstistencyTestsExtractor", "PEDotNetExtractor",
        ]),
        ("elf", [
            "ELFFeaturesExtractor", "ELFSegmentExtractor", "ELFSectionExtractor",
            "ELFDependencyExtractor", "ELFSymbolExtractor", "ELFImportExtractor",
            "ELFExportExtractor", "ELFRelocationExtractor", "ELFNotesExtractor",
        ]),
        ("macho", [
            "MachOFeaturesExtractor", "MachOSegmentExtractor",
            "MachOImportExtractor", "MachOExportExtractor",
            "MachODylibExtractor", "MachOSignatureExtractor",
        ]),
        ("apk", [
            "APKFeaturesExtractor", "APKManifestExtractor",
            "APKPermissionsExtractor", "APKSignatureExtractor",
            "APKDexExtractor", "APKResourceExtractor",
            "APKNativeLibExtractor", "APKInconsistencyTestsExtractor",
        ]),
    ])
    def test_loads_all_extractors_for_filetype(self, filetype, expected_names):
        """Each filetype group should return all its registered extractors."""
        modules = get_filetype_modules(filetype)
        names = [m.__name__ for m in modules]
        for expected in expected_names:
            assert expected in names, f"{expected} missing from {filetype} modules"

    def test_apk_excludes_decompilers(self):
        """get_filetype_modules should not include DecompileAPK."""
        modules = get_filetype_modules("apk")
        names = [m.__name__ for m in modules]
        assert "DecompileAPK" not in names

    def test_unknown_filetype_returns_empty(self):
        """An unrecognized filetype should return an empty list."""
        assert get_filetype_modules("unknown_format") == []

    def test_returned_classes_are_callable(self):
        """All returned extractor classes should be callable (i.e., actual classes)."""
        for filetype in FILETYPE_TO_GROUP:
            for cls in get_filetype_modules(filetype):
                assert callable(cls), f"{cls} is not callable"


# ============================================================================
# get_extractor_class — single lookup
# ============================================================================

class TestGetExtractorClass:

    def test_finds_pe_extractor(self):
        cls = get_extractor_class("PEFeaturesExtractor")
        assert cls is not None
        assert cls.__name__ == "PEFeaturesExtractor"

    def test_finds_elf_extractor(self):
        cls = get_extractor_class("ELFSectionExtractor")
        assert cls is not None
        assert cls.__name__ == "ELFSectionExtractor"

    def test_finds_macho_extractor(self):
        cls = get_extractor_class("MachOSignatureExtractor")
        assert cls is not None
        assert cls.__name__ == "MachOSignatureExtractor"

    def test_finds_apk_extractor(self):
        cls = get_extractor_class("APKDexExtractor")
        assert cls is not None
        assert cls.__name__ == "APKDexExtractor"

    def test_finds_decompile_apk(self):
        cls = get_extractor_class("DecompileAPK")
        assert cls is not None
        assert cls.__name__ == "DecompileAPK"

    def test_returns_none_for_unknown(self):
        assert get_extractor_class("NonExistentExtractor") is None


# ============================================================================
# Registry completeness
# ============================================================================

class TestRegistryCompleteness:

    def test_all_filetypes_have_registry_group(self):
        """Every filetype in FILETYPE_TO_GROUP should map to a valid registry group."""
        for filetype, group in FILETYPE_TO_GROUP.items():
            assert group in _REGISTRY, f"filetype {filetype} maps to unknown group {group}"

    def test_all_registry_groups_are_reachable(self):
        """Every registry group should be reachable via at least one filetype."""
        reachable = set(FILETYPE_TO_GROUP.values())
        for group in _REGISTRY:
            assert group in reachable, f"registry group {group} has no filetype mapping"


# ============================================================================
# Integration with workers.get_module_by_name
# ============================================================================

class TestWorkersGetModuleByName:

    def test_resolves_common_extractor(self):
        from redb.workers import get_module_by_name
        cls = get_module_by_name("BasicPropertiesExtractor")
        assert cls is not None
        assert cls.__name__ == "BasicPropertiesExtractor"

    def test_resolves_type_specific_extractor(self):
        from redb.workers import get_module_by_name
        cls = get_module_by_name("PEFeaturesExtractor")
        assert cls is not None
        assert cls.__name__ == "PEFeaturesExtractor"

    def test_resolves_decompile_apk(self):
        from redb.workers import get_module_by_name
        cls = get_module_by_name("DecompileAPK")
        assert cls is not None

    def test_returns_none_for_unknown(self):
        from redb.workers import get_module_by_name
        assert get_module_by_name("BogusExtractor") is None