Kaixuan Xie

11 papers B 1Journal 6Unranked 4
YearRankTypeTitle / Venue / Authors
2025 J jnl
Expert Syst. Appl.
Qiang Zhang, Jun Liu, Kaixuan Xie, Qiong Liu
2024 J jnl
IEEE Commun. Lett.
Guojun Chen, Kaixuan Xie, Yuheng Tu, Tiecheng Song, Yinfei Xu, Jing Hu, Lun Xin
2024 J jnl
Digit. Commun. Networks
Guojun Chen, Kaixuan Xie, Wenqiang Luo, Yinfei Xu, Lun Xin, Tiecheng Song, Jing Hu
2021 J jnl
IEEE Access
Manjie Zhou, Hai Zhu, Hengzhou Xu, Bo Zhang, Kaixuan Xie
2016 J jnl
Signal Process.
Shiming Ge, Kaixuan Xie, Shuying Li, Rui Yang
2016 J jnl
Neurocomputing
Shiming Ge, Rui Yang, Yuqing He, Kaixuan Xie, Hongsong Zhu, Shuixian Chen
2016 conf
PCM (1)
Kaixuan Xie, Shiming Ge, Qiting Ye, Zhao Luo
2015 conf
ICIMCS
Boyang Chen, Shiming Ge, Kaixuan Xie
2015 conf
CCCV (1)
Kaixuan Xie, Shiming Ge, Rui Yang, Xiang Lu, Limin Sun
2014 conf
CCPR (1)
Rui Yang, Shiming Ge, Kaixuan Xie, Shuixian Chen
2014 B conf
ICPR
Shiming Ge, Kaixuan Xie, Rui Yang, Zhiqiang Shi
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