# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# Shared/common mozharness configuration for Android unit tests.
#
# This configuration should be combined with platform-specific mozharness
# configuration such as androidx86_7_0.py, android_hw, or similar.

from __future__ import absolute_import
import os


NODEJS_PATH = None
if "MOZ_FETCHES_DIR" in os.environ:
    NODEJS_PATH = os.path.join(os.environ["MOZ_FETCHES_DIR"], "node/bin/node")


def WebglSuite(name):
    return {
        "run_filename": "runtestsremote.py",
        "testsdir": "mochitest",
        "options": [
            "--app=%(app)s",
            "--remote-webserver=%(remote_webserver)s",
            "--xre-path=%(xre_path)s",
            "--utility-path=%(utility_path)s",
            "--http-port=%(http_port)s",
            "--ssl-port=%(ssl_port)s",
            "--certificate-path=%(certs_path)s",
            "--symbols-path=%(symbols_path)s",
            "--quiet",
            "--log-raw=%(raw_log_file)s",
            "--log-raw-level=%(log_raw_level)s",
            "--log-errorsummary=%(error_summary_file)s",
            "--log-tbpl-level=%(log_tbpl_level)s",
            "--screenshot-on-fail",
            "--subsuite=" + name,
            "--deviceSerial=%(device_serial)s",
        ],
    }


config = {
    "default_actions": [
        "clobber",
        "setup-avds",
        "download-and-extract",
        "create-virtualenv",
        "start-emulator",
        "verify-device",
        "install",
        "run-tests",
    ],
    "tooltool_cache": os.environ.get("TOOLTOOL_CACHE"),
    "hostutils_manifest_path": "testing/config/tooltool-manifests/linux64/hostutils.manifest",
    # "log_format": "%(levelname)8s - %(message)s",
    "log_tbpl_level": "info",
    "log_raw_level": "info",
    # To take device screenshots at timed intervals (each time in seconds, relative
    # to the start of the run-tests step) specify screenshot_times. For example, to
    # take 4 screenshots at one minute intervals you could specify:
    # "screenshot_times": [60, 120, 180, 240],
    "nodejs_path": NODEJS_PATH,
    "suite_definitions": {
        "mochitest-plain": {
            "run_filename": "runtestsremote.py",
            "testsdir": "mochitest",
            "options": [
                "--app=%(app)s",
                "--remote-webserver=%(remote_webserver)s",
                "--xre-path=%(xre_path)s",
                "--utility-path=%(utility_path)s",
                "--http-port=%(http_port)s",
                "--ssl-port=%(ssl_port)s",
                "--certificate-path=%(certs_path)s",
                "--symbols-path=%(symbols_path)s",
                "--quiet",
                "--log-raw=%(raw_log_file)s",
                "--log-raw-level=%(log_raw_level)s",
                "--log-errorsummary=%(error_summary_file)s",
                "--log-tbpl-level=%(log_tbpl_level)s",
                "--extra-profile-file=fonts",
                "--extra-profile-file=hyphenation",
                "--screenshot-on-fail",
                "--deviceSerial=%(device_serial)s",
            ],
        },
        "mochitest-webgl1-core": WebglSuite("webgl1-core"),
        "mochitest-webgl2-core": WebglSuite("webgl2-core"),
        "mochitest-webgl1-ext": WebglSuite("webgl1-ext"),
        "mochitest-webgl2-ext": WebglSuite("webgl2-ext"),
        "mochitest-webgl2-deqp": WebglSuite("webgl2-deqp"),
        "mochitest-webgpu": WebglSuite("webgpu"),
        "mochitest-plain-gpu": {
            "run_filename": "runtestsremote.py",
            "testsdir": "mochitest",
            "options": [
                "--app=%(app)s",
                "--remote-webserver=%(remote_webserver)s",
                "--xre-path=%(xre_path)s",
                "--utility-path=%(utility_path)s",
                "--http-port=%(http_port)s",
                "--ssl-port=%(ssl_port)s",
                "--certificate-path=%(certs_path)s",
                "--symbols-path=%(symbols_path)s",
                "--quiet",
                "--log-raw=%(raw_log_file)s",
                "--log-raw-level=%(log_raw_level)s",
                "--log-errorsummary=%(error_summary_file)s",
                "--log-tbpl-level=%(log_tbpl_level)s",
                "--screenshot-on-fail",
                "--subsuite=gpu",
                "--deviceSerial=%(device_serial)s",
            ],
        },
        "mochitest-media": {
            "run_filename": "runtestsremote.py",
            "testsdir": "mochitest",
            "options": [
                "--app=%(app)s",
                "--remote-webserver=%(remote_webserver)s",
                "--xre-path=%(xre_path)s",
                "--utility-path=%(utility_path)s",
                "--http-port=%(http_port)s",
                "--ssl-port=%(ssl_port)s",
                "--certificate-path=%(certs_path)s",
                "--symbols-path=%(symbols_path)s",
                "--quiet",
                "--log-raw=%(raw_log_file)s",
                "--log-raw-level=%(log_raw_level)s",
                "--log-errorsummary=%(error_summary_file)s",
                "--log-tbpl-level=%(log_tbpl_level)s",
                "--screenshot-on-fail",
                "--chunk-by-runtime",
                "--subsuite=media",
                "--deviceSerial=%(device_serial)s",
            ],
        },
        "reftest": {
            "run_filename": "remotereftest.py",
            "testsdir": "reftest",
            "options": [
                "--app=%(app)s",
                "--ignore-window-size",
                "--remote-webserver=%(remote_webserver)s",
                "--xre-path=%(xre_path)s",
                "--utility-path=%(utility_path)s",
                "--http-port=%(http_port)s",
                "--ssl-port=%(ssl_port)s",
                "--httpd-path",
                "%(modules_dir)s",
                "--symbols-path=%(symbols_path)s",
                "--extra-profile-file=fonts",
                "--extra-profile-file=hyphenation",
                "--suite=reftest",
                "--log-raw=%(raw_log_file)s",
                "--log-raw-level=%(log_raw_level)s",
                "--log-errorsummary=%(error_summary_file)s",
                "--log-tbpl-level=%(log_tbpl_level)s",
                "--deviceSerial=%(device_serial)s",
                "--topsrcdir=tests",
            ],
            "tests": [
                "tests/layout/reftests/reftest.list",
            ],
        },
        "reftest-qr": {
            "run_filename": "remotereftest.py",
            "testsdir": "reftest",
            "options": [
                "--app=%(app)s",
                "--ignore-window-size",
                "--remote-webserver=%(remote_webserver)s",
                "--xre-path=%(xre_path)s",
                "--utility-path=%(utility_path)s",
                "--http-port=%(http_port)s",
                "--ssl-port=%(ssl_port)s",
                "--httpd-path",
                "%(modules_dir)s",
                "--symbols-path=%(symbols_path)s",
                "--extra-profile-file=fonts",
                "--extra-profile-file=hyphenation",
                "--suite=reftest",
                "--log-raw=%(raw_log_file)s",
                "--log-raw-level=%(log_raw_level)s",
                "--log-errorsummary=%(error_summary_file)s",
                "--log-tbpl-level=%(log_tbpl_level)s",
                "--deviceSerial=%(device_serial)s",
                "--topsrcdir=tests",
            ],
            "tests": [
                "tests/layout/reftests/reftest-qr.list",
            ],
        },
        "crashtest": {
            "run_filename": "remotereftest.py",
            "testsdir": "reftest",
            "options": [
                "--app=%(app)s",
                "--ignore-window-size",
                "--remote-webserver=%(remote_webserver)s",
                "--xre-path=%(xre_path)s",
                "--utility-path=%(utility_path)s",
                "--http-port=%(http_port)s",
                "--ssl-port=%(ssl_port)s",
                "--httpd-path",
                "%(modules_dir)s",
                "--symbols-path=%(symbols_path)s",
                "--suite=crashtest",
                "--log-raw=%(raw_log_file)s",
                "--log-raw-level=%(log_raw_level)s",
                "--log-errorsummary=%(error_summary_file)s",
                "--log-tbpl-level=%(log_tbpl_level)s",
                "--deviceSerial=%(device_serial)s",
                "--topsrcdir=tests",
            ],
            "tests": [
                "tests/testing/crashtest/crashtests.list",
            ],
        },
        "crashtest-qr": {
            "run_filename": "remotereftest.py",
            "testsdir": "reftest",
            "options": [
                "--app=%(app)s",
                "--ignore-window-size",
                "--remote-webserver=%(remote_webserver)s",
                "--xre-path=%(xre_path)s",
                "--utility-path=%(utility_path)s",
                "--http-port=%(http_port)s",
                "--ssl-port=%(ssl_port)s",
                "--httpd-path",
                "%(modules_dir)s",
                "--symbols-path=%(symbols_path)s",
                "--suite=crashtest",
                "--log-raw=%(raw_log_file)s",
                "--log-raw-level=%(log_raw_level)s",
                "--log-errorsummary=%(error_summary_file)s",
                "--log-tbpl-level=%(log_tbpl_level)s",
                "--deviceSerial=%(device_serial)s",
                "--topsrcdir=tests",
            ],
            "tests": [
                "tests/testing/crashtest/crashtests-qr.list",
            ],
        },
        "jittest": {
            "run_filename": "jit_test.py",
            "testsdir": "jit-test/jit-test",
            "options": [
                "../../bin/js",
                "--remote",
                "-j",
                "1",
                "--localLib=../../bin",
                "--no-slow",
                "--no-progress",
                "--format=automation",
                "--jitflags=all",
                "--deviceSerial=%(device_serial)s",
            ],
        },
        "jsreftest": {
            "run_filename": "remotereftest.py",
            "testsdir": "reftest",
            "options": [
                "--app=%(app)s",
                "--ignore-window-size",
                "--remote-webserver=%(remote_webserver)s",
                "--xre-path=%(xre_path)s",
                "--utility-path=%(utility_path)s",
                "--http-port=%(http_port)s",
                "--ssl-port=%(ssl_port)s",
                "--httpd-path",
                "%(modules_dir)s",
                "--symbols-path=%(symbols_path)s",
                "--extra-profile-file=jsreftest/tests/js/src/tests/user.js",
                "--suite=jstestbrowser",
                "--log-raw=%(raw_log_file)s",
                "--log-raw-level=%(log_raw_level)s",
                "--log-errorsummary=%(error_summary_file)s",
                "--log-tbpl-level=%(log_tbpl_level)s",
                "--deviceSerial=%(device_serial)s",
                "--topsrcdir=../jsreftest/tests",
            ],
            "tests": [
                "../jsreftest/tests/js/src/tests/jstests.list",
            ],
        },
        "xpcshell": {
            "run_filename": "remotexpcshelltests.py",
            "testsdir": "xpcshell",
            "install": False,
            "options": [
                "--xre-path=%(xre_path)s",
                "--testing-modules-dir=%(modules_dir)s",
                "--apk=%(installer_path)s",
                "--no-logfiles",
                "--symbols-path=%(symbols_path)s",
                "--manifest=tests/xpcshell.ini",
                "--log-raw=%(raw_log_file)s",
                "--log-raw-level=%(log_raw_level)s",
                "--log-errorsummary=%(error_summary_file)s",
                "--log-tbpl-level=%(log_tbpl_level)s",
                "--test-plugin-path=none",
                "--deviceSerial=%(device_serial)s",
                "%(xpcshell_extra)s",
            ],
        },
        "cppunittest": {
            "run_filename": "remotecppunittests.py",
            "testsdir": "cppunittest",
            "install": False,
            "options": [
                "--symbols-path=%(symbols_path)s",
                "--xre-path=%(xre_path)s",
                "--localBinDir=../bin",
                "--apk=%(installer_path)s",
                ".",
                "--deviceSerial=%(device_serial)s",
                "--log-raw=%(raw_log_file)s",
                "--log-raw-level=%(log_raw_level)s",
                "--log-errorsummary=%(error_summary_file)s",
            ],
        },
        "geckoview-junit": {
            "run_filename": "runjunit.py",
            "testsdir": "mochitest",
            "options": [
                "--certificate-path=%(certs_path)s",
                "--remote-webserver=%(remote_webserver)s",
                "--symbols-path=%(symbols_path)s",
                "--utility-path=%(utility_path)s",
                "--deviceSerial=%(device_serial)s",
                "--log-raw=%(raw_log_file)s",
                "--log-raw-level=%(log_raw_level)s",
            ],
        },
        "gtest": {
            "run_filename": "remotegtests.py",
            "testsdir": "gtest",
            "install": True,
            "options": [
                "--symbols-path=%(symbols_path)s",
                "--tests-path=%(gtest_dir)s",
                "--libxul=%(gtest_dir)s/gtest_bin/gtest/libxul.so",
                "--package=%(app)s",
                "--deviceSerial=%(device_serial)s",
            ],
        },
    },  # end suite_definitions
}
