Vero Vanden Abeele

116 papers A* 5A 9B 6C 5Misc 17Journal 30Unranked 40
YearRankTypeTitle / Venue / Authors
2026 conf
IUI Companion
Dries Van Dievoort, Maxwell Szymanski, Robin De Croon, Vero Vanden Abeele, Katrien Verbert
2026 J jnl
ACM Trans. Interact. Intell. Syst.
Maxwell Szymanski, Stijn Keyaerts, Cristina Conati, Robin De Croon, Vero Vanden Abeele, Katrien Verbert
2025 A conf
UMAP
Maxwell Szymanski, Vero Vanden Abeele, Katrien Verbert
2025 A conf
UMAP
Maxwell Szymanski, John C. Stamper, Vero Vanden Abeele, Katrien Verbert
2025 A conf
IUI
Yu Chen, Katrien Verbert, Kathrin Gerling, Marie-Elena Vanden Abeele, Vero Vanden Abeele
2024 J jnl
CoRR
Aqeel Haider, Günter Wallner, Kathrin Gerling, Vero Vanden Abeele
2024 J jnl
Proc. ACM Hum. Comput. Interact.
Aqeel Haider, Günter Wallner, Kathrin Gerling, Vero Vanden Abeele
2024 conf
CHI Extended Abstracts
Maxwell Szymanski, Vero Vanden Abeele, Katrien Verbert
2024 C conf
FDG
Aqeel Haider, Tom Romanus, Rebecca Tang, Kathrin Gerling, Vero Vanden Abeele
2024 A conf
LAK
Maxwell Szymanski, Jeroen Ooge, Robin De Croon, Vero Vanden Abeele, Katrien Verbert
2024 conf
PervasiveHealth (2)
Maxwell Szymanski, Leen Van Houdt, Robin De Croon, Katrien Verbert, Vero Vanden Abeele
2024 conf
CHI PLAY (Companion)
Regan L. Mandryk, Vero Vanden Abeele, Daniel Johnson, Lennart E. Nacke, Kathrin Gerling, Julian Frommel, Guo Freeman
2023 A* conf
CHI
Alemitu Mequanint Bezabih, Kathrin Gerling, Workeabeba Abebe, Vero Vanden Abeele
2023 conf
IntRS@RecSys
Maxwell Szymanski, Cristina Conati, Vero Vanden Abeele, Katrien Verbert
2023 conf
CHI PLAY (Companion)
Aqeel Haider, Qiantong Gao, Kathrin Gerling, Vero Vanden Abeele
2023 J jnl
ACM Trans. Access. Comput.
Dimitri Vargemidis, Kathrin Gerling, Vero Vanden Abeele, Luc Geurts
2023 A* conf
CHI
Kymeng Tang, Kathrin Gerling, Vero Vanden Abeele, Luc Geurts, Maria Aufheimer
2023 conf
CHI PLAY (Companion)
Aqeel Haider, Günter Wallner, Kathrin Gerling, Vero Vanden Abeele
2022 A conf
RecSys
Maxwell Szymanski, Katrien Verbert, Vero Vanden Abeele
2022 A conf
IUI
Francisco Gutiérrez, Nyi Nyi Htun, Vero Vanden Abeele, Robin De Croon, Katrien Verbert
2022 conf
IUI Workshops
Maxwell Szymanski, Vero Vanden Abeele, Katrien Verbert
2022 A conf
ASSETS
Dimitri Vargemidis, Kathrin Gerling, Luc Geurts, Vero Vanden Abeele
2022 J jnl
EAI Endorsed Trans. Pervasive Health Technol.
Ine D'haeseleer, Jamie Schoofs, Kim Schutters, Dominique Schreurs, Vero Vanden Abeele
2022 A* conf
CHI
Bert Vandenberghe, Kathrin Gerling, Luc Geurts, Vero Vanden Abeele
2022 A* conf
CHI
Alemitu Mequanint Bezabih, Kathrin Gerling, Workeabeba Abebe, Vero Vanden Abeele
2022 J jnl
Proc. ACM Hum. Comput. Interact.
Oscar Alvarado, Vero Vanden Abeele, David Geerts, Katrien Verbert
2022 J jnl
Proc. ACM Hum. Comput. Interact.
Aqeel Haider, Casper Harteveld, Daniel Johnson, Max V. Birk, Regan L. Mandryk, Magy Seif El-Nasr, Lennart E. Nacke, Kathrin Gerling, Vero Vanden Abeele
2021 conf
HCI (28)
Robin De Croon, Jonas Geuens, Katrien Verbert, Vero Vanden Abeele
2021 B conf
TEI
Oscar Alvarado, Vero Vanden Abeele, David Geerts, Francisco Gutiérrez, Katrien Verbert
2021 C conf
ICT4AWE
Ine D'haeseleer, Karsten Gielis, Vero Vanden Abeele
2021 J jnl
ACM Trans. Access. Comput.
Vero Vanden Abeele, Brenda Schraepen, Hanne Huygelier, Céline R. Gillebert, Kathrin Gerling, Raymond van Ee
2021 J jnl
IEEE Trans. Vis. Comput. Graph.
Houda Lamqaddam, Andrew Vande Moere, Vero Vanden Abeele, Koenraad Brosens, Katrien Verbert
2021 J jnl
ACM Trans. Access. Comput.
Dimitri Vargemidis, Kathrin Gerling, Vero Vanden Abeele, Luc Geurts, Katta Spiel
2021 J jnl
Sensors
Yiyuan Zhang, Ine D'haeseleer, José Coelho, Vero Vanden Abeele, Bart Vanrumste
2021 conf
IUI Companion
Robin De Croon, Artuur Leeuwenberg, Jan Aerts, Marie-Francine Moens, Vero Vanden Abeele, Katrien Verbert
2021 Misc conf
CHI PLAY
Robbe Kimpen, Robin De Croon, Vero Vanden Abeele, Katrien Verbert
2020 conf
ICHI
Yiyuan Zhang, Jorgen Wullems, Ine D'haeseleer, Vero Vanden Abeele, Bart Vanrumste
2020 Misc ed.
CHI PLAY
Pejman Mirza-Babaei, Victoria McArthur, Vero Vanden Abeele, Max Birk
2020 ed.
CHI PLAY (Companion)
Pejman Mirza-Babaei, Victoria McArthur, Vero Vanden Abeele, Max Birk
2020 J jnl
ACM Trans. Access. Comput.
Kathrin Gerling, Mo Ray, Vero Vanden Abeele, Adam Evans
2020 A conf
Conference on Designing Interactive Systems (Companion Volume)
Ine D'haeseleer, Nikki Dehennin, Bart Vanrumste, Peter Bernaers, Dominique Schreurs, Vero Vanden Abeele
2020 J jnl
Int. J. Hum. Comput. Stud.
Vero Vanden Abeele, Katta Spiel, Lennart E. Nacke, Daniel Johnson, Kathrin Gerling
2020 Misc conf
CHI PLAY
Leen Van Houdt, Martijn Millecamp, Katrien Verbert, Vero Vanden Abeele
2020 Misc conf
NordiCHI
Hannelore Strauven, Katta Spiel, Ine D'haeseleer, Hans Hallez, Bart Vanrumste, Vero Vanden Abeele
2020 J jnl
CoRR
Oscar Alvarado, Hendrik Heuer, Vero Vanden Abeele, Andreas Breiter, Katrien Verbert
2020 J jnl
Proc. ACM Hum. Comput. Interact.
Oscar Alvarado, Hendrik Heuer, Vero Vanden Abeele, Andreas Breiter, Katrien Verbert
2020 conf
ICHI
Robin De Croon, Francisco Gutiérrez, Rachel Berry, Siân Astley, Katrien Verbert, Vero Vanden Abeele
2020 Misc conf
CHI PLAY
Jeroen Ooge, Robin De Croon, Katrien Verbert, Vero Vanden Abeele
2020 conf
CHI PLAY (Companion)
Aqeel Haider, Kathrin Gerling, Vero Vanden Abeele
2020 C conf
ICT4AWE
Ine D'haeseleer, Dries Oeyen, Bart Vanrumste, Dominique Schreurs, Vero Vanden Abeele
2020 conf
HEALTHINF
Hannelore Strauven, Ine D'haeseleer, Kristof T'Jonck, Hans Hallez, Vero Vanden Abeele, Pieter Crombez, Bart Vanrumste
2020 J jnl
ACM Trans. Comput. Heal.
Dimitri Vargemidis, Kathrin Gerling, Katta Spiel, Vero Vanden Abeele, Luc Geurts
2020 conf
ICHI
Jonas Geuens, Thijs Willem Swinnen, Luc Geurts, René Westhovens, Robin De Croon, Vero Vanden Abeele
2019 conf
INTERACT (3)
Oscar Alvarado, Vero Vanden Abeele, David Geerts, Katrien Verbert
2019 conf
ICHI
Jonas Geuens, Luc Geurts, Kathrin Gerling, Robin De Croon, Vero Vanden Abeele
2019 Misc conf
CHI PLAY
Karsten Gielis, Katrien Verbert, Jos Tournoy, Vero Vanden Abeele
2019 A conf
ASSETS
Ine D'haeseleer, Kathrin Gerling, Dominique Schreurs, Bart Vanrumste, Vero Vanden Abeele
2019 J jnl
Int. J. Hum. Comput. Stud.
Maarten Van Mechelen, Ann Laenen, Bieke Zaman, Bert Willems, Vero Vanden Abeele
2019 conf
ICHI
Karsten Gielis, Joren Kennes, Christophe De Dobbeleer, Steven Puttemans, Vero Vanden Abeele
2019 ed.
CHI PLAY (Companion)
Joan Arnedo, Lennart E. Nacke, Vero Vanden Abeele, Phoebe O. Toups Dugas
2019 Misc conf
CHI PLAY
Kieran Hicks, Kathrin Gerling, Patrick Dickinson, Vero Vanden Abeele
2019 conf
ICHI
Robin De Croon, Alemitu Mequanint Bezabih, Jonas Geuens, Davina Wildemeersch, Dries Oeyen, Katrien Verbert, Vero Vanden Abeele
2019 J jnl
EAI Endorsed Trans. Pervasive Health Technol.
Esmael Kedir Nida, Luc Geurts, Vero Vanden Abeele
2019 Misc ed.
CHI PLAY
Joan Arnedo, Lennart E. Nacke, Vero Vanden Abeele, Phoebe O. Toups Dugas
2019 conf
CHI PLAY (Companion)
Bert Vandenberghe, Jef Meijvis, Thomas Sodermans, Kathrin Gerling, Vero Vanden Abeele, Luc Geurts
2019 B conf
TEI
Bert Vandenberghe, Kathrin Gerling, Luc Geurts, Vero Vanden Abeele
2019 J jnl
Interactions
Max Valentin Birk, Greg Wadley, Vero Vanden Abeele, Regan L. Mandryk, John B. Torous
2018 conf
CHI PLAY (Companion)
Max Valentin Birk, Vero Vanden Abeele, Greg Wadley, John B. Torous
2018 conf
ICHI
Robin De Croon, Davina Wildemeersch, Joris Wille, Katrien Verbert, Vero Vanden Abeele
2018 conf
PDC (2)
Jonas Geuens, Luc Geurts, Thijs Willem Swinnen, René Westhovens, Maarten Van Mechelen, Vero Vanden Abeele
2017 conf
PGW@CHI PLAY
Robin De Croon, Davina Wildemeersch, Joris Wille, Katrien Verbert, Vero Vanden Abeele
2017 conf
CHI PLAY (Companion)
Karsten Gielis, Filipa Brito, Jos Tournoy, Vero Vanden Abeele
2017 conf
CHI PLAY (Companion)
Regan L. Mandryk, Max Valentin Birk, Adam Lobel, Marieke van Rooij, Isabela Granic, Vero Vanden Abeele
2017 conf
INTERACT (1)
Robin De Croon, Bruno De Lemos Ribeiro Pinto Cardoso, Joris Klerkx, Vero Vanden Abeele, Katrien Verbert
2017 conf
CHI PLAY (Companion)
Hanne Huygelier, Céline R. Gillebert, Raymond van Ee, Vero Vanden Abeele
2017 J jnl
Int. J. Hum. Comput. Stud.
Maarten Van Mechelen, Jan Derboven, Ann Laenen, Bert Willems, David Geerts, Vero Vanden Abeele
2016 conf
CHI PLAY (Companion)
Vero Vanden Abeele, Lennart E. Nacke, Elisa D. Mekler, Daniel M. Johnson
2016 conf
CHI PLAY (Companion)
Jonas Geuens, Ine D'haeseleer, Luc Geurts, Vero Vanden Abeele
2016 Misc ed.
CHI PLAY
Anna L. Cox, Phoebe O. Toups Dugas, Regan L. Mandryk, Paul A. Cairns, Vero Vanden Abeele, Daniel M. Johnson
2016 ed.
CHI PLAY (Companion)
Anna L. Cox, Phoebe O. Toups Dugas, Regan L. Mandryk, Paul A. Cairns, Vero Vanden Abeele, Daniel M. Johnson
2015 Misc conf
IDC
Maarten Van Mechelen, Bieke Zaman, Ann Laenen, Vero Vanden Abeele
2015 B conf
TEI
Argyro Moraiti, Vero Vanden Abeele, Erwin Vanroye, Luc Geurts
2015 Misc conf
CHI PLAY
Vero Vanden Abeele, Jan Wouters, Pol Ghesquière, Ann Goeleven, Luc Geurts
2015 J jnl
New Media Soc.
Bob De Schutter, Julie A. Brown, Vero Vanden Abeele
2014 J jnl
Int. J. Child Comput. Interact.
Christiane Moser, Manfred Tscheligi, Bieke Zaman, Vero Vanden Abeele, Luc Geurts, Mieke Vandewaetere, Panos Markopoulos, Peta Wyeth
2014 Misc conf
IDC
Maarten Van Mechelen, Mathieu Gielen, Vero Vanden Abeele, Ann Laenen, Bieke Zaman
2014 C conf
FDG
Bob De Schutter, Vero Vanden Abeele
2014 J jnl
Comput. Hum. Behav.
Bieke Zaman, Kristof Geurden, Rozane De Cock, Bob De Schutter, Vero Vanden Abeele
2014 Misc conf
CHI PLAY
Rilla Khaled, Vero Vanden Abeele, Maarten Van Mechelen, Asimina Vasalou
2014 Misc conf
CHI PLAY
Luc Geurts, Vero Vanden Abeele, Kevin Van Keer, Ruben Isenborghs
2014 conf
GFHEU
Malypoeur Plong, Vero Vanden Abeele, Luc Geurts
2014 B conf
TEI
Luc Geurts, Jolien Deville, Vero Vanden Abeele, Jelle Saldien, Karen Vanderloock
2013 conf
GFHEU
Lieven Van den Audenaeren, Véronique Celis, Vero Vanden Abeele, Luc Geurts, Jelle Husson, Pol Ghesquière, Jan Wouters, Leen Loyez, Ann Goeleven
2013 conf
CHI Extended Abstracts
Christiane Moser, Manfred Tscheligi, Bieke Zaman, Vero Vanden Abeele, Luc Geurts, Mieke Vandewaetere, Panos Markopoulos, Peta Wyeth, Jörg Hofstätter
2013 J jnl
Int. J. Child Comput. Interact.
Bieke Zaman, Vero Vanden Abeele, Dirk De Grooff
2013 C conf
FDG
Vero Vanden Abeele, Bob De Schutter, Brian J. Gajadhar, Daniel M. Johnson
2013 A* conf
UIST
Karen Vanderloock, Vero Vanden Abeele, Johan A. K. Suykens, Luc Geurts
2013 Misc conf
IDC
Véronique Celis, Jelle Husson, Vero Vanden Abeele, Leen Loyez, Lieven Van den Audenaeren, Pol Ghesquière, Ann Goeleven, Jan Wouters, Luc Geurts
2013 J jnl
Int. J. Arts Technol.
Jan-Henk Annema, Mathijs Verstraete, Vero Vanden Abeele, Stef Desmet, David Geerts
2012 conf
CHI Extended Abstracts
Lieven Van den Audenaeren, Vero Vanden Abeele, Luc Geurts, Jelle Husson, Jan-Henk Annema, Stef Desmet
2012 J jnl
Pers. Ubiquitous Comput.
Bieke Zaman, Vero Vanden Abeele, Panos Markopoulos, Paul Marshall
2012 conf
CHI Extended Abstracts
Vero Vanden Abeele, Erik Hauters, Bieke Zaman
2012 conf
Fun and Games
Luc Geurts, Andy Van Woensel, Vero Vanden Abeele
2012 B conf
TEI
Luc Geurts, Vero Vanden Abeele
2012 J jnl
Pers. Ubiquitous Comput.
Vero Vanden Abeele, Bieke Zaman, Dirk De Grooff
2011 B conf
TEI
Luc Geurts, Vero Vanden Abeele, Jelle Husson, Frederik Windey, Maarten Van Overveldt, Jan-Henk Annema, Stef Desmet
2010 J jnl
Pers. Ubiquitous Comput.
Vero Vanden Abeele, Bob De Schutter
2010 conf
Fun and Games
Bob De Schutter, Vero Vanden Abeele
2010 ed.
Fun and Games
Vero Vanden Abeele, Bieke Zaman, Marianna Obrist, Wijnand A. IJsselsteijn
2010 Misc conf
IDC
Bieke Zaman, Vero Vanden Abeele
2010 conf
Fun and Games
Jan-Henk Annema, Mathijs Verstraete, Vero Vanden Abeele, Stef Desmet, David Geerts
2009 conf
CHI Extended Abstracts
Bieke Zaman, Vero Vanden Abeele, Panos Markopoulos, Paul Marshall
2008 J jnl
Adv. Hum. Comput. Interact.
Vero Vanden Abeele, Bieke Zaman
2008 conf
Fun and Games
Vero Vanden Abeele, Bieke Zaman, Mariek Vanden Abeele
2007 J jnl
J. Game Dev.
Vero Vanden Abeele, Jelle Husson, Luc Vandeurzen, Stef Desmet
2007 Misc conf
IDC
Bieke Zaman, Vero Vanden Abeele
tests/integration/test_pe_extractors.py
← Index tests/integration/test_pe_extractors.py python
"""
Integration tests for PE-specific extractors.
"""
import pytest
from unittest.mock import Mock, patch, MagicMock

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


# ============================================================================
# PEFeaturesExtractor Tests
# ============================================================================

class TestPEFeaturesExtractor:
    """Tests for PEFeaturesExtractor class."""

    def test_extract_valid_pe(self, pe_binary_path, mock_logger):
        """Test extracting features from valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.models.dataclasses import PE

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            assert result is not None
            assert isinstance(result, PE)

    def test_extract_pe_type(self, pe_binary_path, mock_logger):
        """Test PE type detection (DLL, EXE, DRIVER)."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            assert result.type in ["DLL", "EXE", "DRIVER"]

    def test_extract_architecture(self, pe_binary_path, mock_logger):
        """Test architecture detection."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Architecture should be detected
            assert result.architecture is not None

    def test_extract_entry_point(self, pe_binary_path, mock_logger):
        """Test entry point extraction."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Entry point should be a hex string
            assert result.entry_point.startswith("0x")

    def test_extract_compilation_time(self, pe_binary_path, mock_logger):
        """Test compilation time extraction."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Compilation time should be an integer timestamp
            assert isinstance(result.compilation_time, int)
            assert result.compilation_time_utc is not None

    def test_extract_dotnet_detection(self, pe_binary_path, mock_logger):
        """Test .NET detection."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Should be True for the test .NET binary
            assert isinstance(result.is_dotnet, bool)
            assert result.is_dotnet is True  # Test file is .NET

    def test_extract_headers(self, pe_binary_path, mock_logger):
        """Test header extraction."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            assert result.dos_header is not None
            assert result.nt_header is not None
            assert result.file_header is not None
            assert result.optional_header is not None

    def test_extract_counts(self, pe_binary_path, mock_logger):
        """Test section/import/export counts."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            assert isinstance(result.number_of_sections, int)
            assert isinstance(result.number_of_imports, int)
            assert isinstance(result.number_of_exports, int)
            assert isinstance(result.number_of_resources, int)

    def test_extract_rich_header(self, pe_binary_path, mock_logger):
        """Test Rich header extraction."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Rich header may or may not be present
            # If present, should be JSON string
            if result.rich_header_dump is not None:
                assert isinstance(result.rich_header_dump, str)

    def test_extract_version_info(self, pe_binary_path, mock_logger):
        """Test version info extraction."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # Version info may or may not be present
            if result.version_info is not None:
                assert isinstance(result.version_info, list)


# ============================================================================
# PEImportExtractor Tests
# ============================================================================

class TestPEImportExtractor:
    """Tests for PEImportExtractor class."""

    def test_extract_imports(self, pe_binary_path, mock_logger):
        """Test import extraction."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor
        from redb.models.dataclasses import PEImport

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None:
                assert isinstance(result, PEImport)
                assert isinstance(result.pe_imports_total, int)

    def test_extract_import_libraries(self, pe_binary_path, mock_logger):
        """Test import library extraction."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None and result.pe_import_libraryName is not None:
                assert isinstance(result.pe_import_libraryName, list)

    def test_extract_import_functions(self, pe_binary_path, mock_logger):
        """Test import function extraction."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None and result.pe_import_functions is not None:
                assert isinstance(result.pe_import_functions, list)

    def test_prepare_export_clickhouse(self, pe_binary_path, mock_logger):
        """Test ClickHouse export preparation."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.prepare_export_data("ClickHouseExporter")

            if result is not None:
                data, column_names, column_type_names = result
                assert 'library_name' in column_names
                assert 'function_name' in column_names


# ============================================================================
# PESectionExtractor Tests
# ============================================================================

class TestPESectionExtractor:
    """Tests for PESectionExtractor class."""

    def test_extract_sections(self, pe_binary_path, mock_logger):
        """Test section extraction."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor
        from redb.models.dataclasses import PESection

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            assert result is not None
            assert isinstance(result, list)
            assert len(result) > 0
            assert isinstance(result[0], PESection)

    def test_section_properties(self, pe_binary_path, mock_logger):
        """Test section property extraction."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None and len(result) > 0:
                section = result[0]
                assert section.section_name is not None
                assert section.section_entropy >= 0
                assert section.section_sha256 is not None
                assert section.section_md5 is not None
                assert section.section_size >= 0

    def test_section_entropy_range(self, pe_binary_path, mock_logger):
        """Test that section entropy is in valid range."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None:
                for section in result:
                    assert 0 <= section.section_entropy <= 8

    def test_prepare_export_clickhouse(self, pe_binary_path, mock_logger):
        """Test ClickHouse export preparation."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.prepare_export_data("ClickHouseExporter")

            if result is not None:
                data, column_names, column_type_names = result
                assert 'section_name' in column_names
                assert 'section_entropy' in column_names
                assert 'section_sha256' in column_names


# ============================================================================
# PEResourceExtractor Tests
# ============================================================================

class TestPEResourceExtractor:
    """Tests for PEResourceExtractor class."""

    def test_extract_resources(self, pe_binary_path, mock_logger):
        """Test resource extraction."""
        from redb.extractors.pe_extractors.pe_resources import PEResourceExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # May be None if no resources
            if result is not None:
                assert isinstance(result, list)

    def test_resource_properties(self, pe_binary_path, mock_logger):
        """Test resource property extraction."""
        from redb.extractors.pe_extractors.pe_resources import PEResourceExtractor
        from redb.models.dataclasses import PEResource

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            if result is not None and len(result) > 0:
                resource = result[0]
                assert isinstance(resource, PEResource)
                assert resource.resource_type is not None


# ============================================================================
# PEOverlayExtractor Tests
# ============================================================================

class TestPEOverlayExtractor:
    """Tests for PEOverlayExtractor class."""

    def test_extract_overlay(self, pe_binary_path, mock_logger):
        """Test overlay extraction."""
        from redb.extractors.pe_extractors.pe_overlay import PEOverlayExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # May be None if no overlay
            # If present, should have overlay properties
            if result is not None:
                assert hasattr(result, 'overlay_size')

    def test_has_overlay_check(self, pe_binary_path, mock_logger):
        """Test overlay detection."""
        from redb.extractors.pe_extractors.pe_overlay import PEOverlayExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            has_overlay = extractor._has_overlay()
            assert isinstance(has_overlay, bool)


# ============================================================================
# PESignatureExtractor Tests
# ============================================================================

class TestPESignatureExtractor:
    """Tests for PESignatureExtractor class."""

    def test_extract_signature(self, pe_binary_path, mock_logger):
        """Test signature extraction."""
        from redb.extractors.pe_extractors.pe_signature import PESignatureExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # May be None if not signed
            # Result type depends on implementation

    def test_is_signed_check(self, pe_binary_path, mock_logger):
        """Test signature detection."""
        from redb.extractors.pe_extractors.pe_signature import PESignatureExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            is_signed = extractor._is_signed()
            assert isinstance(is_signed, bool)


# ============================================================================
# PEDotNetExtractor Tests
# ============================================================================

class TestPEDotNetExtractor:
    """Tests for PEDotNetExtractor class."""

    def test_extract_dotnet(self, pe_binary_path, mock_logger):
        """Test .NET metadata extraction."""
        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 None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # The test file is a .NET binary
            if extractor._check_dotnet():
                assert result is not None

    def test_check_dotnet(self, pe_binary_path, mock_logger):
        """Test .NET detection."""
        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 None:
                pytest.skip("PE parsing failed")

            is_dotnet = extractor._check_dotnet()
            assert isinstance(is_dotnet, bool)
            # Test file should be .NET
            assert is_dotnet is True


# ============================================================================
# PEInconsistencyTestsExtractor Tests
# ============================================================================

class TestPEInconsistencyTestsExtractor:
    """Tests for PEInconsistencyTestsExtractor class."""

    def test_extract_inconsistency_tests(self, pe_binary_path, mock_logger):
        """Test inconsistency tests extraction."""
        from redb.extractors.pe_extractors.pe_inconsistency_tests import PEInconstistencyTestsExtractor as PEInconsistencyTestsExtractor

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # extract() returns True if tests were performed, False otherwise
            # The actual test results are stored in extractor.pe_inconsistency_tests
            # and extractor.dotnet_inconsistency_tests
            assert result in (True, False)

            if result:
                # Check that test results were stored
                assert extractor.pe_inconsistency_tests is not None or extractor.dotnet_inconsistency_tests is not None


# ============================================================================
# PEExtraFindings Tests
# ============================================================================

class TestPEExtraFindings:
    """Tests for PEExtraFindings class."""

    def test_extract_extra_findings(self, pe_binary_path, mock_logger):
        """Test extra findings extraction."""
        from redb.extractors.pe_extractors.pe_extra_findings import PEExtraFindings

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

            if extractor.pe is None:
                pytest.skip("PE parsing failed")

            result = extractor.extract()

            # May return None or list of findings
            if result is not None:
                assert isinstance(result, list)


# ============================================================================
# Integration Tests
# ============================================================================

class TestPEExtractorIntegration:
    """Integration tests for PE extractors."""

    def test_all_extractors_same_pe_object(self, pe_binary_path, mock_logger, pe_object):
        """Test that extractors can share the same PE object."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            # Create extractors sharing the same PE object
            features_ext = PEFeaturesExtractor(pe_binary_path, mock_logger, pe=pe_object)
            imports_ext = PEImportExtractor(pe_binary_path, mock_logger, pe=pe_object)
            sections_ext = PESectionExtractor(pe_binary_path, mock_logger, pe=pe_object)

            # All should use the same PE object
            assert features_ext.pe is pe_object
            assert imports_ext.pe is pe_object
            assert sections_ext.pe is pe_object

            # All should extract successfully
            features_result = features_ext.extract()
            imports_result = imports_ext.extract()
            sections_result = sections_ext.extract()

            assert features_result is not None
            # imports and sections may be None if not present

    def test_hash_consistency_across_extractors(self, pe_binary_path, mock_logger):
        """Test that hashes are consistent across all extractors."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

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

            # Hashes should be the same
            assert features_ext.sha256 == imports_ext.sha256
            assert features_ext.md5 == imports_ext.md5
            assert features_ext.sha1 == imports_ext.sha1