In Young Choi

37 papers Misc 1Journal 14Unranked 22
YearRankTypeTitle / Venue / Authors
2025 conf
MedInfo
Wona Choi, Sung Goo You, In Young Choi
2025 conf
MedInfo
Seol Whan Oh, Kihoon Kim, Sunghyeon Park, Yun Seon Im, Surin Jung, Wona Choi, In Young Choi
2025 J jnl
BMC Medical Informatics Decis. Mak.
Yun Seon Im, Seol Whan Oh, Kihoon Kim, Wona Choi, In Young Choi
2025 conf
MedInfo
Yun Seon Im, Seol Whan Oh, Kihoon Kim, Sunghyeon Park, Surin Jung, Wona Choi, In Young Choi
2025 conf
MedInfo
Sunghyeon Park, Wona Choi, In Young Choi
2024 conf
MIE
Seol Whan Oh, Yun Seon Im, Wona Choi, In Young Choi
2024 conf
MIE
Yun Seon Im, Seol Whan Oh, Wona Choi, In Young Choi
2024 conf
MIE
Sunghyeon Park, Wona Choi, In Young Choi
2024 conf
MIE
Seol Whan Oh, Sung-Hwan Kim, Taehoon Ko, In Young Choi
2023 conf
MIE
Seol Whan Oh, Soo Jeong Ko, Yun Seon Im, Surin Jung, Bo Yeon Choi, Jae Yoon Kim, Wona Choi, In Young Choi
2023 conf
MedInfo
Sung Goo Yoo, Dai Jin Kim, Ji-Won Chun, In Young Choi
2023 conf
MedInfo
Seol Whan Oh, Soo Jeong Ko, Yun Seon Im, Surin Jung, Bo Yeon Choi, Jae Yoon Kim, Sunghyeon Park, Wona Choi, In Young Choi
2023 conf
MedInfo
Soo Jeong Ko, Sunghyeon Park, Seol Whan Oh, Yun Seon Im, Surin Jung, Bo Yeon Choi, Jaeyoon Kim, Wona Choi, In Young Choi
2023 conf
MIE
Soo Jeong Ko, Sunghyeon Park, Seol Whan Oh, Yun Seon Im, Surin Jung, Bo Yeon Choi, Jaeyoon Kim, Wona Choi, In Young Choi
2022 J jnl
Int. J. Medical Informatics
Hyung Min Kim, Taehoon Ko, In Young Choi, Jun-Pyo Myong
2022 J jnl
BMC Medical Informatics Decis. Mak.
Wona Choi, Se-Hyun Chang, Yoon-Sik Yang, Surin Jung, Seo-Joon Lee, Ji-Won Chun, Dai-Jin Kim, Woonjeong Lee, In Young Choi
2021 J jnl
Expert Syst. Appl.
Junghye Lee, In Young Choi, Chi-Hyuck Jun
2019 conf
MedInfo
Sun Jung Lee, Sung Hye Yu, Yejin Kim, Jun Hyuk Hong, Choung-Soo Kim, Seong Il Seo, Chang Wook Jeong, Seok-Soo Byun, Byung Ha Chung, Ji Youl Lee, In Young Choi
2019 conf
MedInfo
Wona Choi, Soo Jeong Ko, Hyuck Jun Jung, Tong Min Kim, In Young Choi
2019 conf
MedInfo
In Hye Yook, So Jin Park, Mun Joo Choi, Dai-Jin Kim, In Young Choi
2017 conf
MedInfo
Jae Kwon Kim, In Hye Yook, Mun Joo Choi, Jong Sik Lee, Yong Hyun Park, Ji Youl Lee, In Young Choi
2017 conf
BCB
Jingyun Choi, Yejin Kim, Hun-Sung Kim, In Young Choi, Hwanjo Yu
2016 J jnl
Inf. Technol. Manag.
Mi Jung Rho, Si Ra Kim, Seung Ho Park, Kwang Soo Jang, Bum Joon Park, Joo Young Hong, In Young Choi
2016 Misc conf
AMIA
Mi Jung Rho, In Hye Yook, Heon Baek, Mun Joo Choi, Seo Joon Lee, Dai-Jin Kim, In Young Choi
2016 J jnl
BMC Medical Informatics Decis. Mak.
Yejin Kim, Yong Hyun Park, Ji Youl Lee, In Young Choi, Hwanjo Yu
2015 J jnl
Multim. Tools Appl.
Mi Jung Rho, Kwang Soo Jang, Kyung-Yong Chung, In Young Choi
2015 conf
DTMBIO@CIKM
Yejin Kim, Yong Hyun Park, Ji Youl Lee, In Young Choi, Donghyun Kim, Hwanjo Yu
2015 J jnl
Clust. Comput.
Mi Jung Rho, Hun-Sung Kim, Kyungyong Chung, In Young Choi
2015 J jnl
Multim. Tools Appl.
Mi Jung Rho, Kun-Ho Yoon, Hun-Sung Kim, In Young Choi
2014 J jnl
Wirel. Pers. Commun.
Bo Ram Wang, Ji-Yun Park, Kyungyong Chung, In Young Choi
2014 J jnl
Int. J. Medical Informatics
Mi Jung Rho, In Young Choi, Jaebeom Lee
2013 J jnl
IEEE J. Solid State Circuits
In Young Choi, Heesong Seo, Bumman Kim
2013 conf
ICISA
Mi Jung Rho, Si Ra Kim, Seung Ho Park, Kwang Soo Jang, Bum Joon Park, In Young Choi
2013 conf
ICISA
Mi Jung Rho, Kwang Soo Jang, In Young Choi
2013 conf
ICISA
Mi Jung Rho, In Young Choi
2012 J jnl
IEEE J. Solid State Circuits
Heesong Seo, In Young Choi, Changjoon Park, Jehyung Yoon, Bumman Kim
2008 J jnl
Int. J. Medical Informatics
Sukil Kim, Peter J. Haug, Roberto A. Rocha, In Young Choi
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