Jan Faigl

176 papers A* 12A 21B 11C 4Misc 3Journal 61Unranked 64
YearRankTypeTitle / Venue / Authors
2026 J jnl
Auton. Robots
Jan Bayer, Jan Faigl
2025 conf
ECMR
Martin Zoula, Jan Faigl
2025 J jnl
IEEE Trans Autom. Sci. Eng.
MengChu Zhou, Yixiong Feng, Jan Faigl, Chen Lv, Weihong Grace Guo
2025 A* conf
ICRA
Rudolf J. Szadkowski, Jan Faigl
2025 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Rudolf J. Szadkowski, Jan Faigl
2025 conf
ECMR
Jindriska Deckerová, Jan Faigl
2025 J jnl
CoRR
Atharva Ghotavadekar, Frantisek Nekovár, Martin Saska, Jan Faigl
2024 J jnl
Expert Syst. Appl.
Jindriska Deckerová, Petr Vána, Jan Faigl
2024 J jnl
IEEE Trans Autom. Sci. Eng.
Ping Zhou, Xuewu Dai, Kyriakos G. Vamvoudakis, Jan Faigl, Hong Wang
2024 A conf
IROS
Vsevolod Hulchuk, Jan Bayer, Jan Faigl
2024 conf
MESAS
Milos Prágr, Jan Feber, Roman Adámek, Vsevolod Hulchuk, Jan Mazal, Jan Faigl
2024 A conf
IROS
Milos Prágr, Jan Bayer, Jan Faigl
2024 A conf
IROS
Jan Bayer, Jan Faigl
2024 conf
MESAS
Jan Bayer, Jan Faigl
2024 conf
WSOM+
Jindriska Deckerová, Jan Faigl
2024 A* conf
ICRA
Martin Zoula, Jan Faigl
2023 J jnl
Field Robotics
Jan Bayer, Petr Cízek, Jan Faigl
2023 J jnl
Auton. Robots
Milos Prágr, Jan Bayer, Jan Faigl
2023 A* conf
ICRA
Rudolf J. Szadkowski, Muhammad Sunny Nazeer, Matteo Cianchetti, Egidio Falotico, Jan Faigl
2023 J jnl
IEEE Robotics Autom. Lett.
David Valouch, Jan Faigl
2023 conf
ECMR
Vsevolod Hulchuk, Jan Bayer, Jan Faigl
2023 conf
ITAT
Jirí Kubík, Jan Faigl
2023 conf
ECMR
David Valouch, Jan Faigl
2023 J jnl
CoRR
Frantisek Nekovár, Jan Faigl, Martin Saska
2023 J jnl
IEEE Robotics Autom. Lett.
Frantisek Nekovár, Jan Faigl, Martin Saska
2023 J jnl
CoRR
Frantisek Nekovár, Jan Faigl, Martin Saska
2023 conf
ECMR
Jindriska Deckerová, Kristýna Kucerová, Jan Faigl
2023 A conf
IROS
Jakub Sláma, Jáchym Herynek, Jan Faigl
2023 J jnl
CoRR
Frantisek Nekovár, Jan Faigl, Martin Saska
2022 J jnl
Frontiers Robotics AI
Milos Prágr, Jan Bayer, Jan Faigl
2022 Misc conf
SAC
Petr Vána, Jan Faigl
2022 J jnl
Neural Comput. Appl.
Rudolf J. Szadkowski, Jan Drchal, Jan Faigl
2022 conf
ITAT
Josef Zelinka, Milos Prágr, Rudolf J. Szadkowski, Jan Bayer, Jan Faigl
2022 J jnl
Field Robotics
Navinda Kottege, Sebastian A. Scherer, Jan Faigl, Ali Akbar Aghamohammadi
2022 conf
ICANN (3)
Jan Feber, Rudolf J. Szadkowski, Jan Faigl
2022 A conf
IROS
Jakub Sláma, Petr Vána, Jan Faigl
2022 C conf
ETFA
Jirí Kubík, Rudolf J. Szadkowski, Jan Faigl
2022 J jnl
Field Robotics
Tomás Roucek, Martin Pecka, Petr Cízek, Tomás Petrícek, Jan Bayer, Vojtech Salanský, Teymur Azayev, Daniel Hert, Matej Petrlík, Tomás Báca, Vojtech Spurný, Vít Krátký, Pavel Petrácek, Dominic Baril, Maxime Vaidis, Vladimír Kubelka, François Pomerleau, Jan Faigl, Karel Zimmermann, Martin Saska, Tomás Svoboda, Tomás Krajník
2022 J jnl
IEEE Robotics Autom. Lett.
Doron Pinsky, Petr Vána, Jan Faigl, Oren Salzman
2022 J jnl
CoRR
Doron Pinsky, Petr Vána, Jan Faigl, Oren Salzman
2022 conf
ICARSC
Milos Prágr, Rudolf J. Szadkowski, Jan Bayer, Josef Zelinka, Jan Faigl
2022 J jnl
Expert Syst. Appl.
Jindriska Deckerová, Jan Faigl, Vít Krátký
2022 C conf
ETFA
Frantisek Nekovár, Jan Faigl, Martin Saska
2022 J jnl
IEEE Trans. Cybern.
Jan Drchal, Jan Faigl, Petr Vána
2021 conf
ECMR
Jan Bayer, Jan Faigl
2021 J jnl
IEEE Access
Petr Cízek, Martin Zoula, Jan Faigl
2021 conf
ECMR
Jáchym Herynek, Petr Vána, Jan Faigl
2021 conf
ITAT
Jan Feber, Rudolf J. Szadkowski, Jan Faigl
2021 conf
ECMR
David Valouch, Jan Faigl
2021 J jnl
IEEE Robotics Autom. Lett.
Frantisek Nekovár, Jan Faigl, Martin Saska
2021 conf
CASE
Jakub Sláma, Petr Vána, Jan Faigl
2021 J jnl
Frontiers Neurorobotics
Rudolf J. Szadkowski, Milos Prágr, Jan Faigl
2021 J jnl
CoRR
Tomás Roucek, Martin Pecka, Petr Cízek, Tomás Petrícek, Jan Bayer, Vojtech Salanský, Teymur Azayev, Daniel Hert, Matej Petrlík, Tomás Báca, Vojtech Spurný, Vít Krátký, Pavel Petrácek, Dominic Baril, Maxime Vaidis, Vladimír Kubelka, François Pomerleau, Jan Faigl, Karel Zimmermann, Martin Saska, Tomás Svoboda, Tomás Krajník
2021 conf
MESAS
Josef Zelinka, Milos Prágr, Rudolf J. Szadkowski, Jan Bayer, Jan Faigl
2021 A conf
IROS
Kristýna Kucerová, Petr Vána, Jan Faigl
2020 conf
MESAS
Jirí Kubík, Petr Cízek, Rudolf J. Szadkowski, Jan Faigl
2020 A conf
IROS
Jan Faigl, Petr Vána, Jan Drchal
2020 Misc conf
SAC
Petra Stefaníková, Petr Vána, Jan Faigl
2020 conf
ITAT
Jindriska Deckerová, Jan Faigl
2020 A* conf
ICRA
Petr Vána, Armando Alves Neto, Jan Faigl, Douglas G. Macharet
2020 A conf
IROS
Tomás Vintr, Zhi Yan, Kerem Eyisoy, Filip Kubis, Jan Blaha, Jirí Ulrich, Chittaranjan Srinivas Swaminathan, Sergi Molina Mellado, Tomasz Kucner, Martin Magnusson, Grzegorz Cielniak, Jan Faigl, Tom Duckett, Achim J. Lilienthal, Tomás Krajník
2020 B conf
IJCNN
Rudolf J. Szadkowski, Jan Faigl
2020 conf
MESAS
Martin Zoula, Milos Prágr, Jan Faigl
2020 Misc conf
SAC
Kristýna Kucerová, Petr Vana, Jan Faigl
2020 J jnl
Auton. Robots
Petr Vána, Jan Faigl
2020 J jnl
Robotics Auton. Syst.
Petr Vána, Jakub Sláma, Jan Faigl
2020 J jnl
Neural Comput. Appl.
Jan Faigl
2020 conf
MESAS
Jan Bayer, Jan Faigl
2020 J jnl
CoRR
Jan Drchal, Jan Faigl, Petr Vána
2019 J jnl
Robotics Auton. Syst.
Jan Faigl, Petr Cízek
2019 conf
MESAS
Milos Prágr, Petr Vána, Jan Faigl
2019 J jnl
J. Intell. Robotic Syst.
Martin Selecký, Jan Faigl, Milan Rollo
2019 conf
WSOM+
Rudolf J. Szadkowski, Jan Drchal, Jan Faigl
2019 conf
ICANN (2)
Rudolf J. Szadkowski, Jan Drchal, Jan Faigl
2019 conf
ICANN (1)
Milos Prágr, Jan Faigl
2019 conf
MESAS
Tomás Roucek, Martin Pecka, Petr Cízek, Tomás Petrícek, Jan Bayer, Vojtech Salanský, Daniel Hert, Matej Petrlík, Tomás Báca, Vojtech Spurný, François Pomerleau, Vladimir Kubelka, Jan Faigl, Karel Zimmermann, Martin Saska, Tomás Svoboda, Tomás Krajník
2019 J jnl
Appl. Soft Comput.
Jan Faigl
2019 J jnl
Auton. Robots
Robert Penicka, Jan Faigl, Martin Saska, Petr Vána
2019 conf
ECMR
Petr Vána, Jan Faigl, Jakub Sláma
2019 J jnl
IEEE Robotics Autom. Lett.
Jan Faigl, Petr Vana, Jindriska Deckerová
2019 conf
WSOM+
Jan Faigl, Milos Prágr
2019 A* conf
ICRA
Jan Faigl, Petr Vána, Robert Penicka
2019 conf
ECMR
Jan Bayer, Jan Faigl
2019 conf
ICANN (1)
Jan Faigl, Milos Prágr
2019 conf
Robotics: Science and Systems
Milos Prágr, Petr Cizek, Jan Bayer, Jan Faigl
2019 J jnl
IEEE Robotics Autom. Lett.
Robert Penicka, Jan Faigl, Martin Saska
2019 conf
MESAS
Jan Bayer, Jan Faigl
2019 conf
MESAS
Milos Prágr, Jan Faigl
2019 conf
ECMR
Milos Prágr, Petr Cízek, Jan Faigl
2019 J jnl
J. Field Robotics
Jan Faigl, Petr Vána, Robert Penicka, Martin Saska
2019 J jnl
Eur. J. Oper. Res.
Robert Penicka, Jan Faigl, Martin Saska
2018 A conf
IROS
Petr Vana, Jakub Sláma, Jan Faigl, Pavel Paces
2018 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Jan Faigl, Geoffrey A. Hollinger
2018 J jnl
Sensors
Martin Selecký, Jan Faigl, Milan Rollo
2018 A conf
IROS
Milos Prágr, Petr Cízek, Jan Faigl
2018 J jnl
Neurocomputing
Jan Faigl
2018 J jnl
Auton. Robots
Jen Jen Chung, Jan Faigl, Geoffrey A. Hollinger
2018 conf
MESAS
Milos Prágr, Petr Cízek, Jan Faigl
2018 conf
ITAT
Rudolf J. Szadkowski, Petr Cizek, Jan Faigl
2018 conf
MESAS
Jan Bayer, Jan Faigl
2018 conf
MESAS
Minh Thao Nguyenová, Petr Cízek, Jan Faigl
2018 conf
ICRAI
Jan Faigl, Jindriska Deckerová
2018 A conf
IROS
Petr Cizek, Jirí Kubík, Jan Faigl
2018 J jnl
Auton. Robots
Graeme Best, Jan Faigl, Robert Fitch
2018 conf
Robotics: Science and Systems
Petr Vána, Jan Faigl
2018 J jnl
IEEE Trans. Ind. Informatics
Petr Cizek, Jan Faigl
2018 J jnl
IEEE Robotics Autom. Lett.
Jan Faigl, Petr Vana
2018 conf
ICANN (3)
Rudolf J. Szadkowski, Jan Drchal, Jan Faigl
2018 conf
MESAS
Jakub Marek, Petr Vána, Jan Faigl
2017 J jnl
Ind. Robot
Michal R. Nowicki, Dominik Belter, Aleksander Kostusiak, Petr Cizek, Jan Faigl, Piotr Skrzypczynski
2017 conf
ECMR
Petr Vana, Jan Faigl, Jakub Sláma, Robert Penicka
2017 J jnl
IEEE Robotics Autom. Lett.
Robert Penicka, Jan Faigl, Petr Vána, Martin Saska
2017 conf
ITAT
Petr Cízek, Jan Faigl, Jan Bayer
2017 A conf
IROS
Petr Cizek, Diar Masri, Jan Faigl
2017 J jnl
CoRR
Tomás Krajník, Filip Majer, Lucie Halodova, Jan Bayer, Tomas Vintr, Jan Faigl
2017 B conf
IJCNN
Petr Cizek, Pavel Milicka, Jan Faigl
2017 A conf
IROS
Jan Faigl, Robert Penicka
2017 B conf
IJCNN
Jan Faigl
2017 conf
ECMR
Jan Faigl, Petr Vana, Martin Saska, Tomás Báca, Vojtech Spurný
2017 conf
WSOM
Jan Faigl
2017 J jnl
Auton. Robots
Martin Saska, Tomás Báca, Justin Thomas, Jan Chudoba, Libor Preucil, Tomás Krajník, Jan Faigl, Giuseppe Loianno, Vijay Kumar
2017 B conf
IJCNN
Jan Faigl, Petr Vana
2016 J jnl
Comput. Intell. Neurosci.
Jan Faigl
2016 conf
SSCI
Vojtech Vonásek, Jan Faigl
2016 A* conf
ICRA
Petr Cizek, Jan Faigl, Diar Masri
2016 A conf
IROS
Graeme Best, Jan Faigl, Robert Fitch
2016 conf
ITAT
Pavel Milicka, Petr Cizek, Jan Faigl
2016 conf
WSOM
Jan Faigl
2016 B conf
SMC
Petr Cizek, Jan Faigl
2016 A* conf
ICRA
Premysl Kafka, Jan Faigl, Petr Vana
2016 A* conf
ICRA
Martin Stejskal, Jakub Mrva, Jan Faigl
2016 B conf
SMC
Jan Faigl, Petr Vana
2016 conf
ICANN (2)
Jan Faigl, Petr Vána
2016 B conf
SMC
Jan Faigl, Robert Penicka, Graeme Best
2016 A conf
IROS
Thomas Fischer, Taihú Pire, Petr Cizek, Pablo De Cristóforis, Jan Faigl
2015 conf
ITAT
Jakub Mrva, Jan Faigl
2015 conf
ECMR
Jan Faigl, Miroslav Kulich
2015 A conf
IROS
Petr Vana, Jan Faigl
2015 J jnl
Sensors
Alejandro Vázquez-Otero, Jan Faigl, Raquel Dormido, Natividad Duro
2015 conf
RoMoCo
Jakub Mrva, Jan Faigl
2014 J jnl
J. Intell. Robotic Syst.
Tomás Krajník, Matías Alejandro Nitsche, Jan Faigl, Petr Vanek, Martin Saska, Libor Preucil, Tom Duckett, Marta Mejail
2014 C conf
EUMAS
Jan Faigl, Olivier Simonin, François Charpillet
2014 conf
ICINCO (2)
Petr Vanek, Jan Faigl, Diar Masri
2014 J jnl
Int. J. Unconv. Comput.
Alejandro Vázquez-Otero, Jan Faigl, Natividad Duro, Raquel Dormido
2014 conf
WSOM
Jan Faigl, Geoffrey A. Hollinger
2014 B conf
ESANN
Jan Faigl, Peter Vanìk, Miroslav Kulich
2014 A conf
IROS
Jan Faigl, Geoffrey A. Hollinger
2013 C conf
INDIN
Jirí Vokrínek, Pavel Janovsky, Jan Faigl, Petr Benda, Fabio Tango, Daniele Pinotti
2013 A conf
IROS
Michal Cáp, Peter Novák, Martin Selecký, Jan Faigl, Jiff Vokffnek
2013 conf
ICAR
Tomás Krajník, Matías Nitsche, Jan Faigl, Tom Duckett, Marta Mejail, Libor Preucil
2013 J jnl
Neurocomputing
Daniel Fiser, Jan Faigl, Miroslav Kulich
2013 A* conf
ICRA
Jan Faigl, Tomás Krajník, Jan Chudoba, Libor Preucil, Martin Saska
2013 conf
ECMR
Jan Faigl, Miroslav Kulich
2013 A* conf
ICRA
Petr Janousek, Jan Faigl
2013 J jnl
IEEE Trans. Educ.
Miroslav Kulich, Jan Chudoba, Karel Kosnar, Tomás Krajník, Jan Faigl, Libor Preucil
2013 J jnl
Robotics Auton. Syst.
Jan Faigl, Vojtech Vonásek, Libor Preucil
2012 A conf
IROS
Jan Faigl, Miroslav Kulich, Libor Preucil
2012 A conf
IROS
Martin Saska, Tomás Krajník, Jan Faigl, Vojtech Vonásek, Libor Preucil
2012 A* conf
ICRA
Jan Faigl, Tomás Krajník, Vojtech Vonásek, Libor Preucil
2012 A conf
IROS
Alejandro Vázquez-Otero, Jan Faigl, Alberto P. Muñuzuri
2011 conf
ECMR
Jan Faigl, Vojtech Vonásek, Libor Preucil
2011 conf
ECMR
Vojtech Vonásek, Jan Faigl, Tomás Krajník, Libor Preucil
2011 J jnl
J. Intell. Robotic Syst.
Jan Faigl, Miroslav Kulich, Libor Preucil
2011 conf
CSEDU (1)
Jan Chudoba, Jan Faigl, Miroslav Kulich, Tomás Krajník, Karel Kosnar, Libor Preucil
2011 conf
Eurobot Conference
Tomás Krajník, Vojtech Vonásek, Daniel Fiser, Jan Faigl
2011 J jnl
Neurocomputing
Jan Faigl, Miroslav Kulich, Vojtech Vonásek, Libor Preucil
2011 J jnl
Appl. Soft Comput.
Jan Faigl, Libor Preucil
2011 B conf
ESANN
Jan Faigl, Jan Macák
2011 A* conf
ICRA
Miroslav Kulich, Jan Faigl, Libor Preucil
2011 J jnl
Inf. Sci.
Jan Faigl
2011 conf
ICANN (1)
Jan Faigl, Libor Preucil
2010 J jnl
IEEE Trans. Neural Networks
Jan Faigl
2010 conf
Eurobot Conference
Lenka Mudrová, Jan Faigl, Jaroslav Halgasík, Tomás Krajník
2010 J jnl
J. Field Robotics
Tomás Krajník, Jan Faigl, Vojtech Vonásek, Karel Kosnar, Miroslav Kulich, Libor Preucil
2009 B conf
ICAART
Miroslav Kulich, Jan Faigl, Karel Kosnar, Libor Preucil, Jan Chudoba
2006 B conf
EuroGP
Jirí Kubalík, Jan Faigl
tests/integration/test_pe_extractor.py
← Index tests/integration/test_pe_extractor.py python
"""
Integration tests for the PEExtractor base class.
"""
import pytest
from unittest.mock import Mock, patch, MagicMock

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


class TestPEExtractorInitialization:
    """Tests for PEExtractor initialization."""

    def test_pe_extractor_with_valid_pe(self, pe_binary_path, mock_logger):
        """Test PEExtractor initialization with valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            assert extractor.pe is not None
            assert extractor.filepath == pe_binary_path

    def test_pe_extractor_with_provided_pe_object(self, pe_binary_path, mock_logger, pe_object):
        """Test PEExtractor initialization with pre-existing PE object."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should use the provided PE object, not create a new one
            assert extractor.pe is pe_object

    def test_pe_extractor_with_invalid_file(self, elf_binary_path, mock_logger):
        """Test PEExtractor initialization with non-PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should return None for pe when file is not a valid PE
            assert extractor.pe is None
            # Logger should have recorded an error
            assert mock_logger.error.called


class TestPEExtractorMethods:
    """Tests for PEExtractor helper methods."""

    def test_check_dotnet_true(self, pe_binary_path, mock_logger):
        """Test _check_dotnet returns True for .NET PE."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # The test PE file is a .NET binary
            if extractor.pe is not None:
                result = extractor._check_dotnet()
                # d8637bdbcfc9112fcb1f0167b398e771 is a .NET binary
                assert result is True

    def test_check_dotnet_false(self, elf_binary_path, mock_logger):
        """Test _check_dotnet returns False for non-PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should return False when PE is None
            result = extractor._check_dotnet()
            assert result is False

    def test_is_signed_false(self, pe_binary_path, mock_logger):
        """Test _is_signed method."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            if extractor.pe is not None:
                result = extractor._is_signed()
                # Result depends on the actual binary
                assert isinstance(result, bool)

    def test_has_overlay(self, pe_binary_path, mock_logger):
        """Test _has_overlay method."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            if extractor.pe is not None:
                result = extractor._has_overlay()
                assert isinstance(result, bool)


class TestGeneratePEFileObject:
    """Tests for _generate_pefile_object method."""

    def test_generate_pefile_object_valid(self, pe_binary_path, mock_logger):
        """Test _generate_pefile_object with valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # The PE object should be created successfully
            assert extractor.pe is not None

    def test_generate_pefile_object_invalid(self, temp_text_file, mock_logger):
        """Test _generate_pefile_object with invalid file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            # Should return None for invalid PE
            assert extractor.pe is None


class TestGenerateDotNetFileObject:
    """Tests for _generate_dotnetfile_object method."""

    def test_generate_dotnetfile_object_valid(self, pe_binary_path, mock_logger):
        """Test _generate_dotnetfile_object with .NET PE file."""
        from redb.extractors.pe_extractors.pe_dotnet import PEDotNetExtractor

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

            if extractor.pe is not None and extractor._check_dotnet():
                dotnet, error = extractor._generate_dotnetfile_object()
                # Should create dotnet object for .NET PE
                assert dotnet is not None
                assert error is None

    def test_generate_dotnetfile_object_invalid(self, elf_binary_path, mock_logger):
        """Test _generate_dotnetfile_object with non-.NET file."""
        from redb.extractors.pe_extractors.pe_dotnet import PEDotNetExtractor

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

            dotnet, error = extractor._generate_dotnetfile_object()
            # Should return error for non-.NET file
            assert dotnet is None
            assert error is not None


class TestPEExtractorTag:
    """Tests for tag method in PE extractors."""

    def test_pe_features_tag(self, pe_binary_path, mock_logger):
        """Test that PEFeaturesExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_FEATURES.value

    def test_pe_import_tag(self, pe_binary_path, mock_logger):
        """Test that PEImportExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEImportExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_IMPORT.value

    def test_pe_section_tag(self, pe_binary_path, mock_logger):
        """Test that PESectionExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PESectionExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_SECTION.value


class TestPEExtractorClickHouseTable:
    """Tests for get_clickhouse_table method in PE extractors."""

    def test_pe_features_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PEFeaturesExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)
            assert extractor.get_clickhouse_table() == "redb_pe_features"

    def test_pe_import_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PEImportExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEImportExtractor(pe_binary_path, mock_logger)
            assert extractor.get_clickhouse_table() == "redb_pe_imports"

    def test_pe_section_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PESectionExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PESectionExtractor(pe_binary_path, mock_logger)
            assert extractor.get_clickhouse_table() == "redb_pe_sections"


class TestPEExtractorPrepareExportData:
    """Tests for prepare_export_data method in PE extractors."""

    def test_pe_features_prepare_export_elasticsearch(self, pe_binary_path, mock_logger):
        """Test prepare_export_data for Elasticsearch."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            if extractor.pe is not None:
                # First extract
                extractor.extract()
                result = extractor.prepare_export_data("ElasticsearchExporter")
                # Should return the pe_features dataclass
                assert result is extractor.pe_features

    def test_pe_features_prepare_export_clickhouse(self, pe_binary_path, mock_logger):
        """Test prepare_export_data for ClickHouse."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

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

            if extractor.pe is not None:
                # 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)