Weijun Pan

19 papers B 1Journal 17Unranked 1
YearRankTypeTitle / Venue / Authors
2026 J jnl
Appl. Soft Comput.
Yingxue Yu, Qingwei Zhong, Yongxiang Zhang, Weijun Pan, Yi Ai
2025 J jnl
Neurocomputing
Ruijie Peng, Chuanlin Liao, Weijun Pan, Xiaolin Gou, Jianwei Zhang, Yi Lin
2025 J jnl
Adv. Eng. Informatics
Zirui Yin, Weijun Pan, Shaoquan Ni, Yuanjing Huang, Xin Wang, Xia Zhao, Kun Liu
2025 J jnl
Frontiers Neurorobotics
Weijun Pan, Boyuan Han, Peiyuan Jiang
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Leilei Deng, Weijun Pan, Peng Zhao, Kuanming Chen, Xuan Wang
2024 J jnl
Frontiers Neurorobotics
Weijun Pan, Jian Zhang, Yumei Zhang, Peiyuan Jiang, Shuai Han
2024 J jnl
Sensors
Tian Luan, Shixiong Zhou, Guokang Zhang, Zechun Song, Jiahui Wu, Weijun Pan
2024 J jnl
Sensors
Zhuang Wang, Peiyuan Jiang, Zixuan Wang, Boyuan Han, Haijun Liang, Yi Ai, Weijun Pan
2024 conf
OFC
Joseph Catudal, Zhenhao Zhou, Weijun Pan, Paul Barford, Dante Fratta, Herb Wang
2023 J jnl
IEEE Access
Weijun Pan, Qinyue He, Yuanjing Huang, Liru Qin
2023 J jnl
Frontiers Neurorobotics
Weijun Pan, Peiyuan Jiang, Yukun Li, Zhuang Wang, Junxiang Huang
2023 J jnl
IEEE Access
Siyuan Duan, Weijun Pan, Yuanfei Leng, Xiaolei Zhang
2022 J jnl
J. Sensors
Weijun Pan, Yuan-Fei Leng, Tian-Yi Wu, Yaxing Xu, Xiaolei Zhang
2022 J jnl
IEEE Access
Weijun Pan, Haoran Yin, Yuanfei Leng, Xiaolei Zhang
2022 B conf
IPEC
Weijun Pan, Jingkai Wang, Yaxing Xu
2021 J jnl
J. Sensors
Yi Ai, Yuanji Wang, Weijun Pan, Dingjie Wu
2021 J jnl
Complex.
Linfeng Zhong, Yu Bai, Yan Tian, Chen Luo, Jin Huang, Weijun Pan
2020 J jnl
IEEE Access
Xiaolei Zhang, Weijun Pan, Zhengyuan Wu, Jiayang Chen, Yifei Mao, Renhua Wu
2019 J jnl
J. Intell. Fuzzy Syst.
Yi Ai, Weijun Pan, Changqi Yang, Dingjie Wu, Jiahao Tang
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