Xiaochao Yang

12 papers B 1C 1Misc 1Journal 7Unranked 2
YearRankTypeTitle / Venue / Authors
2025 J jnl
Pattern Recognit.
Zihang Chen, Weijie Zhao, Jingyang Liu, Puguang Xie, Siyu Hou, Yongjian Nian, Xiaochao Yang, Ruiyan Ma, Haiyan Ding, Jingjing Xiao
2024 J jnl
Remote. Sens.
Jiang Zhu, Cai Wen, Chongdi Duan, Weiwei Wang, Xiaochao Yang
2023 J jnl
Remote. Sens.
Jinming Chen, Yu Li, Xiaochao Yang, Qi Li, Fei Liu, Weiwei Wang, Caipin Li, Chongdi Duan
2023 J jnl
J. Imaging Inform. Medicine
Zihang Chen, Jiafei Chen, Jun Zhao, Bowei Liu, Shuanglong Jiang, Dongyue Si, Haiyan Ding, Yongjian Nian, Xiaochao Yang, Jingjing Xiao
2014 J jnl
Mob. Networks Appl.
Nicholas D. Lane, Mu Lin, Mashfiqui Mohammod, Xiaochao Yang, Hong Lu, Giuseppe Cardone, Shahid Ali, Afsaneh Doryab, Ethan Berke, Andrew T. Campbell, Tanzeem Choudhury
2012 conf
Wireless Health
Mu Lin, Nicholas D. Lane, Mashfiqui Mohammod, Xiaochao Yang, Hong Lu, Giuseppe Cardone, Shahid Ali, Afsaneh Doryab, Ethan Berke, Andrew T. Campbell, Tanzeem Choudhury
2012 conf
MobiCASE
Xiaochao Yang, Chuang-Wen You, Hong Lu, Mu Lin, Nicholas D. Lane, Andrew T. Campbell
2011 J jnl
Sci. China Inf. Sci.
Shu-Wen Xu, Penglang Shui, Xiaochao Yang
2009 B conf
ICIP
Yin Li, Yue Zhou, Lei Xu, Xiaochao Yang, Jie Yang
2009 Misc conf
ICASSP
Enliang Zheng, Qiang Chen, Xiaochao Yang, Yuncai Liu
2008 C conf
CIT
Xiaochao Yang, Tianhao Zhang, Yue Zhou, Jie Yang
2008 J jnl
Signal Process.
Xiaochao Yang, Yue Zhou, Tianhao Zhang, Guang Shu, Jie Yang
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