Xiaojun Tong

80 papers B 1Journal 69Unranked 10
YearRankTypeTitle / Venue / Authors
2026 J jnl
Multim. Tools Appl.
Hao Chen, Qi Han, Qiong Li, Xiaojun Tong, Xin Bao
2026 J jnl
Comput. Stat.
Wenyang Wang, Muxin Chen, Yuqiang Xu, Xiaojun Tong, Dongchu Sun, Chong He
2026 J jnl
Inf. Sci.
Xudong Liu, Xiaojun Tong, Yihui Wang
2024 J jnl
Multim. Syst.
Xiaojun Tong, Xilin Liu, Tao Pan, Miao Zhang, Zhu Wang
2024 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Yihan Yan, Xiaojun Tong, Shen Wang
2024 J jnl
IEEE Geosci. Remote. Sens. Lett.
Lin Ge, Qi Han, Xiaojun Tong, Qi Xue, Zhi Qiao
2024 J jnl
Knowl. Based Syst.
Guoying Sun, Yanan Cheng, Fangzhou Dong, Luhua Wang, Dong Zhao, Zhaoxin Zhang, Xiaojun Tong
2024 J jnl
IEEE Internet Things J.
Yihan Yan, Shen Wang, Fanghui Sun, Xiaojun Tong
2024 J jnl
Expert Syst. Appl.
Guoying Sun, Yanan Cheng, Zhaoxin Zhang, Xiaojun Tong, Tingting Chai
2023 J jnl
Vis. Comput.
Qiqi Cun, Xiaojun Tong, Zhu Wang, Miao Zhang
2023 J jnl
Vis. Comput.
Hao Chen, Qi Han, Qiong Li, Xiaojun Tong
2023 J jnl
Sensors
Lin Ge, Qi Han, Xiaojun Tong, Yizhen Wang
2023 J jnl
Comput. J.
Guoying Sun, Feng Ye, Tingting Chai, Zhaoxin Zhang, Xiaojun Tong, Shitala Prasad
2023 J jnl
Multim. Tools Appl.
Hao Chen, Qi Han, Qiong Li, Xiaojun Tong
2023 J jnl
J. Real Time Image Process.
Ning Mao, Xiaojun Tong, Miao Zhang, Zhu Wang
2023 J jnl
Multim. Tools Appl.
Sen Yang, Xiaojun Tong, Zhu Wang, Miao Zhang
2022 J jnl
Remote. Sens.
You Li, Qi Han, Xiang Peng, Qiong Li, Xiaojun Tong
2022 J jnl
J. Inf. Secur. Appl.
Ding Zhu, Xiaojun Tong, Zhu Wang, Miao Zhang
2022 J jnl
Multim. Tools Appl.
Xilin Liu, Xiaojun Tong, Zhu Wang, Miao Zhang
2022 J jnl
Telecommun. Syst.
Jie Liu, Xiaojun Tong, Zhu Wang, Miao Zhang, Jing Ma
2022 J jnl
Vis. Comput.
Hao Chen, Qi Han, Qiong Li, Xiaojun Tong
2022 B conf
IJCNN
Jun Bai, Atul Sajjanhar, Yong Xiang, Xiaojun Tong, Shan Zeng
2022 J jnl
Multim. Syst.
Jinlong Liu, Miao Zhang, Xiaojun Tong, Zhu Wang
2022 J jnl
Multim. Syst.
Yantong Xiao, Xiaojun Tong, Miao Zhang, Zhu Wang
2022 J jnl
Entropy
Jingjin Wei, Miao Zhang, Xiaojun Tong
2022 J jnl
IEEE Geosci. Remote. Sens. Lett.
You Li, Qi Han, Qiong Li, Xiaojun Tong
2021 J jnl
Int. J. Bifurc. Chaos
Xiaojun Tong, Xudong Liu, Jing Liu, Miao Zhang, Zhu Wang
2021 J jnl
Int. J. Satell. Commun. Netw.
Xiaojun Tong, Jie Liu, Zhu Wang, Miao Zhang, Hong Chen, Jing Ma
2021 J jnl
Multim. Tools Appl.
Jinlong Liu, Miao Zhang, Xiaojun Tong, Zhu Wang
2021 J jnl
Entropy
Miao Zhang, Xiaojun Tong, Zhu Wang, Penghui Chen
2021 J jnl
Int. J. Commun. Syst.
Xiaojun Tong, Jie Liu, Zhu Wang, Miao Zhang, Jing Ma
2021 J jnl
Neurocomputing
Haozhe Xie, Hongxun Yao, Shangchen Zhou, Shengping Zhang, Xiaojun Tong, Wenxiu Sun
2020 J jnl
IEEE Access
Jie Liu, Xiaojun Tong, Zhu Wang, Miao Zhang, Jing Ma
2020 J jnl
Symmetry
Ding Zhu, Xiaojun Tong, Miao Zhang, Zhu Wang
2020 J jnl
Wirel. Networks
Jie Liu, Xiaojun Tong, Zhu Wang, Miao Zhang, Jing Ma
2020 J jnl
Multim. Tools Appl.
Honghong Zhu, Xiaojun Tong, Zhu Wang, Jing Ma
2020 J jnl
IEEE Access
Miao Zhang, Xiaojun Tong, Jie Liu, Zhu Wang, Jinlong Liu, Baolong Liu, Jing Ma
2020 J jnl
Multim. Syst.
Hui Xu, Xiaojun Tong, Zhu Wang, Miao Zhang, Yang Liu, Jing Ma
2019 J jnl
IEEE Access
Longteng Yi, Xiaojun Tong, Zhu Wang, Miao Zhang, Honghong Zhu, Jing Liu
2019 J jnl
Sensors
Guanyi Zhao, Qi Han, Xiang Peng, Pengyi Zou, Haidong Wang, Changping Du, He Wang, Xiaojun Tong, Qiong Li, Hong Guo
2019 J jnl
Int. J. Bifurc. Chaos
Jie Liu, Xiaojun Tong, Zhu Wang, Jing Ma, Longteng Yi
2019 J jnl
Sensors
Zhu Wang, Yan Yao, Xiaojun Tong, Qinghua Luo, Xiangyu Chen
2019 J jnl
CoRR
Haozhe Xie, Hongxun Yao, Xiaoshuai Sun, Shangchen Zhou, Shengping Zhang, Xiaojun Tong
2018 conf
SmartIoT
Yan Yao, Zhu Wang, Xiangyu Chen, Xiaojun Tong, Qinghua Luo
2018 J jnl
Int. J. Bifurc. Chaos
Hui Xu, Xiaojun Tong, Miao Zhang, Yang Liu, Zhu Wang
2018 conf
ICIMCS
Haozhe Xie, Hongxun Yao, Xiaoshuai Sun, Shangchen Zhou, Xiaojun Tong
2017 J jnl
IEEE Geosci. Remote. Sens. Lett.
Qi Han, Zhenjia Dou, Xiaojun Tong, Xiang Peng, Hong Guo
2017 J jnl
Multim. Tools Appl.
Xiaojun Tong, Penghui Chen, Miao Zhang
2017 J jnl
J. Electronic Imaging
Miao Zhang, Xiaojun Tong
2016 J jnl
Int. J. Inf. Commun. Technol.
Zaihui Deng, Xiaojun Tong, Benshun Yi, Liangcai Gan
2016 J jnl
IET Inf. Secur.
Yang Liu, Xiaojun Tong
2016 J jnl
Multim. Tools Appl.
Yang Liu, Xiaojun Tong, Jing Ma
2015 J jnl
J. Vis. Commun. Image Represent.
Xiaojun Tong, Miao Zhang, Zhu Wang, Yang Liu, Hui Xu, Jing Ma
2015 J jnl
Multim. Tools Appl.
Miao Zhang, Xiaojun Tong
2015 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Xiaojun Tong, Zhu Wang, Yang Liu, Miao Zhang, Lianjie Xu
2015 J jnl
Entropy
Xiaojun Tong, Yang Liu, Miao Zhang, Hui Xu, Zhu Wang
2015 J jnl
计算机科学
Hang Zhang, Xiaojun Tong, Zhu Wang
2014 J jnl
J. Syst. Softw.
Miao Zhang, Xiaojun Tong
2014 J jnl
Appl. Soft Comput.
Shan Zeng, Xiaojun Tong, Nong Sang
2013 J jnl
Signal Process. Image Commun.
Yang Liu, Xiaojun Tong, Shicheng Hu
2013 J jnl
Signal Process. Image Commun.
Xiaojun Tong, Yang Liu, Miao Zhang, Yue Chen
2013 J jnl
Knowl. Inf. Syst.
Shan Zeng, Xiaojun Tong, Nong Sang, Rui Huang
2013 J jnl
Commun. Nonlinear Sci. Numer. Simul.
Xiaojun Tong
2013 J jnl
J. Electronic Imaging
Shiyu Ji, Xiaojun Tong, Miao Zhang
2013 J jnl
Neurocomputing
Haitao Gan, Nong Sang, Rui Huang, Xiaojun Tong, Zhiping Dan
2012 J jnl
CoRR
Shiyu Ji, Xiaojun Tong, Miao Zhang
2011 conf
CSEE (5)
Xiaojun Tong, Yang Liu
2010 conf
ICICA (1)
Wei Li, Xiaojun Tong, Haitao Gan
2010 conf
Visual Information Processing
Dapeng Luo, Nong Sang, Rui Huang, Xiaojun Tong
2010 conf
Visual Information Processing
Rui Huang, Nong Sang, Dapeng Luo, Xiaojun Tong
2010 J jnl
Sci. China Inf. Sci.
Xiaojun Tong, Minggen Cui
2010 conf
Visual Information Processing
Dapeng Luo, Nong Sang, Rui Huang, Xiaojun Tong
2010 conf
ICICA (2)
Haibin Chen, Xiaojun Tong, Yonghui Zhang
2010 conf
WCNIS
Xiaojun Tong, Zhangquan Zhao, Huimin Shuai, Zhu Wang
2009 J jnl
Comput. Phys. Commun.
Xiaojun Tong, Zhu Wang, Haining Yu
2009 J jnl
Signal Process.
Xiaojun Tong, Minggen Cui
2008 J jnl
Image Vis. Comput.
Xiaojun Tong, Minggen Cui
2006 conf
IIH-MSP
Xiaojun Tong, Minggen Cui, Wei Jiang
2006 J jnl
Inf. Sci.
Xiaojun Tong, Mianyun Chen, Yi Lin
2004 J jnl
Fuzzy Sets Syst.
Xiaojun Tong, Mianyun Chen, Hongxing Li
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"