Haijiao Xu

17 papers C 2Journal 12Unranked 3
YearRankTypeTitle / Venue / Authors
2025 J jnl
Neurocomputing
Jiankai Zheng, Liang Xie, Haijiao Xu
2024 J jnl
Expert Syst. Appl.
Yuanchuang Du, Liang Xie, Sihao Liao, Shengshuang Chen, Yuchen Wu, Haijiao Xu
2024 J jnl
IEEE Access
Jiahao Chen, Liang Xie, Wenjing Lin, Yuchen Wu, Haijiao Xu
2024 J jnl
Appl. Soft Comput.
Sihao Liao, Liang Xie, Yuanchuang Du, Shengshuang Chen, Hongyang Wan, Haijiao Xu
2023 J jnl
Appl. Intell.
Haodong Han, Liang Xie, Shengshuang Chen, Haijiao Xu
2019 conf
OECC/PSC
Haijiao Xu, Binbin Yan, Jinfeng Lin, Yanhua Luo, Pengfei Lu, Kuiru Wang, Chongxiu Yu, Jinhui Yuan, Xinzhu Sang, Shiwei Cai, Gang-Ding Peng
2019 J jnl
Knowl. Based Syst.
Haijiao Xu, Changqin Huang, Dianhui Wang
2019 J jnl
Computing
Xizhe Wang, Pengze Wu, Guang Liu, Qionghao Huang, Xiaoling Hu, Haijiao Xu
2019 J jnl
Multim. Tools Appl.
Haijiao Xu, Changqin Huang, Xiaodi Huang, Muxiong Huang
2018 J jnl
Adv. Multim.
Haijiao Xu, Changqin Huang, Xiaodi Huang, Chunyan Xu, Muxiong Huang
2018 J jnl
Inf. Sci.
Changqin Huang, Haijiao Xu, Liang Xie, Jia Zhu, Chunyan Xu, Yong Tang
2016 conf
CISP-BMEI
Deng Chen, Yanduo Zhang, Wei Wei, Xiaolin Li, Xun Li, Tao Lu, Huabing Zhou, Rui Zhu, Haijiao Xu, Li Peng
2016 J jnl
Multim. Tools Appl.
Haijiao Xu, Peng Pan, Chunyan Xu, Yansheng Lu, Deng Chen
2015 J jnl
Sci. China Inf. Sci.
Haijiao Xu, Changqin Huang, Peng Pan, Gansen Zhao, Chunyan Xu, Yansheng Lu, Deng Chen, Jiyi Wu
2014 C conf
CIS
Haijiao Xu, Peng Pan, Yansheng Lu, Chunyan Xu, Deng Chen
2014 conf
SKG
Haijiao Xu, Peng Pan, Yansheng Lu, Chunyan Xu, Deng Chen
2013 C conf
ISM
Liang Xie, Peng Pan, Yansheng Lu, Shixun Wang, Tong Zhu, Haijiao Xu, Deng Chen
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