Ramy Hammady

14 papers C 1Journal 11Unranked 2
YearRankTypeTitle / Venue / Authors
2026 J jnl
Multim. Syst.
Priyanka Kumari, Ramy Hammady
2025 J jnl
Digit. Appl. Archaeol. Cult. Heritage
Eslam Nofal, Sondos T. Afandy, Ramy Hammady, Mohamed W. Fareed
2025 J jnl
IEEE Access
Eman Al Khalifah, Ramy Hammady, Mahmoud Abdelrahman, Ons Al-Shamaileh, Mostafa Marghany, Hatana El-Jarn, Alyaa Darwish, Yusuf Kurt
2024 J jnl
Virtual Real.
Meshal Albeedan, Hoshang Kolivand, Ramy Hammady
2024 J jnl
IEEE Access
Rahma M. Tolba, Taha ElArif, Zaki Taha, Ramy Hammady
2024 J jnl
IEEE Trans. Learn. Technol.
Meshal Albeedan, Hoshang Kolivand, Ramy Hammady, Tanzila Saba
2023 C conf
DeSE
Meshal Albeedan, Hoshang Kolivand, Ramy Hammady
2023 J jnl
IEEE Access
Meshal Albeedan, Hoshang Kolivand, Ramy Hammady
2022 J jnl
Inf.
Ramy Hammady, Sylvester Arnab
2021 J jnl
Virtual Real.
Ramy Hammady, Minhua Ma, Ziad Al-Kalha, Carl Strathearn
2020 J jnl
ACM Journal on Computing and Cultural Heritage
Ramy Hammady, Minhua Ma, Carl Strathearn
2020 J jnl
Multim. Tools Appl.
Ramy Hammady, Minhua Ma, Carl Strathern, Mostafa Mohamad
2018 conf
AVR (2)
Ramy Hammady, Minhua Ma, Anna Powell
2016 conf
JCSG
Ramy Hammady, Minhua Ma, Nicholas Temple
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