Osmar Norberto de Souza

33 papers B 1C 1Misc 3Journal 14Unranked 13
YearRankTypeTitle / Venue / Authors
2026 J jnl
Int. J. Hum. Comput. Interact.
Vanessa Stangherlin Machado Paixão-Cortes, Juliana Damasio Oliveira, Osmar Norberto de Souza
2019 conf
HCI (4)
Walter Ritzel Paixão-Cortes, Vanessa Stangherlin Machado Paixão-Cortes, Cristiane Ellwanger, Osmar Norberto de Souza
2018 conf
HCI (8)
Vanessa Stangherlin Machado Paixão-Cortes, Walter Ritzel Paixão-Cortes, Márcia de Borba Campos, Osmar Norberto de Souza
2018 J jnl
BMC Bioinform.
Renata De Paris, Christian Vahl Quevedo, Duncan D. Ruiz, Furia Gargano, Osmar Norberto de Souza
2018 J jnl
Inf.
Vanessa Stangherlin Machado Paixão-Cortes, Michele dos Santos da Silva Tanus, Walter Ritzel Paixão-Cortes, Osmar Norberto de Souza, Márcia de Borba Campos, Milene Selbach Silveira
2017 conf
HCI (26)
Vanessa Stangherlin Machado, Walter Ritzel Paixão-Cortes, Osmar Norberto de Souza, Márcia de Borba Campos
2016 conf
ISBRA
Thiago Lipinski-Paes, Michele dos Santos da Silva Tanus, José Fernando Ruggiero Bachega, Osmar Norberto de Souza
2015 C conf
CloudCom
Renata De Paris, Duncan Dubugras A. Ruiz, Osmar Norberto de Souza
2015 J jnl
Comput. Intell. Neurosci.
Renata De Paris, Christian Vahl Quevedo, Duncan Dubugras A. Ruiz, Osmar Norberto de Souza, Rodrigo C. Barros
2015 Misc conf
SAC
Patricia Hübler, Duncan Dubugras A. Ruiz, João Eduardo Ferreira, Osmar Norberto de Souza
2014 J jnl
Expert Syst. Appl.
Christian Vahl Quevedo, Renata De Paris, Duncan D. Ruiz, Osmar Norberto de Souza
2014 conf
CS2Bio
Thiago Lipinski-Paes, Osmar Norberto de Souza
2013 J jnl
Expert Syst. Appl.
Karina C. M. Dall'Agno, Osmar Norberto de Souza
2013 J jnl
Int. J. Bioinform. Res. Appl.
Márcio Dorn, Osmar Norberto de Souza
2013 J jnl
J. Chem. Inf. Model.
Ivani Pauli, Ricardo N. dos Santos, Diana C. Rostirolla, Leonardo K. Martinelli, Rodrigo G. Ducati, Luís Fernando S. M. Timmers, Luiz Augusto Basso, Diógenes Santiago Santos, Rafael V. C. Guido, Adriano Defini Andricopulo, Osmar Norberto de Souza
2012 conf
BSB
Ana T. Winck, Christian Vahl Quevedo, Karina S. Machado, Osmar Norberto de Souza, Duncan D. Ruiz
2012 J jnl
BMC Bioinform.
Rodrigo C. Barros, Ana T. Winck, Karina S. Machado, Márcio P. Basgalupp, André Carlos Ponce de Leon Ferreira de Carvalho, Duncan D. Ruiz, Osmar Norberto de Souza
2011 conf
BSB
Renata De Paris, Fábio A. Frantz, Osmar Norberto de Souza, Duncan D. Ruiz
2011 ed.
BSB
Osmar Norberto de Souza, Guilherme P. Telles, Mathew J. Palakal
2011 J jnl
WIREs Data Mining Knowl. Discov.
Karina S. Machado, Ana T. Winck, Duncan D. Ruiz, Osmar Norberto de Souza
2010 J jnl
Expert Syst. Appl.
Márcio Dorn, Osmar Norberto de Souza
2010 conf
BSB
Karina S. Machado, Ana T. Winck, Duncan D. Ruiz, Osmar Norberto de Souza
2010 J jnl
Int. J. Data Min. Bioinform.
Márcio Dorn, Osmar Norberto de Souza
2009 conf
BSB
Ana T. Winck, Karina S. Machado, Osmar Norberto de Souza, Duncan D. Ruiz
2008 conf
BSB
Márcio Dorn, Ardala Breda, Osmar Norberto de Souza
2008 Misc conf
SAC
Márcio Dorn, Osmar Norberto de Souza
2008 conf
BSB
Karina S. Machado, Evelyn K. Schroeder, Duncan D. Ruiz, Ana Wink, Osmar Norberto de Souza
2007 J jnl
Comput. Biol. Medicine
Cláudia Lemelle Fernandes, Ardala Breda, Diógenes Santiago Santos, Luiz Augusto Basso, Osmar Norberto de Souza
2007 conf
BSB
Karina S. Machado, Evelyn K. Schroeder, Duncan D. Ruiz, Osmar Norberto de Souza
2005 Misc conf
SAC
Andrei Oliveira da Silva, Osmar Norberto de Souza
2005 B conf
CCGRID
Marco Aurélio Stelmar Netto, Ardala Breda, Osmar Norberto de Souza
2005 conf
BSB
Cláudia Lemelle Fernandes, Diógenes Santiago Santos, Luiz Augusto Basso, Osmar Norberto de Souza
1994 J jnl
J. Comput. Aided Mol. Des.
Osmar Norberto de Souza, Julia M. Goodfellow
tests/unit/test_apk_jadx_wrapper.py
← Index tests/unit/test_apk_jadx_wrapper.py python
"""
Unit tests for JADX wrapper subprocess management and output parsing.

All subprocess calls are mocked — no JADX/Java installation required.
"""
import os
import tempfile
import textwrap

import pytest
from unittest.mock import MagicMock, patch, call

pytestmark = [pytest.mark.unit, pytest.mark.apk, pytest.mark.decompile]


class TestJADXDecompiler:
    """Tests for JADXDecompiler subprocess wrapper."""

    @patch.dict(os.environ, {}, clear=False)
    def test_init_defaults(self):
        os.environ.pop("JADX_PATH", None)
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        j = JADXDecompiler()
        assert j.jadx_path == "jadx"
        assert j.timeout == 300

    def test_init_custom_path(self):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        j = JADXDecompiler(jadx_path="/usr/local/bin/jadx", timeout=300)
        assert j.jadx_path == "/usr/local/bin/jadx"
        assert j.timeout == 300

    def test_init_from_env(self):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        with patch.dict(os.environ, {"JADX_PATH": "/opt/jadx/bin/jadx", "JADX_TIMEOUT": "120"}):
            j = JADXDecompiler()
            assert j.jadx_path == "/opt/jadx/bin/jadx"
            assert j.timeout == 120

    @patch("subprocess.Popen")
    def test_decompile_success(self, mock_popen):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        mock_proc = MagicMock()
        mock_proc.communicate.return_value = ("output", "")
        mock_proc.returncode = 0
        mock_popen.return_value = mock_proc

        j = JADXDecompiler()
        result = j.decompile("/test.apk", "/output")
        assert result is True

    @patch("subprocess.Popen")
    def test_decompile_nonzero_exit_no_sources(self, mock_popen):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        mock_proc = MagicMock()
        mock_proc.communicate.return_value = ("", "error msg")
        mock_proc.returncode = 1
        mock_popen.return_value = mock_proc

        j = JADXDecompiler(log=MagicMock())
        result = j.decompile("/test.apk", "/nonexistent_output")
        assert result is False

    @patch("subprocess.Popen")
    def test_decompile_timeout(self, mock_popen):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        import subprocess
        mock_proc = MagicMock()
        mock_proc.communicate.side_effect = subprocess.TimeoutExpired(cmd="jadx", timeout=10)
        mock_proc.pid = 12345
        mock_popen.return_value = mock_proc

        with patch("os.getpgid", return_value=12345), \
             patch("os.killpg"):
            j = JADXDecompiler(timeout=10, log=MagicMock())
            result = j.decompile("/test.apk", "/output")
            assert result is False

    @patch("subprocess.Popen", side_effect=FileNotFoundError)
    def test_decompile_not_found(self, mock_popen):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        j = JADXDecompiler(log=MagicMock())
        result = j.decompile("/test.apk", "/output")
        assert result is False

    @patch("subprocess.Popen")
    def test_decompile_command_args(self, mock_popen):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        mock_proc = MagicMock()
        mock_proc.communicate.return_value = ("", "")
        mock_proc.returncode = 0
        mock_popen.return_value = mock_proc

        j = JADXDecompiler(jadx_path="/opt/jadx")
        j.decompile("/test.apk", "/output")

        cmd = mock_popen.call_args[0][0]
        assert cmd[0] == "/opt/jadx"
        assert "--no-res" in cmd
        assert "--no-imports" in cmd
        assert "--threads-count" in cmd
        assert "/test.apk" in cmd

    def test_parse_java_methods_empty_dir(self):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        j = JADXDecompiler()
        result = j.parse_java_methods("/nonexistent")
        assert result == {}

    def test_parse_java_methods_with_files(self):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        with tempfile.TemporaryDirectory() as tmpdir:
            sources_dir = os.path.join(tmpdir, "sources", "com", "example")
            os.makedirs(sources_dir)

            java_content = textwrap.dedent("""\
                package com.example;

                public class MyClass {
                    public void doStuff(int x) {
                        System.out.println(x);
                    }

                    private String getName() {
                        return "test";
                    }
                }
            """)
            with open(os.path.join(sources_dir, "MyClass.java"), "w") as f:
                f.write(java_content)

            j = JADXDecompiler()
            methods = j.parse_java_methods(tmpdir)
            assert len(methods) >= 1

    def test_extract_methods_from_java(self):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        source = textwrap.dedent("""\
            public void foo(int x) {
                if (x > 0) {
                    System.out.println(x);
                }
            }
        """)
        j = JADXDecompiler()
        methods = j._extract_methods_from_java(source, "com.example.Test")
        assert len(methods) == 1
        key = list(methods.keys())[0]
        assert "foo" in key

    def test_is_method_declaration_valid(self):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        j = JADXDecompiler()
        result = j._is_method_declaration("    public void foo(int x) {")
        assert result is not None
        assert result[0] == "foo"

    def test_is_method_declaration_control_flow(self):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        j = JADXDecompiler()
        # 'if', 'for', etc. should not be recognized as methods
        assert j._is_method_declaration("        if (x > 0) {") is None
        assert j._is_method_declaration("        for (int i = 0; i < 10; i++) {") is None

    def test_is_method_declaration_static(self):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        j = JADXDecompiler()
        result = j._is_method_declaration("    public static void main(String[] args) {")
        assert result is not None
        assert result[0] == "main"