C. Kavitha

12 papers Journal 8Unranked 4
YearRankTypeTitle / Venue / Authors
2025 J jnl
Wirel. Pers. Commun.
K. R. Shruthi, C. Kavitha
2024 J jnl
IEEE Access
Gautam Gupta, R. Sudeep, Bragadeshwaran Ashok, R. Vignesh, C. Kannan, C. Kavitha, Roobaea Alroobaea, Majed Alsafyani, Kareem M. Aboras, Ahmed Emara
2023 J jnl
Sensors
Suganiya Murugan, Pradeep Kumar Sivakumar, C. Kavitha, Anandhi Harichandran, Wen-Cheng Lai
2023 conf
ICMLDE
C. Kavitha, S. Priyanka, M. Praveen Kumar, V. Kusuma
2022 J jnl
Int. J. Comput. Appl. Technol.
H. Jagruthi, C. Kavitha, Manjunath Mulimani
2020 J jnl
IEEE Access
Jagan Raj Jayapandiyan, C. Kavitha, K. Sakthivel
2019 J jnl
Clust. Comput.
C. Kavitha, S. Sakthivel
2019 J jnl
Int. J. Reason. based Intell. Syst.
C. Kavitha, R. Srividhya Lakshmi, J. Anjana Devi, U. Pradheeba
2015 conf
SSCC
P. Devaraj, C. Kavitha
2014 conf
WOCN
Shashikala Tapaswi, C. Kavitha
2014 J jnl
Int. J. Comput. Sci. Eng.
C. Kavitha, G. Sudha Sadasivam, M. A. Priya
2009 conf
ICWN
C. Kavitha, K. V. Viswanatha
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