# This file contains a list of Mojo gtest unit tests.
#
# This must be valid Python. It may use the |config| global that will be a
# mopy.config.Config object, and must set a |tests| global that will contain the
# list of tests to run.
#
# The entries in |tests| are dictionaries of the following form:
#   {
#     # Required URL for apptest.
#     "test": "mojo:test_app_url",
#     # Optional display name (otherwise the entry for "test" above is used).
#     "name": "mojo:test_app_url (more details)",
#     # Optional test type. Valid values:
#     #   * "gtest" (default)
#     #   * "gtest_isolated": like "gtest", but run with fixture isolation,
#     #      i.e., each test in a fresh mojo_shell)
#     #   * "dart".
#     "type": "gtest",
#     # Optional arguments for the apptest.
#     "test-args": ["--an_arg", "another_arg"],
#     # Optional arguments for the shell.
#     "shell-args": ["--some-flag-for-the-shell", "--another-flag"],
#   }
#
# TODO(vtl|msw): Add a way of specifying data dependencies.

tests = [
  {
    "test": "mojo:clipboard_apptests",
  },
  {
    "test": "mojo:example_apptests",
    # ExampleApplicationTest.CheckCommandLineArg checks --example_apptest_arg.
    "test-args": ["--example_apptest_arg"],
  },
  {
    "test": "mojo:example_apptests",
    "name": "mojo:example_apptests (multiprocess)",
    # ExampleApplicationTest.CheckCommandLineArg checks --example_apptest_arg.
    "test-args": ["--example_apptest_arg"],
    "shell-args": ["--enable-multiprocess"],
  },
  {
    "test": "mojo:files_apptests",
  },
  {
    "test": "mojo:http_server_apptests",
  },
  {
    "test": "mojo:mojio_apptests",
  },
  {
    "test": "mojo:moterm_apptests",
  },
  {
    "test": "mojo:mojo_view_manager_client_apptests",
    "shell-args": ["--args-for=mojo:native_viewport_service --use-headless-config --use-osmesa"],
  },
  {
    "test": "mojo:view_manager_service_apptests",
    "type": "gtest_isolated",
    "shell-args": ["--args-for=mojo:native_viewport_service --use-headless-config --use-osmesa"],
  },
  {
    "test": "mojo:network_service_apptests",
  },
  {
    "test": "mojo:window_manager_apptests",
  },
  {
    "test": "mojo:versioning_apptests",
  },
]

if config.target_os == config.OS_LINUX:
  tests += [
    {
      "test": "mojo:example_apptests",
      "name": "mojo:example_apptests (python_example_service)",
      # ExampleApplicationTest.CheckCommandLineArg checks --example_apptest_arg.
      "test-args": ["--example_apptest_arg"],
      "shell-args": [
        "--url-mappings=mojo:example_service=mojo:python_example_service"
      ],
    },
    {
      "test": "mojo:mojo_url_redirector_apptests",
      "test-args": ["--redirector_port=49152",
                    "--app_location_files_port=49153"],
      "shell-args": ["--args-for=mojo:mojo_url_redirector 0.0.0.0:49152 http://localhost:49153"],
    }
  ]

if config.target_os == config.OS_ANDROID:
  tests += [
    {
      "test": "mojo:example_apptests",
      "name": "mojo:example_apptests (android_example_service)",
      # ExampleApplicationTest.CheckCommandLineArg checks --example_apptest_arg.
      "test-args": ["--example_apptest_arg"],
      "shell-args": [
        "--url-mappings=mojo:example_service=mojo:android_example_service"
      ],
    },
  ]

if config.target_os != config.OS_ANDROID:
  tests += [
    {
      "test": "mojo:js_apptests",
      "type": "gtest_isolated",
    },
    {
      "test": "mojo:reaper_apptests",
    },
    {
      "test": "mojo:dart_apptests",
      "type": "dart",
    },
    {
      # https://github.com/domokit/mojo/issues/61
      # Sometime the shell get a trucated application when exposed through the
      # http server.
      "test": "mojo:shell_apptests",
    },
    {
      "test": "mojo:url_response_disk_cache_apptests",
    },
  ]
