Calvin K. L. Or

18 papers C 2Misc 4Journal 12
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Ju Wu, Calvin K. L. Or
2020 J jnl
Hum. Factors
Hailiang Wang, Calvin K. L. Or
2019 J jnl
Health Informatics J.
Mian Yan, Calvin K. L. Or
2018 J jnl
J. Medical Syst.
Calvin K. L. Or, Ellen Tong, Joseph Tan, Summer Chan
2018 J jnl
J. Medical Syst.
Denise Shuk Ting Cheung, Calvin K. L. Or, Mike K. P. So, Agnes F. Y. Tiwari
2016 J jnl
J. Medical Syst.
Calvin K. L. Or, Da Tao
2015 J jnl
Displays
Hailiang Wang, Calvin K. L. Or
2015 J jnl
Int. J. Heal. Inf. Syst. Informatics
Calvin K. L. Or
2014 J jnl
Int. J. Medical Informatics
Calvin K. L. Or, Da Tao
2014 J jnl
J. Medical Syst.
Calvin K. L. Or, Michael Dohan, Joseph Tan
2013 C conf
WorldCIST
Ho-chuen Ng, Da Tao, Calvin K. L. Or
2013 C conf
WorldCIST
Heller H. L. Wang, Calvin K. L. Or
2011 J jnl
J. Am. Medical Informatics Assoc.
Calvin K. L. Or, Ben-Tzion Karsh, Dolores J. Severtson, Laura J. Burke, Roger L. Brown, Patricia Flatley Brennan
2009 J jnl
J. Am. Medical Informatics Assoc.
Calvin K. L. Or, Ben-Tzion Karsh
2008 Misc conf
AMIA
Kathy A. Johnson, Rupa Valdez, Gail R. Casper, Susan Kossman, Pascale Carayon, Calvin K. L. Or, Laura J. Burke, Patricia Flatley Brennan
2006 Misc conf
AMIA
Susan Kossman, Gail R. Casper, Dolores J. Severtson, Anne-Sophie Grenier, Calvin K. L. Or, Pascale Carayon, Patricia Flatley Brennan
2006 Misc conf
AMIA
Calvin K. L. Or, Dolores J. Severtson, Ben-Tzion Karsh, Patricia Flatley Brennan, Gail R. Casper, Margaret Sebern, Laura J. Burke
2005 Misc conf
AMIA
Gail R. Casper, Ben-Tzion Karsh, Calvin K. L. Or, Pascale Carayon, Anne-Sophie Grenier, Margaret Sebern, Laura J. Burke, Patricia F. Brennan
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