Nassima Aleb

15 papers C 1Journal 7Unranked 7
YearRankTypeTitle / Venue / Authors
2025 J jnl
Int. J. Data Sci. Anal.
Nassima Aleb
2025 J jnl
Netw. Model. Anal. Health Informatics Bioinform.
Nassima Aleb
2025 J jnl
Neural Comput. Appl.
Nassima Aleb, Nedal Y. Abu-Thabit
2022 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Nassima Aleb
2021 J jnl
Neural Process. Lett.
Nassima Aleb
2016 J jnl
Appl. Soft Comput.
Khaled El-Fakih, Abdul Rahim Haddad, Nassima Aleb, Nina Yevtushenko
2015 conf
DEXA Workshops
Nassima Aleb, Narimane Labidi
2013 conf
ICCSA (2)
Nassima Aleb, Samir Kechid
2013 conf
GECCO (Companion)
Nassima Aleb, Samir Kechid
2013 conf
ICCSA (2)
Nassima Aleb, Samir Kechid
2013 J jnl
Int. J. Comput. Aided Eng. Technol.
Nassima Aleb, Zahia Tamen, Nadjet Kamel
2012 conf
GECCO (Companion)
Nassima Aleb, Samir Kechid
2012 conf
ICCIT
Nassima Aleb, Samir Kechid
2011 conf
EMS
Nassima Aleb, Zahia Tamen
2011 C conf
MEDI
Nassima Aleb, Zahia Tamen, Nadjet Kamel
tests/unit/test_decompile_function_type.py
← Index tests/unit/test_decompile_function_type.py python
"""Unit tests for bninja/function_type.py."""
import sys
import pytest
from unittest.mock import MagicMock

# Install binaryninja stubs before importing
from tests.unit.conftest_binja_stubs import install_binja_stubs, SymbolType
install_binja_stubs()

from redb.extractors.decompiler.bninja.function_type import (
    FunctionType,
    FunctionTypeAnalysis,
)


# ============================================================================
# 4a. FunctionType / FunctionTypeAnalysis
# ============================================================================


class TestFunctionTypeEnum:
    def test_function_type_enum_values(self):
        assert FunctionType.USER.value == "USER"
        assert FunctionType.LIBRARY.value == "LIBRARY"
        assert FunctionType.EXTERNAL.value == "EXTERNAL"
        assert FunctionType.THUNK.value == "THUNK"
        assert FunctionType.UNKNOWN.value == "UNKNOWN"


class TestFunctionTypeAnalysis:
    def _make_function(self, symbol_type=None, is_thunk=False, raise_on_symbol=False):
        func = MagicMock()
        func.is_thunk = is_thunk
        if raise_on_symbol:
            type(func).symbol = property(lambda self: (_ for _ in ()).throw(Exception("no symbol")))
        else:
            func.symbol.type = symbol_type if symbol_type is not None else SymbolType.FunctionSymbol
        return func

    def test_user_function_type(self):
        func = self._make_function(symbol_type=SymbolType.FunctionSymbol)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.USER

    def test_external_function_type(self):
        func = self._make_function(symbol_type=SymbolType.ImportedFunctionSymbol)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.EXTERNAL

    def test_library_function_type(self):
        func = self._make_function(symbol_type=SymbolType.LibraryFunctionSymbol)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.LIBRARY

    def test_thunk_function_type(self):
        # Thunk overrides the symbol type
        func = self._make_function(
            symbol_type=SymbolType.FunctionSymbol, is_thunk=True
        )
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.THUNK

    def test_exception_returns_unknown(self):
        func = self._make_function(raise_on_symbol=True)
        analysis = FunctionTypeAnalysis(func)
        assert analysis.get_function_type() == FunctionType.UNKNOWN