Weifeng Sun

20 papers C 1Journal 19
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Xiaotong Li, Weifeng Sun, Yonggang Ji, Weimin Huang
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Yonggang Ji, Jiawei Wang, Zhihang Zhang, Menghua Jiang, Wenshan Yang, Yiming Wang, Weifeng Sun, Weimin Huang
2024 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Yonggang Ji, Xinling Wang, Farui Li, Jihong Ren, Taoli Li, Yiming Wang, Weifeng Sun
2024 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Weifeng Sun, Chen Jia, Chenqing Fan, Wen Li, Yongshou Dai, Weimin Huang
2024 J jnl
IEEE Geosci. Remote. Sens. Lett.
Weifeng Sun, Linlin Zhao, Xiaotong Li, Yonggang Ji, Weimin Huang
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Yonggang Ji, Yiming Wang, Weifeng Sun, Hao Zhang, Farui Li, Weimin Huang
2024 J jnl
IEEE Geosci. Remote. Sens. Lett.
Yonggang Ji, Taoli Li, Xinling Wang, Farui Li, Weifeng Sun, Yiming Wang
2023 J jnl
IEEE Geosci. Remote. Sens. Lett.
Yonggang Ji, Xiaoyu Cheng, Yiming Wang, Weifeng Sun, Xi Zhang, Meicheng Jiang, Jihong Ren, Farui Li
2023 J jnl
Remote. Sens.
Weifeng Sun, Xiaotong Li, Yonggang Ji, Yongshou Dai, Weimin Huang
2023 J jnl
IEEE Trans. Geosci. Remote. Sens.
Weifeng Sun, Xiaotong Li, Zhenzhen Pang, Yonggang Ji, Yongshou Dai, Weimin Huang
2022 J jnl
Remote. Sens.
Weifeng Sun, Zhenzhen Pang, Weimin Huang, Peng Ma, Yonggang Ji, Yongshou Dai, Xiaotong Li
2022 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Yonggang Ji, Yiming Wang, Weifeng Sun, Ruifu Wang, Ming Li, Xiaoyu Cheng, Xu Liang
2021 J jnl
Signal Image Video Process.
Fangxu Li, Jie Zhang, Weifeng Sun, Jiucai Jin, Ligang Li, Yongshou Dai
2021 J jnl
Remote. Sens.
Weifeng Sun, Qing Wang, Weimin Huang, Chenqing Fan, Yongshou Dai
2021 J jnl
Remote. Sens.
Yonggang Ji, Yiming Wang, Weimin Huang, Weifeng Sun, Jie Zhang, Ming Li, Xiaoyu Cheng
2021 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Weifeng Sun, Zhenzhen Pang, Weimin Huang, Yonggang Ji, Yongshou Dai
2020 J jnl
IEEE Trans. Geosci. Remote. Sens.
Weifeng Sun, Weimin Huang, Yonggang Ji, Yongshou Dai, Peng Ren, Peng Zhou, Xianfeng Hao
2020 C conf
IGARSS
Yonggang Ji, Jie Zhang, Yiming Wang, Junmin Meng, Changjun Yu, Ming Li, Weifeng Sun
2020 J jnl
Remote. Sens.
Weifeng Sun, Mengjie Ji, Weimin Huang, Yonggang Ji, Yongshou Dai
2019 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Peng Zhou, Xi Zhang, Yongshou Dai, Weifeng Sun, Yong Wan
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