Hailong Rong

11 papers Journal 10Unranked 1
YearRankTypeTitle / Venue / Authors
2025 J jnl
Trans. Inst. Meas. Control
Hailong Rong, Hao Wang, Tianlei Jin, Xiaohui Wu, Ling Zou
2023 J jnl
Sensors
Yang Chen, Hailong Rong
2023 J jnl
Sensors
Yang Chen, Guangyuan Zhang, Rui Wang, Hailong Rong, Biao Yang
2023 J jnl
IEEE Trans. Instrum. Meas.
Hailong Rong, Cuiyun Peng, Yang Chen, Jidong Lv, Ling Zou
2023 J jnl
Comput. Electron. Agric.
Jidong Lv, Hao Xu, Liming Xu, Yuwan Gu, Hailong Rong, Ling Zou
2023 J jnl
J. King Saud Univ. Comput. Inf. Sci.
Jidong Lv, Yang Yang, Liangliang Niu, Xiaoqin Sun, Lingyun Wang, Wei Lin, Hailong Rong, Ling Zou
2022 conf
RICAI
Jidong Lv, Liangliang Niu, Yang Yang, Wei Lin, Xiaoqin Sun, Lingyun Wang, Hailong Rong, Ling Zou
2022 J jnl
Comput. Electron. Agric.
Jidong Lv, Hao Xu, Ying Han, Wenbin Lu, Liming Xu, Hailong Rong, Biao Yang, Ling Zou, Zhenghua Ma
2022 J jnl
J. Robotics
Jiazhen Duan, Ruxin Shi, Hongtao Liu, Hailong Rong
2022 J jnl
J. Field Robotics
Jidong Lv, Hao Xu, Liming Xu, Ling Zou, Hailong Rong, Biao Yang, Liangliang Niu, Zhenghua Ma
2016 J jnl
Sensors
Xiwei Huang, Yu Jiang, Xu Liu, Hang Xu, Zhi Han, Hailong Rong, Haiping Yang, Mei Yan, Hao Yu
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