Xianjun Wu

14 papers Journal 12Unranked 2
YearRankTypeTitle / Venue / Authors
2025 J jnl
Axioms
Xianjun Wu, Pingping Han, Mingqiu Wang
2024 J jnl
Vis. Comput.
Xianjun Wu, Xian Jiang, Ligang Dong
2024 J jnl
CoRR
Laifa Tao, Qixuan Huang, Xianjun Wu, Weiwei Zhang, Yunlong Wu, Bin Li, Chen Lu, Xingshuo Hai
2023 J jnl
J. Syst. Sci. Complex.
Xianjun Wu, Mingqiu Wang, Wenting Hu, Guo-Liang Tian, Tao Li
2022 J jnl
Neural Comput. Appl.
Xianjun Wu, Wendong Huang, Xiaoli Wu, Shenghang Wu, Jinbo Huang
2022 J jnl
Neural Comput. Appl.
Xianjun Wu, Wendong Huang, Xiaoli Wu, Shenghang Wu, Jinbo Huang
2022 J jnl
CoRR
Yin Zhang, Can Xu, Xianjun Wu, Yan Zhang, Ligang Dong, Weigang Wang
2022 J jnl
IEEE Access
Kang Zhao, Jingjing Liu, Qingnan Wang, Xianjun Wu, Jihui Tu
2021 J jnl
Int. J. Commun. Syst.
Jinbo Huang, Xianjun Wu, Wendong Huang, Xiaoli Wu, S. Wang
2019 J jnl
Clust. Comput.
Bing Xu, Xiaoping Zhang, Xianjun Wu
2018 J jnl
EURASIP J. Wirel. Commun. Netw.
Liqun Liu, Bing Xu, Xiaoping Zhang, Xianjun Wu
2018 J jnl
J. Intell. Fuzzy Syst.
Bing Xu, Liqun Liu, Xiaoping Zhang, Xianjun Wu
2015 conf
ICCC Workshops
Feng Zhang, Lei Shu, Chunsheng Zhu, Xianjun Wu, Kailiang Li, Junlin Zeng, Meijie Zhu, Guangjie Han, Haobo Li, Mingxiang Zhang
2015 conf
ICCE-TW
Lei Shu, Junlin Zeng, Kailiang Li, Zhiqiang Huo, Xiaoling Wu, Xianjun Wu, Huilin Sun
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