if(BUILD_TESTING)
    if(TARGET gmock)
        message(STATUS "Google Mock found - building tests")

        set(TEST_SOURCES
            # Framework related source files
            ${CMAKE_CURRENT_SOURCE_DIR}/Initializer.h
            ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/Settings.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/Settings.h
            ${CMAKE_CURRENT_SOURCE_DIR}/TestFixture.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/TestFixture.h

            # Test related source files
            ${CMAKE_CURRENT_SOURCE_DIR}/AST.FromFile.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/BuiltInResource.FromFile.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/Config.FromFile.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/HexFloat.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/Hlsl.FromFile.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.Vk.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/Pp.FromFile.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/Spv.FromFile.cpp)

        if(ENABLE_SPVREMAPPER)
            set(TEST_SOURCES ${TEST_SOURCES}
                ${CMAKE_CURRENT_SOURCE_DIR}/Remap.FromFile.cpp)
        endif()

        glslang_pch(TEST_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/pch.cpp)

        add_executable(glslangtests ${TEST_SOURCES})
        set_property(TARGET glslangtests PROPERTY FOLDER tests)
        glslang_set_link_args(glslangtests)
        if(ENABLE_GLSLANG_INSTALL)
            install(TARGETS glslangtests EXPORT glslangtestsTargets
                    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
			install(EXPORT glslangtestsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
        endif(ENABLE_GLSLANG_INSTALL)

        set(GLSLANG_TEST_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../Test")
        # Supply a default test root directory, so that manual testing
        # doesn't have to specify the --test-root option in the normal
        # case that you want to use the tests from the same source tree.
        target_compile_definitions(glslangtests
                                   PRIVATE GLSLANG_TEST_DIRECTORY="${GLSLANG_TEST_DIRECTORY}")
        target_include_directories(glslangtests PRIVATE
                                   ${CMAKE_CURRENT_SOURCE_DIR}
                                   ${PROJECT_SOURCE_DIR}
                                   ${gmock_SOURCE_DIR}/include
                                   ${gtest_SOURCE_DIR}/include)

        set(LIBRARIES
            glslang OSDependent OGLCompiler glslang
            SPIRV glslang-default-resource-limits)

        if(ENABLE_SPVREMAPPER)
            set(LIBRARIES ${LIBRARIES} SPVRemapper)
        endif()

        if(ENABLE_HLSL)
            set(LIBRARIES ${LIBRARIES} HLSL)
        endif(ENABLE_HLSL)
        target_link_libraries(glslangtests PRIVATE ${LIBRARIES} gmock)

        add_test(NAME glslang-gtests
                 COMMAND glslangtests --test-root "${GLSLANG_TEST_DIRECTORY}")
    endif()
endif()
