# FindSquish

Finds Squish, a cross-platform automated GUI testing framework for applications built on various GUI technologies. Squish supports testing of both native and cross-platform toolkits, such as Qt, Java, and Tk.

## Result Variables

This module defines the following variables:

`Squish_FOUND`

  Boolean indicating whether the (requested version of) Squish is found. For backward compatibility, the `SQUISH_FOUND` variable is also set to the same value.

`SQUISH_VERSION`

  The full version of the Squish found.

`SQUISH_VERSION_MAJOR`

  The major version of the Squish found.

`SQUISH_VERSION_MINOR`

  The minor version of the Squish found.

`SQUISH_VERSION_PATCH`

  The patch version of the Squish found.

`SQUISH_INSTALL_DIR_FOUND`

  Boolean indicating whether the Squish installation directory is found.

`SQUISH_SERVER_EXECUTABLE_FOUND`

  Boolean indicating whether the Squish server executable is found.

`SQUISH_CLIENT_EXECUTABLE_FOUND`

  Boolean indicating whether the Squish client executable is found.

## Cache Variables

The following cache variables may also be set:

`SQUISH_INSTALL_DIR`

  The Squish installation directory containing `bin`, `lib`, etc.

`SQUISH_SERVER_EXECUTABLE`

  The path to the `squishserver` executable.

`SQUISH_CLIENT_EXECUTABLE`

  The path to the `squishrunner` executable.

## Commands

This module provides the following commands, if Squish is found:

squish_add_test

  Adds a Squish test to the project:

      squish_add_test(
        <name>
        AUT <target>
        SUITE <suite-name>
        TEST <squish-test-case-name>
        [PRE_COMMAND <command>]
        [POST_COMMAND <command>]
        [SETTINGSGROUP <group>]
      )

  This command is built on top of the `add_test()` command and adds a Squish test called `<name>` to the CMake project. It supports Squish versions 4 and newer.

  During the CMake testing phase, the Squish server is started, the test is executed on the client, and the server is stopped once the test completes. If any of these steps fail (including if the test itself fails), a fatal error is raised indicating the test did not pass.

  The arguments are:

  `<name>`

    The name of the test. This is passed as the first argument to the `add_test()` command.

  `AUT <target>`

    The name of the CMake target to be used as the AUT (Application Under Test), i.e., the executable that will be tested.

  `SUITE <suite-name>`

    Either the full path to the Squish test suite or just the suite name (i.e., the last directory name of the suite). In the latter case, the `CMakeLists.txt` invoking `squish_add_test()` must reside in the parent directory of the suite.

  `TEST <squish-test-case-name>`

    The name of the Squish test, corresponding to the subdirectory of the test within the suite directory.

  `PRE_COMMAND <command>`

    An optional command to execute before starting the Squish test. Pass it as a string. This may be a single command, or a semicolon-separated list of command and arguments.

  `POST_COMMAND <command>`

    An optional command to execute after the Squish test has completed. Pass it as a string. This may be a single command, or a semicolon-separated list of command and arguments.

  `SETTINGSGROUP <group>`

    Deprecated since version 3.18: This argument is now ignored. It was previously used to specify a settings group name for executing the test instead of the default value `CTest_<username>`.

  Changed in version 3.18: In previous CMake versions, this command was named `squish_v4_add_test()`.

squish_v3_add_test

  Adds a Squish test to the project, when using Squish version 3.x:

      squish_v3_add_test(
        <test-name>
        <application-under-test>
        <squish-test-case-name>
        <environment-variables>
        <test-wrapper>
      )

  Note

  This command is for Squish version 3, which is not maintained anymore. Use a newer Squish version, and `squish_add_test()` command.

  The arguments are:

  `<name>`

    The name of the test.

  `<application-under-test>`

    The path to the executable used as the AUT (Application Under Test), i.e., the executable that will be tested.

  `<squish-test-case-name>`

    The name of the Squish test, corresponding to the subdirectory of the test within the suite directory.

  `<environment-variables>`

    A semicolon-separated list of environment variables and their values (VAR=VALUE).

  `<test-wrapper>`

    A string of one or more (semicolon-separated list) test wrappers needed by the test case.

## Examples

Finding Squish and specifying a minimum required version:

    find_package(Squish 6.5)

Adding a Squish test:

    enable_testing()

    find_package(Squish 6.5)
    if(Squish_FOUND)
      squish_add_test(
        projectTestName
        AUT projectApp
        SUITE ${CMAKE_CURRENT_SOURCE_DIR}/tests/projectSuite
        TEST someSquishTest
      )
    endif()

Example, how to use the `squish_v3_add_test()` command:

    enable_testing()

    find_package(Squish 3.0)
    if(Squish_FOUND)
      squish_v3_add_test(
        projectTestName
        $<TARGET_FILE:projectApp>
        someSquishTest
        "FOO=1;BAR=2"
        testWrapper
      )
    endif()