Rachael Zehrung

15 papers A* 3Misc 1Journal 10Unranked 1
YearRankTypeTitle / Venue / Authors
2026 A* conf
CHI
Rachael Zehrung, Yunan Chen
2026 J jnl
CoRR
Rachael Zehrung, Yunan Chen
2025 J jnl
Proc. ACM Hum. Comput. Interact.
Rachael Zehrung, Lora Cawelti, Erica Van Steenis, Verenisse Ponce Soria, Guadalupe Aileen Mendoza, Richard Arum, Yunan Chen, June Ahn
2025 conf
CSCW Companion
Rachael Zehrung
2024 J jnl
Proc. ACM Hum. Comput. Interact.
Eunkyung Jo, Rachael Zehrung, Katherine E. Genuario, Alexandra Papoutsaki, Daniel A. Epstein
2024 J jnl
CoRR
Rachael Zehrung, Di Hu, Yawen Guo, Kai Zheng, Yunan Chen
2024 J jnl
CoRR
Rachael Zehrung, Madhu C. Reddy, Yunan Chen
2024 J jnl
Proc. ACM Hum. Comput. Interact.
Rachael Zehrung, Madhu C. Reddy, Yunan Chen
2023 J jnl
CoRR
Yawen Guo, Rachael Zehrung, Katie Genuario, Xuan Lu, Qiaozhu Mei, Yunan Chen, Kai Zheng
2023 J jnl
CoRR
Rachael Zehrung, Yunan Chen
2022 Misc conf
AMIA
Rachael Zehrung, Nick Su, Yunan Chen
2021 J jnl
CoRR
Rachael Zehrung, Lily Huang, Bongshin Lee, Eun Kyoung Choe
2021 A* conf
CHI
Shaan Chopra, Rachael Zehrung, Tamil Arasu Shanmugam, Eun Kyoung Choe
2021 A* conf
CHI
Rachael Zehrung, Astha Singhal, Michael Correll, Leilani Battle
2021 J jnl
CoRR
Rachael Zehrung, Astha Singhal, Michael Correll, Leilani Battle
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