R. Matthew Sailors

15 papers Misc 14Unranked 1
YearRankTypeTitle / Venue / Authors
2004 conf
MedInfo
Robert A. Jenders, R. Matthew Sailors
2003 Misc conf
AMIA
Andy Nguyen, R. Matthew Sailors
2003 Misc conf
AMIA
Ashwin Jadhav, R. Matthew Sailors
2002 Misc conf
AMIA
R. Matthew Sailors, Robert A. Jenders
2002 Misc conf
AMIA
R. Douglas Tindall, S. Ward Casscells, R. Matthew Sailors, Elmer V. Bernstam, Carolyn S. Galloway, James H. Duke
2001 Misc conf
AMIA
R. Matthew Sailors
2001 Misc conf
AMIA
R. Matthew Sailors
2000 Misc conf
AMIA
R. Matthew Sailors, James H. Duke, James A. Wall, Larry D. Flournoy, José Salinas, R. Douglas Tindall, Alan S. Tonnesen, Gregory Mogel
2000 Misc conf
AMIA
R. Matthew Sailors, Bruce A. McKinley
1999 Misc conf
AMIA
R. Matthew Sailors, Thomas D. East
1999 Misc conf
AMIA
R. Matthew Sailors, Richard L. Bradshaw, Thomas D. East
1999 Misc conf
AMIA
Thomas D. East, Laura K. Heermann, Richard L. Bradshaw, Alejandra Lugo, R. Matthew Sailors, Lewis E. Ershler, Carrie J. Wallace, Alan H. Morris, Bruce A. McKinley, Alicia Marquez, Alan S. Tonnesen, Lee Parmley, William C. Shoemaker, Peter Meade, P. Thaut, T. Hill, Michael P. Young, J. Baughman, M. Olterman, Valerie J. Gooder, B. Quinn, W. Summer, Vincent G. Valentine, J. Carlson, K. Steinberg
1998 Misc conf
AMIA
R. Matthew Sailors, Richard L. Bradshaw, Thomas D. East
1997 Misc conf
AMIA
R. Matthew Sailors
1997 Misc conf
AMIA
Laura K. Heermann, R. Matthew Sailors, Thomas D. East, C. Jane Wallace, Richard L. Bradshaw, Alejandra Lugo, Ross Greenlee
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