if(WIN32 OR NOT ENABLE_YANGLINT_INTERACTIVE)
    set(YANGLINT_INTERACTIVE OFF)
else()
    set(YANGLINT_INTERACTIVE ON)
endif()

function(add_yanglint_test)
    cmake_parse_arguments(ADDTEST "" "NAME;VIA;SCRIPT" "" ${ARGN})
    set(TEST_NAME yanglint_${ADDTEST_NAME})

    if(${ADDTEST_VIA} STREQUAL "tclsh")
        set(WRAPPER ${PATH_TCLSH})
    else()
        message(FATAL_ERROR "build: unexpected wrapper '${ADDTEST_VIA}'")
    endif()

    add_test(NAME ${TEST_NAME} COMMAND ${WRAPPER} ${CMAKE_CURRENT_SOURCE_DIR}/${ADDTEST_SCRIPT})
    set_property(TEST ${TEST_NAME} APPEND PROPERTY ENVIRONMENT "TESTS_DIR=${CMAKE_CURRENT_SOURCE_DIR}")
    set_property(TEST ${TEST_NAME} APPEND PROPERTY ENVIRONMENT "YANG_MODULES_DIR=${CMAKE_CURRENT_SOURCE_DIR}/modules")
    set_property(TEST ${TEST_NAME} APPEND PROPERTY ENVIRONMENT "YANGLINT=${PROJECT_BINARY_DIR}")
endfunction(add_yanglint_test)

if(ENABLE_TESTS)
    # tests of interactive mode using tclsh
    find_program(PATH_TCLSH NAMES tclsh)
    find_program(PATH_EXPECT NAMES expect)
    if(NOT PATH_TCLSH)
        message(WARNING "tclsh not found, yanglint(1) interactive tests will not be available.")
    elseif(NOT PATH_EXPECT)
        message(WARNING "expect not found, yanglint(1) interactive tests will not be available.")
    else()
        if(YANGLINT_INTERACTIVE)
            add_yanglint_test(NAME interactive VIA tclsh SCRIPT interactive/all.tcl)
            add_yanglint_test(NAME non-interactive VIA tclsh SCRIPT non-interactive/all.tcl)
        else()
            add_yanglint_test(NAME non-interactive VIA tclsh SCRIPT non-interactive/all.tcl)
        endif()
    endif()
endif()
