Karen Ward

18 papers A* 1A 1Misc 1Journal 3Unranked 12
YearRankTypeTitle / Venue / Authors
2006 conf
SIGDOC
David G. Novick, Karen Ward
2006 conf
SIGDOC
David G. Novick, Karen Ward
2005 J jnl
J. Comput. Sci. Coll.
Karen Ward, Judith Bayard Cushing, Peter Drake, James D. Fix
2005 J jnl
J. Comput. Sci. Coll.
Karen Ward
2005 A conf
INTERSPEECH
Nigel G. Ward, Anais G. Rivera, Karen Ward, David G. Novick
2004 conf
SIGDIAL Workshop
Karen Ward, Tasha Hollingsed, Javier A. Aldaz Salmon
2004 J jnl
J. Comput. Sci. Coll.
Karen Ward
2003 conf
SIGDOC
David G. Novick, Karen Ward
2003 conf
SIGDOC
Karen Ward, David G. Novick
2003 conf
ENC
Karen Ward, Tasha Hollingsed, Javier A. Aldaz Salmon
2000 conf
ANLP
Karen Ward, Peter A. Heeman
1996 conf
ICSLP
David G. Novick, Brian Hansen, Karen Ward
1995 conf
CHI 95 Conference Companion
Karen Ward
1995 conf
CHI 95 Conference Companion
Karen Ward, David G. Novick
1995 Misc conf
ICASSP
Karen Ward, David G. Novick
1995 conf
EUROSPEECH
David G. Novick, Karen Ward, Benjamin Corliss
1993 A* conf
AAAI
David G. Novick, Karen Ward
1989 conf
SIGMOD Conference
Goetz Graefe, Karen Ward
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