Xenophon Papademetris

115 papers A* 6A 2Journal 45Unranked 62
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Julia Wolleb, Cristiana Baloescu, Alicia Durrer, Hemant D. Tagare, Xenophon Papademetris
2025 conf
ASMUS@MICCAI
Julia Wolleb, Florentin Bieder, Paul Friedrich, Hemant D. Tagare, Xenophon Papademetris
2025 J jnl
CoRR
Julia Wolleb, Florentin Bieder, Paul Friedrich, Hemant D. Tagare, Xenophon Papademetris
2024 conf
AIES (1)
Alka V. Menon, Zahra Abba Omar, Nadia Nahar, Xenophon Papademetris, Lynn E. Fiellin, Christian Kästner
2024 conf
FAccT
Nadia Nahar, Jenny Rowlett, Matthew Bray, Zahra Abba Omar, Xenophon Papademetris, Alka Menon, Christian Kästner
2022 J jnl
NeuroImage
David O'Connor, Francesca Mandino, Xilin Shen, Corey Horien, X. Ge, Peter Herman, Fahmeed Hyder, M. Crair, Xenophon Papademetris, EMR Lake, R. Todd Constable
2021 conf
IPMI
Juntang Zhuang, Nicha C. Dvornek, Sekhar Tatikonda, Xenophon Papademetris, Pamela Ventola, James S. Duncan
2021 J jnl
CoRR
Juntang Zhuang, Nicha C. Dvornek, Sekhar Tatikonda, Xenophon Papademetris, Pamela Ventola, James S. Duncan
2020 A* conf
NeurIPS
Juntang Zhuang, Tommy Tang, Yifan Ding, Sekhar Tatikonda, Nicha C. Dvornek, Xenophon Papademetris, James S. Duncan
2020 J jnl
CoRR
Juntang Zhuang, Tommy Tang, Yifan Ding, Sekhar Tatikonda, Nicha C. Dvornek, Xenophon Papademetris, James S. Duncan
2020 A* conf
ICML
Juntang Zhuang, Nicha C. Dvornek, Xiaoxiao Li, Sekhar Tatikonda, Xenophon Papademetris, James S. Duncan
2020 J jnl
CoRR
Juntang Zhuang, Nicha C. Dvornek, Xiaoxiao Li, Sekhar Tatikonda, Xenophon Papademetris, James S. Duncan
2019 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Praneeth Sadda, Metehan Imamoglu, Michael Dombrowski, Xenophon Papademetris, Mert Ozan Bahtiyar, John A. Onofrey
2019 conf
ISBI
John A. Onofrey, Dana I. Casetti-Dinescu, Andreas D. Lauritzen, Saradwata Sarkar, Rajesh Venkataraman, Richard E. Fan, Geoffrey A. Sonn, Preston C. Sprenkle, Lawrence H. Staib, Xenophon Papademetris
2019 J jnl
IEEE Trans. Medical Imaging
John A. Onofrey, Lawrence H. Staib, Xenophon Papademetris
2018 conf
ISBI
Xiaoxiao Li, Nicha C. Dvornek, Xenophon Papademetris, Juntang Zhuang, Lawrence H. Staib, Pamela Ventola, James S. Duncan
2018 conf
ISBI
Dustin Scheinost, John A. Onofrey, Soo Hyun Kwon, Sarah N. Cross, Gordon Sze, Laura R. Ment, Xenophon Papademetris
2018 conf
DATRA/PIPPI@MICCAI
Praneeth Sadda, John A. Onofrey, Mert Ozan Bahtiyar, Xenophon Papademetris
2018 conf
CVII-STENT/LABELS@MICCAI
Praneeth Sadda, John A. Onofrey, Xenophon Papademetris
2018 J jnl
IEEE Trans. Medical Imaging
Chung Chan, John A. Onofrey, Yiqiang Jian, Mary Germino, Xenophon Papademetris, Richard E. Carson, Chi Liu
2017 J jnl
NeuroImage
Emily S. Finn, Dustin Scheinost, Daniel M. Finn, Xilin Shen, Xenophon Papademetris, R. Todd Constable
2017 J jnl
Medical Image Anal.
John A. Onofrey, Lawrence H. Staib, Saradwata Sarkar, Rajesh Venkataraman, Cayce B. Nawaf, Preston C. Sprenkle, Xenophon Papademetris
2017 J jnl
NeuroImage
Stephanie Noble, Dustin Scheinost, Emily S. Finn, Xilin Shen, Xenophon Papademetris, Sarah C. McEwen, Carrie E. Bearden, Jean Addington, Bradley G. Goodyear, Kristin S. Cadenhead, Heline Mirzakhanian, Barbara A. Cornblatt, Doreen M. Olvet, Daniel H. Mathalon, Thomas H. McGlashan, Diana O. Perkins, Aysenil Belger, Larry J. Seidman, Heidi W. Thermenos, Ming T. Tsuang, Theo G. M. van Erp
2016 J jnl
Networks
Francis J. Vasko, Eric Landquist, Gregory Kresge, Adam Tal, Yifeng Jiang, Xenophon Papademetris
2016 J jnl
Comput. Intell. Neurosci.
Kai Li, Xenophon Papademetris, Don M. Tucker
2016 J jnl
NeuroImage
Basavaraju G. Sanganahalli, Michelle R. Rebello, Peter Herman, Xenophon Papademetris, Gordon M. Shepherd, Justus Valentijn Verhagen, Fahmeed Hyder
2016 J jnl
IEEE Trans. Biomed. Eng.
Dustin Scheinost, Fuyuze Tokoglu, Xilin Shen, Emily S. Finn, Stephanie Noble, Xenophon Papademetris, R. Todd Constable
2016 conf
SASHIMI@MICCAI
John A. Onofrey, Ilkay Öksüz, Saradwata Sarkar, Rajesh Venkataraman, Lawrence H. Staib, Xenophon Papademetris
2016 conf
OR
Eric Landquist, Francis J. Vasko, Gregory Kresge, Adam Tal, Yifeng Jiang, Xenophon Papademetris
2015 J jnl
IEEE Trans. Medical Imaging
Colin B. Compas, Emily Y. Wong, Xiaojie Huang, Smita Sampath, Ben A. Lin, Prasanta Pal, Xenophon Papademetris, Karl Thiele, Donald P. Dione, Mitchel Stacy, Lawrence H. Staib, Albert J. Sinusas, Matthew O'Donnell, James S. Duncan
2015 J jnl
Medical Image Anal.
Xiaojie Huang, Donald P. Dione, Colin B. Compas, Xenophon Papademetris, Ben A. Lin, Alda Bregasi, Albert J. Sinusas, Lawrence H. Staib, James S. Duncan
2015 conf
ISBI
John A. Onofrey, Lawrence H. Staib, Saradwata Sarkar, Rajesh Venkataraman, Xenophon Papademetris
2015 J jnl
IEEE Trans. Medical Imaging
John A. Onofrey, Xenophon Papademetris, Lawrence H. Staib
2015 conf
IPMI
John A. Onofrey, Lawrence H. Staib, Xenophon Papademetris
2014 J jnl
Medical Image Anal.
Xiaojie Huang, Donald P. Dione, Colin B. Compas, Xenophon Papademetris, Ben A. Lin, Alda Bregasi, Albert J. Sinusas, Lawrence H. Staib, James S. Duncan
2014 J jnl
IEEE Trans. Medical Imaging
Colin B. Compas, Emily Y. Wong, Xiaojie Huang, Smita Sampath, Ben A. Lin, Prasanta Pal, Xenophon Papademetris, Karl Thiele, Donald P. Dione, Mitchel Stacy, Lawrence H. Staib, Albert J. Sinusas, Matthew O'Donnell, James S. Duncan
2014 J jnl
NeuroImage
Dustin Scheinost, Xenophon Papademetris, R. Todd Constable
2013 J jnl
Neuroinformatics
Dustin Scheinost, Michelle Hampson, MaoLin Qiu, Jitendra Bhawnani, R. Todd Constable, Xenophon Papademetris
2013 J jnl
NeuroImage
R. Todd Constable, Betty R. Vohr, Dustin Scheinost, Jennifer R. Benjamin, Robert K. Fulbright, Cheryl Lacadie, Karen C. Schneider, Karol H. Katz, Heping Zhang, Xenophon Papademetris, Laura R. Ment
2013 conf
CDMRI/MMBC@MICCAI
Dustin Scheinost, Xilin Shen, Emily S. Finn, Rajita Sinha, R. Todd Constable, Xenophon Papademetris
2013 conf
ISBI
John A. Onofrey, Lawrence H. Staib, Xenophon Papademetris
2013 conf
MICCAI (3)
John A. Onofrey, Lawrence H. Staib, Xenophon Papademetris
2013 J jnl
NeuroImage
Kathleen A. Garrison, Dustin Scheinost, Patrick D. Worhunsky, Hani M. Elwafi, Thomas A. Thornhill IV, Evan Thompson, Clifford D. Saron, Gaëlle Desbordes, Hedy Kober, Michelle Hampson, Jeremy R. Gray, R. Todd Constable, Xenophon Papademetris, Judson A. Brewer
2013 conf
MCV
John A. Onofrey, Lawrence H. Staib, Xenophon Papademetris
2012 conf
MICCAI (3)
Xiaojie Huang, Donald P. Dione, Colin B. Compas, Xenophon Papademetris, Ben A. Lin, Albert J. Sinusas, James S. Duncan
2012 conf
ISBI
Colin B. Compas, Emily Y. Wong, Xiaojie Huang, Smita Sampath, Ben A. Lin, Xenophon Papademetris, Karl Thiele, Donald P. Dione, Albert J. Sinusas, Matthew O'Donnell, James S. Duncan
2012 J jnl
IEEE Trans. Medical Imaging
Hon Pong Ho, Fei Wang, Xenophon Papademetris, Hilary P. Blumberg, Lawrence H. Staib
2012 J jnl
IEEE Trans. Medical Imaging
Christine DeLorenzo, Xenophon Papademetris, Lawrence H. Staib, Kenneth P. Vives, Dennis D. Spencer, James S. Duncan
2011 J jnl
Medical Image Anal.
Jung W. Suh, Dustin Scheinost, Donald P. Dione, Lawrence W. Dobrucki, Albert J. Sinusas, Xenophon Papademetris
2011 J jnl
NeuroImage
Roberto Martuzzi, Ramachandran Ramani, MaoLin Qiu, Xilin Shen, Xenophon Papademetris, R. Todd Constable
2011 J jnl
Medical Image Anal.
Chao Lu, Sudhakar Chelikani, Xenophon Papademetris, Jonathan Knisely, Michael F. Milosevic, Zhe Chen, David A. Jaffray, Lawrence H. Staib, James S. Duncan
2011 conf
ISBI
Alark Joshi, Dustin Scheinost, R. Globinsky, Kenneth P. Vives, Dennis D. Spencer, Lawrence H. Staib, Xenophon Papademetris
2011 J jnl
Brain Connect.
Michelle Hampson, Dustin Scheinost, MaoLin Qiu, Jitendra Bhawnani, Cheryl Lacadie, James F. Leckman, R. Todd Constable, Xenophon Papademetris
2011 conf
MICCAI (2)
Hon Pong Ho, Fei Wang, Xenophon Papademetris, Hilary P. Blumberg, Lawrence H. Staib
2011 J jnl
Neuroinformatics
Alark Joshi, Dustin Scheinost, Hirohito Okuda, Dominique Belhachemi, Isabella Murphy, Lawrence H. Staib, Xenophon Papademetris
2011 conf
MICCAI (3)
Yifeng Jiang, Zhen W. Zhuang, Albert J. Sinusas, Lawrence H. Staib, Xenophon Papademetris
2011 conf
ISBI
Jung W. Suh, Oh-K. Kwon, Dustin Scheinost, Albert J. Sinusas, Gary W. Cline, Xenophon Papademetris
2010 J jnl
Medical Image Anal.
Yun Zhu, Xenophon Papademetris, Albert J. Sinusas, James S. Duncan
2010 conf
CVPR Workshops
Chao Lu, Sudhakar Chelikani, Xenophon Papademetris, Lawrence H. Staib, James S. Duncan
2010 J jnl
Medical Image Anal.
William Harvey Greene, Sudhakar Chelikani, Kailasnath Purushothaman, Jonathan Knisely, Zhe Chen, Xenophon Papademetris, Lawrence H. Staib, James S. Duncan
2010 J jnl
NeuroImage
Xilin Shen, Xenophon Papademetris, R. Todd Constable
2010 J jnl
IEEE Trans. Medical Imaging
Christine DeLorenzo, Xenophon Papademetris, Lawrence H. Staib, Kenneth P. Vives, Dennis D. Spencer, James S. Duncan
2010 conf
MICCAI (1)
Chao Lu, Sudhakar Chelikani, Zhe Chen, Xenophon Papademetris, Lawrence H. Staib, James S. Duncan
2010 conf
ISBI
Alark Joshi, Alexander Papanastassiou, Kenneth P. Vives, Dennis D. Spencer, Lawrence H. Staib, Xenophon Papademetris
2010 J jnl
IEEE Trans. Medical Imaging
Yun Zhu, Xenophon Papademetris, Albert J. Sinusas, James S. Duncan
2010 conf
ISBI
Jung W. Suh, Dustin Scheinost, Xiaoning Qian, Albert J. Sinusas, Christopher K. Breuer, Xenophon Papademetris
2010 conf
CVPR Workshops
Yifeng Jiang, Zhen W. Zhuang, Albert J. Sinusas, Xenophon Papademetris
2009 conf
MICCAI (1)
Yun Zhu, Xenophon Papademetris, Albert J. Sinusas, James S. Duncan
2009 conf
MICCAI (1)
Jung W. Suh, Dustin Scheinost, Donald P. Dione, Lawrence W. Dobrucki, Albert J. Sinusas, Xenophon Papademetris
2009 J jnl
Medical Image Anal.
Xiaoning Qian, Matthew P. Brennan, Donald P. Dione, Wawrzyniec L. Dobrucki, Marcel Jackowski, Christopher K. Breuer, Albert J. Sinusas, Xenophon Papademetris
2009 conf
ISBI
Dustin Scheinost, Hal Blumenfeld, Xenophon Papademetris
2009 J jnl
Medical Image Anal.
William Harvey Greene, Sudhakar Chelikani, Kailas Purushothaman, J. P. S. Knisely, Zhe Chen, Xenophon Papademetris, Lawrence H. Staib, James S. Duncan
2009 conf
ISBI
Yifeng Jiang, Erin Edmiston, Fei Wang, Hilary P. Blumberg, Xenophon Papademetris, Lawrence H. Staib
2009 A* conf
CVPR
Yifeng Jiang, Erin Edmiston, Fei Wang, Hilary P. Blumberg, Lawrence H. Staib, Xenophon Papademetris
2009 conf
MICCAI (1)
Hon Pong Ho, Xenophon Papademetris, Fei Wang, Hilary P. Blumberg, Lawrence H. Staib
2008 conf
MICCAI (1)
William Harvey Greene, Sudhakar Chelikani, Kailas Purushothaman, Zhe Chen, Jonathan Knisely, Lawrence H. Staib, Xenophon Papademetris, James S. Duncan
2008 conf
MICCAI (2)
Deepti R. Bathula, Hemant D. Tagare, Lawrence H. Staib, Xenophon Papademetris, Robert T. Schultz, James S. Duncan
2008 conf
MICCAI (2)
Yun Zhu, Xenophon Papademetris, Albert J. Sinusas, James S. Duncan
2008 J jnl
IEEE Trans. Vis. Comput. Graph.
Alark Joshi, Xiaoning Qian, Donald P. Dione, Ketan R. Bulsara, Christopher K. Breuer, Albert J. Sinusas, Xenophon Papademetris
2008 conf
ISBI
Yun Zhu, Ping Yan, Xenophon Papademetris, Albert J. Sinusas, James S. Duncan
2008 conf
CVPR Workshops
Yun Zhu, Xenophon Papademetris, Albert J. Sinusas, James S. Duncan
2008 J jnl
NeuroImage
Cheryl Lacadie, Robert K. Fulbright, Nallakkandi Rajeevan, R. Todd Constable, Xenophon Papademetris
2008 J jnl
IEEE Trans. Vis. Comput. Graph.
Alark Joshi, Dustin Scheinost, Kenneth P. Vives, Dennis D. Spencer, Lawrence H. Staib, Xenophon Papademetris
2008 A* conf
CVPR
Yun Zhu, Xenophon Papademetris, Albert J. Sinusas, James S. Duncan
2008 conf
ISBI
William Harvey Greene, Sudhakar Chelikani, Xenophon Papademetris, Lawrence H. Staib, Jonathan Knisely, James S. Duncan
2007 conf
MICCAI (2)
Christine DeLorenzo, Xenophon Papademetris, Kenneth P. Vives, Dennis D. Spencer, James S. Duncan
2007 conf
ISBI
William Harvey Greene, Sudhakar Chelikani, Xenophon Papademetris, Jonathan Knisely, James S. Duncan
2007 conf
ISBI
Christine DeLorenzo, Xenophon Papademetris, Kenneth P. Vives, Dennis D. Spencer, James S. Duncan
2007 conf
ISBI
Yun Zhu, Xenophon Papademetris, James S. Duncan, Albert J. Sinusas
2007 conf
ISBI
Deepti R. Bathula, Xenophon Papademetris, James S. Duncan
2007 A* conf
CVPR
Yun Zhu, Xenophon Papademetris, Albert J. Sinusas, James S. Duncan
2007 A* conf
ICCV
Christine DeLorenzo, Xenophon Papademetris, Lawrence H. Staib, Kenneth P. Vives, Dennis D. Spencer, James S. Duncan
2007 conf
MICCAI (1)
Yun Zhu, Xenophon Papademetris, Albert J. Sinusas, James S. Duncan
2006 conf
ISBI
Lawrence H. Staib, Marcel Jackowski, Xenophon Papademetris
2006 conf
ISBI
Christine DeLorenzo, Xenophon Papademetris, Kenneth P. Vives, Dennis D. Spencer, James S. Duncan
2006 conf
ISBI
Edward Scharff, Xenophon Papademetris, Hoby P. Hetherington, J. W. Pan, Hitten Zaveri, Hal Blumenfeld, Robert B. Duckrow, Susan S. Spencer, Dennis D. Spencer, James S. Duncan, Edward J. Novotny
2006 conf
ISBI
Xenophon Papademetris, Kenneth P. Vives, Marcello DiStasio, Lawrence H. Staib, Markus Neff, Sven Flossman, Nils Frielinghaus, Hitten Zaveri, Edward J. Novotny, Hal Blumenfeld, R. Todd Constable, Hoby P. Hetherington, Robert B. Duckrow, Susan S. Spencer, Dennis D. Spencer, James S. Duncan
2006 conf
MICCAI (1)
Christine DeLorenzo, Xenophon Papademetris, Kun Wu, Kenneth P. Vives, Dennis D. Spencer, James S. Duncan
2006 J jnl
NeuroImage
A. Scouten, Xenophon Papademetris, R. Todd Constable
2005 conf
MICCAI (2)
Xenophon Papademetris, Donald P. Dione, Lawrence W. Dobrucki, Lawrence H. Staib, Albert J. Sinusas
2005 conf
MICCAI (2)
Marcel Jackowski, Xenophon Papademetris, Lawrence W. Dobrucki, Albert J. Sinusas, Lawrence H. Staib
2005 conf
IPMI
Xenophon Papademetris, Pavel Shkarin, Lawrence H. Staib, Kevin L. Behar
2004 conf
MICCAI (2)
Hirohito Okuda, Pavel Shkarin, Kevin L. Behar, James S. Duncan, Xenophon Papademetris
2004 conf
MICCAI (2)
Jing Yang, Xenophon Papademetris, Lawrence H. Staib, Robert T. Schultz, James S. Duncan
2004 conf
MICCAI (1)
Xenophon Papademetris, Andrea P. Jackowski, Robert T. Schultz, Lawrence H. Staib, James S. Duncan
2003 conf
MICCAI (1)
Keiji Kobashi, Xenophon Papademetris, James S. Duncan
2003 conf
MICCAI (1)
Ning Lin, Xenophon Papademetris, Albert J. Sinusas, James S. Duncan
2003 conf
MICCAI (2)
Xenophon Papademetris, Andrea P. Jackowski, Robert T. Schultz, Lawrence H. Staib, James S. Duncan
2002 J jnl
IEEE Trans. Medical Imaging
Xenophon Papademetris, Albert J. Sinusas, Donald P. Dione, R. Todd Constable, James S. Duncan
2001 J jnl
Medical Image Anal.
Xenophon Papademetris, Albert J. Sinusas, Donald P. Dione, James S. Duncan
2001 conf
IPMI
Xenophon Papademetris, E. Turan Onat, Albert J. Sinusas, Donald P. Dione, R. Todd Constable, James S. Duncan
2000 A conf
MICCAI
Xenophon Papademetris, Albert J. Sinusas, Donald P. Dione, R. Todd Constable, James S. Duncan
1999 A conf
MICCAI
Xenophon Papademetris, Albert J. Sinusas, Donald P. Dione, James S. Duncan
1999 conf
IPMI
Xenophon Papademetris, Pengcheng Shi, Donald P. Dione, Albert J. Sinusas, R. Todd Constable, James S. Duncan
1996 conf
ICIP (1)
Xenophon Papademetris, Peter N. Belhumeur
tests/integration/test_elf_extractor.py
← Index tests/integration/test_elf_extractor.py python
"""
Integration tests for the ELFExtractor base class.
"""
import pytest
from unittest.mock import Mock, patch, MagicMock

pytestmark = [pytest.mark.integration, pytest.mark.elf]


class TestELFExtractorInitialization:
    """Tests for ELFExtractor initialization."""

    def test_elf_extractor_with_valid_elf(self, elf_binary_path, mock_logger):
        """Test ELFExtractor initialization with valid ELF file."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            assert extractor.filepath == elf_binary_path
            assert extractor._is_elf_file() is True

    def test_elf_extractor_with_invalid_file(self, pe_binary_path, mock_logger):
        """Test ELFExtractor initialization with non-ELF file."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(pe_binary_path, mock_logger)

            # Should not be a valid ELF
            assert extractor._is_elf_file() is False

    def test_elf_extractor_with_text_file(self, temp_text_file, mock_logger):
        """Test ELFExtractor initialization with text file."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(temp_text_file, mock_logger)

            # Should not be a valid ELF
            assert extractor._is_elf_file() is False


class TestELFExtractorMethods:
    """Tests for ELFExtractor helper methods."""

    def test_is_elf_file_true(self, elf_binary_path, mock_logger):
        """Test _is_elf_file returns True for valid ELF."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            assert extractor._is_elf_file() is True

    def test_is_elf_file_cached(self, elf_binary_path, mock_logger):
        """Test _is_elf_file result is cached."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            # First call
            result1 = extractor._is_elf_file()
            # Second call should use cached value
            result2 = extractor._is_elf_file()

            assert result1 == result2
            # Cache should be set
            assert extractor._elf_file_valid is not None

    def test_is_64bit(self, elf_binary_path, mock_logger):
        """Test _is_64bit method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._is_64bit()
            # Result depends on the test binary
            assert isinstance(result, bool)

    def test_is_stripped(self, elf_binary_path, mock_logger):
        """Test _is_stripped method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._is_stripped()
            assert isinstance(result, bool)

    def test_has_debug_info(self, elf_binary_path, mock_logger):
        """Test _has_debug_info method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._has_debug_info()
            assert isinstance(result, bool)

    def test_get_architecture(self, elf_binary_path, mock_logger):
        """Test _get_architecture method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._get_architecture()
            # Should return a string (architecture name)
            assert isinstance(result, str)
            assert result != ""

    def test_get_endianness(self, elf_binary_path, mock_logger):
        """Test _get_endianness method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._get_endianness()
            # Should be one of: "little", "big", or "unknown"
            assert result in ["little", "big", "unknown"]

    def test_get_file_type(self, elf_binary_path, mock_logger):
        """Test _get_file_type method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._get_file_type()
            # Should return a file type string
            assert isinstance(result, str)
            # Common values: "executable", "shared_object", "relocatable", etc.
            expected_types = ["none", "relocatable", "executable", "shared_object", "core_dump", "unknown"]
            assert result in expected_types or result.startswith("ET_")

    def test_is_pie(self, elf_binary_path, mock_logger):
        """Test _is_pie method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._is_pie()
            assert isinstance(result, bool)

    def test_has_stack_protection(self, elf_binary_path, mock_logger):
        """Test _has_stack_protection method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._has_stack_protection()
            assert isinstance(result, bool)

    def test_has_nx_bit(self, elf_binary_path, mock_logger):
        """Test _has_nx_bit method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._has_nx_bit()
            assert isinstance(result, bool)

    def test_has_relro(self, elf_binary_path, mock_logger):
        """Test _has_relro method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._has_relro()
            assert isinstance(result, bool)

    def test_get_build_id(self, elf_binary_path, mock_logger):
        """Test _get_build_id method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._get_build_id()
            # Could be None if no build ID, or a hex string
            assert result is None or isinstance(result, str)

    def test_count_sections(self, elf_binary_path, mock_logger):
        """Test _count_sections method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._count_sections()
            assert isinstance(result, int)
            assert result >= 0

    def test_count_segments(self, elf_binary_path, mock_logger):
        """Test _count_segments method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._count_segments()
            assert isinstance(result, int)
            assert result >= 0

    def test_count_symbols(self, elf_binary_path, mock_logger):
        """Test _count_symbols method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._count_symbols()
            assert isinstance(result, int)
            assert result >= 0

    def test_get_dependencies(self, elf_binary_path, mock_logger):
        """Test _get_dependencies method."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor._get_dependencies()
            assert isinstance(result, list)


class TestWithELFFile:
    """Tests for the _with_elf_file context manager method."""

    def test_with_elf_file_success(self, elf_binary_path, mock_logger):
        """Test _with_elf_file executes operation successfully."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            # Define a simple operation
            def get_header(elf):
                return elf.header is not None

            result = extractor._with_elf_file(get_header)
            assert result is True

    def test_with_elf_file_error_handling(self, temp_text_file, mock_logger):
        """Test _with_elf_file handles errors gracefully."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(temp_text_file, mock_logger)

            # Define an operation that would fail
            def get_header(elf):
                return elf.header

            result = extractor._with_elf_file(get_header)
            # Should return None on error
            assert result is None


class TestELFExtractorTag:
    """Tests for tag method in ELF extractors."""

    def test_elf_features_tag(self, elf_binary_path, mock_logger):
        """Test that ELFFeaturesExtractor returns correct tag."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)
            tag = extractor.tag()
            # Should return the tag string
            assert isinstance(tag, str)
            assert "elf" in tag.lower() or "features" in tag.lower()


class TestELFExtractorClickHouseTable:
    """Tests for get_clickhouse_table method in ELF extractors."""

    def test_elf_features_clickhouse_table(self, elf_binary_path, mock_logger):
        """Test that ELFFeaturesExtractor returns correct ClickHouse table name."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)
            assert extractor.get_clickhouse_table() == "redb_elf_features"


class TestELFExtractorExtract:
    """Tests for extract method in ELF extractors."""

    def test_elf_features_extract(self, elf_binary_path, mock_logger):
        """Test ELFFeaturesExtractor.extract() returns valid data."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor
        from redb.models.dataclasses import ELFFeatures

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            result = extractor.extract()
            assert result is not None
            assert isinstance(result, ELFFeatures)

            # Check some expected fields
            assert isinstance(result.ei_class, int)
            assert isinstance(result.ei_data, int)
            assert isinstance(result.e_entry, int)
            assert isinstance(result.number_of_sections, int)
            assert isinstance(result.number_of_segments, int)

    def test_elf_features_extract_invalid_file(self, pe_binary_path, mock_logger):
        """Test ELFFeaturesExtractor.extract() handles invalid ELF."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(pe_binary_path, mock_logger)

            result = extractor.extract()
            # Should return None for invalid ELF
            assert result is None


class TestELFExtractorPrepareExportData:
    """Tests for prepare_export_data method in ELF extractors."""

    def test_elf_features_prepare_export_elasticsearch(self, elf_binary_path, mock_logger):
        """Test prepare_export_data for Elasticsearch."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            # First extract
            extractor.extract()
            result = extractor.prepare_export_data("ElasticsearchExporter")
            # Should return the elf_features dataclass
            assert result is extractor.elf_features

    def test_elf_features_prepare_export_clickhouse(self, elf_binary_path, mock_logger):
        """Test prepare_export_data for ClickHouse."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_binary_path, mock_logger)

            # First extract
            extractor.extract()
            result = extractor.prepare_export_data("ClickHouseExporter")

            # Should return tuple of (data, column_names, column_type_names)
            assert isinstance(result, tuple)
            assert len(result) == 3
            data, column_names, column_type_names = result
            assert isinstance(data, list)
            assert isinstance(column_names, list)
            assert isinstance(column_type_names, list)
            # Column names and types should match in length
            assert len(column_names) == len(column_type_names)


class TestELFExtractorAdvanced:
    """Advanced tests for ELF extraction using hello_advanced binary."""

    def test_elf_advanced_features(self, elf_advanced_binary_path, mock_logger):
        """Test ELFFeaturesExtractor with more complex ELF binary."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_advanced_binary_path, mock_logger)

            result = extractor.extract()
            assert result is not None

            # Check that we can extract meaningful data
            assert result.number_of_sections > 0
            assert result.number_of_segments > 0

    def test_elf_advanced_architecture(self, elf_advanced_binary_path, mock_logger):
        """Test architecture detection for advanced ELF binary."""
        from redb.extractors.elf_extractors.elf_features import ELFFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = ELFFeaturesExtractor(elf_advanced_binary_path, mock_logger)

            arch = extractor._get_architecture()
            # Should detect a valid architecture
            assert arch != "unknown"
            assert arch != ""