Oluwasola Mary Adedayo

12 papers C 1Journal 4Unranked 7
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Access
Anusha Waseem, Muhammad Abdul Moiz Zia, Oluwasola Mary Adedayo
2026 conf
ISDFS
Dharanidharan Ranganathan, Devkumar Barot, Qian Liu, Oluwasola Mary Adedayo
2026 conf
ISDFS
Muhammad Abdul Moiz Zia, Oluwasola Mary Adedayo
2025 C conf
PST
Oluwasola Mary Adedayo
2025 conf
ISDFS
Hardi Matholia, Oluwasola Mary Adedayo
2025 J jnl
Forensic Sci. Int. Digit. Investig.
Muhammad Abdul Moiz Zia, Oluwasola Mary Adedayo
2024 conf
ISDFS
Arun K. Mani, Oluwasola Mary Adedayo
2024 conf
ISDFS
Sahilkumar K. Ahir, Oluwasola Mary Adedayo
2023 J jnl
IEEE Access
Taiwo Blessing Ogunseyi, Oluwasola Mary Adedayo
2015 J jnl
Digit. Investig.
Oluwasola Mary Adedayo, Martin S. Olivier
2014 conf
IFIP Int. Conf. Digital Forensics
Oluwasola Mary Adedayo, Martin S. Olivier
2012 conf
ICDF2C
Oluwasola Mary Adedayo, Martin S. Olivier
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