Rainara Maia Carvalho

12 papers A 2B 1Journal 2Unranked 6
YearRankTypeTitle / Venue / Authors
2022 conf
WER
Pedro Rodrigues de Carvalho Junior, Enyo José Tavares Gonçalves, Rainara Maia Carvalho, Marcos Antonio de Oliveira
2022 conf
SBQS
Rainara Maia Carvalho, Anna Beatriz dos Santos Marques, Rossana M. C. Andrade, Amanda Oliveira de Sousa, Raquel Dias, Guilherme Campagnoli
2022 conf
CHI Extended Abstracts
Lucas do Nascimento Diniz, José Cezar de Souza Filho, Rainara Maia Carvalho
2022 J jnl
Requir. Eng.
Rainara Maia Carvalho, Rossana Maria de Castro Andrade, Káthia Marçal de Oliveira
2021 conf
ICEIS (2)
Joseane de O. V. Paiva, Rossana M. C. Andrade, Rainara Maia Carvalho
2020 A conf
RE
Rainara Maia Carvalho, Rossana M. C. Andrade, Káthia M. de Oliveira
2019
Rainara Maia Carvalho
2018 J jnl
J. Syst. Softw.
Rainara Maia Carvalho, Rossana Maria de Castro Andrade, Káthia Marçal de Oliveira
2018 conf
SBES
Rainara Maia Carvalho, Rossana M. C. Andrade, Káthia Marçal de Oliveira
2018 B conf
RCIS
Rainara Maia Carvalho, Rossana M. C. Andrade, Káthia Marçal de Oliveira
2017 A conf
RE
Rainara Maia Carvalho
2016 conf
IHC
Fernanda Luiza Siewerdt, Rainara Maia Carvalho, Rossana M. C. Andrade
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