cmake_minimum_required (VERSION 2.6)
project(StringFileTest)
include_directories(${StringFileTest_BINARY_DIR})

# Read file test
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/InputFile.h.in" infile)

# Test reading a binary file into hex representation
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/test.bin" hexContents HEX)

if("${hexContents}" STREQUAL "0001027700")
  message("file(READ HEX) correctly read [${hexContents}]")
else()
  message(SEND_ERROR "file(READ HEX) incorrectly read [${hexContents}], but expected was [0001027700]")
endif()

# file(STRINGS) test
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/InputFile.h.in" infile_strings
  LIMIT_COUNT 1 LIMIT_INPUT 1024 LIMIT_OUTPUT 1024
  LENGTH_MINIMUM 10 LENGTH_MAXIMUM 23 REGEX include NEWLINE_CONSUME)
set(infile_strings_goal "#include \"includefile\"\n")
if("${infile_strings}" STREQUAL "${infile_strings_goal}")
  message("file(STRINGS) correctly read [${infile_strings}]")
else()
  message(SEND_ERROR
    "file(STRINGS) incorrectly read [${infile_strings}]")
endif()

# test reading a file and getting its binary data as hex string
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/main.srec" infilehex LIMIT 4 HEX)
if(NOT "${infilehex}" STREQUAL "53313036")
  message(SEND_ERROR
    "file(READ ... HEX) error, read: \"${infilehex}\", expected \"53313036\"")
endif()


# test that file(STRINGS) also work with Intel hex and Motorola S-record files
# this file has been created with "sdcc main.c"
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/main.ihx" infile_strings REGEX INFO)
set(infile_strings_goal "INFO:compiler\\[SDCC-HEX\\]")
if("${infile_strings}" MATCHES "${infile_strings_goal}")
  message("file(STRINGS) correctly read from hex file [${infile_strings}]")
else()
  message(SEND_ERROR
    "file(STRINGS) incorrectly read from hex file [${infile_strings}]")
endif()

# this file has been created with "sdcc main.c --out-fmt-s19"
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/main.srec" infile_strings REGEX INFO)
set(infile_strings_goal "INFO:compiler\\[SDCC-SREC\\]")
if("${infile_strings}" MATCHES "${infile_strings_goal}")
  message("file(STRINGS) correctly read from srec file [${infile_strings}]")
else()
  message(SEND_ERROR
    "file(STRINGS) incorrectly read from srec file [${infile_strings}]")
endif()

#this file has utf-8 content
file(STRINGS test.utf8 infile_strings ENCODING UTF-8)
list(LENGTH infile_strings content_len)
if(content_len MATCHES "3")
  message("file(STRINGS) correctly read from utf8 file [${infile_strings}]")
else()
  message(SEND_ERROR
    "file(STRINGS) incorrectly read from utf8 file [${infile_strings}]")
endif()

# String test
string(REGEX MATCH "[cC][mM][aA][kK][eE]" rmvar "CMake is great")
string(REGEX MATCHALL "[cC][mM][aA][kK][eE]" rmallvar "CMake is better than cmake or CMake")
string(REGEX REPLACE "[Aa][uU][tT][oO]([cC][oO][nN][fF]|[mM][aA][kK][eE])"
  "CMake" rrepvar "People should use Autoconf and Automake")
string(COMPARE EQUAL "CMake" "Autoconf" nceqvar)
string(COMPARE EQUAL "CMake" "CMake" ceqvar)
string(COMPARE NOTEQUAL "CMake" "Autoconf" cneqvar)
string(COMPARE NOTEQUAL "CMake" "CMake" ncneqvar)
string(COMPARE LESS "before" "after" nclvar)
string(COMPARE LESS "max" "min" clvar)
string(COMPARE GREATER "before" "after" cgvar)
string(COMPARE GREATER "max" "min" ncgvar)
string(ASCII 67 109 97 107 101 savar)
string(TOUPPER "CMake" tuvar)
string(TOLOWER "CMake" tlvar)
string(REPLACE "Autoconf" "CMake" repvar "People should use Autoconf")

if("abc" STREQUAL "xyz")
  message(SEND_ERROR "Problem with the if(STREQUAL), \"abc\" and \"xyz\" considered equal")
endif()

if("CMake is cool" MATCHES "(CMake) (is).+")
  if(NOT "${CMAKE_MATCH_0}" STREQUAL "CMake is cool")
    message(SEND_ERROR "CMAKE_MATCH_0 wrong: \"${CMAKE_MATCH_0}\", expected \"CMake is cool\"")
  endif()
  if(NOT "${CMAKE_MATCH_1}" STREQUAL "CMake")
    message(SEND_ERROR "CMAKE_MATCH_1 wrong: \"${CMAKE_MATCH_1}\", expected \"CMake\"")
  endif()
  if(NOT "${CMAKE_MATCH_2}" STREQUAL "is")
    message(SEND_ERROR "CMAKE_MATCH_2 wrong: \"${CMAKE_MATCH_2}\", expected \"is\"")
  endif()
else()
  message(SEND_ERROR "Problem with the if(MATCHES), no match found")
endif()

string(REGEX MATCH "(People).+CMake" matchResultVar "People should use CMake")
if(NOT "${matchResultVar}" STREQUAL "People should use CMake")
  message(SEND_ERROR "string(REGEX MATCH) problem: \"${matchResultVar}\", expected \"People should use CMake\"")
endif()
if(NOT "${CMAKE_MATCH_0}" STREQUAL "People should use CMake")
  message(SEND_ERROR "CMAKE_MATCH_0 wrong: \"${CMAKE_MATCH_0}\", expected \"People should use CMake\"")
endif()
if(NOT "${CMAKE_MATCH_1}" STREQUAL "People")
  message(SEND_ERROR "CMAKE_MATCH_1 wrong: \"${CMAKE_MATCH_1}\", expected \"People\"")
endif()
if(NOT "${CMAKE_MATCH_2}" STREQUAL "")
  message(SEND_ERROR "CMAKE_MATCH_2 wrong: \"${CMAKE_MATCH_2}\", expected empty string")
endif()


string(STRIP "
  ST1
  " ST1)
string(STRIP "ST2 " ST2)
string(STRIP "  ST3" ST3)

foreach(var ST1 ST2 ST3)
  if("x${var}" STREQUAL "x${${var}}")
    message("[${var}] == [${${var}}]")
  else()
    message(SEND_ERROR "Problem with the STRIP command for ${var}: [${${var}}]")
  endif()
endforeach()

string(SUBSTRING "People should use Autoconf" 7 10 substringres)
set(substringres "Everybody ${substringres} CMake")

string(LENGTH ${substringres} lengthres)

file(RELATIVE_PATH relpath "/usr/local/bin" "/usr/X11R6/bin/xnest")

# Make-style unquoted argument test
set(var $(VAR1)$(VAR2)/$(VAR3))
message("Output: [${var}]")
string(COMPARE EQUAL "${var}" "$(VAR1)$(VAR2)/$(VAR3)" result)
if(NOT result)
  message(SEND_ERROR "Unquoted $(VAR) syntax is broken.")
endif()

# Make directories test
file(MAKE_DIRECTORY
  "${CMAKE_CURRENT_BINARY_DIR}/Includes"
  "${CMAKE_CURRENT_BINARY_DIR}/Directory1"
  "${CMAKE_CURRENT_BINARY_DIR}/Directory2"
  )

# Write results to the file (test write file)
set(file "${CMAKE_CURRENT_BINARY_DIR}/Includes/Values.h")
file(WRITE "${file}" "/* this file is generated */\n")
foreach(var
    rmvar
    rmallvar
    rrepvar
    repvar
    relpath
    substringres
    lengthres
    nceqvar
    ceqvar
    cneqvar
    ncneqvar
    nclvar
    clvar
    cgvar
    ncgvar
    savar
    tuvar
    tlvar)
  file(APPEND "${file}" "#define ${var} \"${${var}}\"\n")
endforeach()

# Verify that the file was created recently.
if(NOT "${file}" IS_NEWER_THAN "${CMAKE_CURRENT_SOURCE_DIR}/InputFile.h.in")
  message(FATAL_ERROR "if(FILE_IS_NEWER) does not seem to work.")
endif()

# Test configuration of the string
set(TEST_DEFINED 123)
set(TEST_NOT_DEFINED)
string(CONFIGURE "${infile}" infile+-/out @ONLY)
set(infile "${infile+-/out}")

# Write include file to a file
string(REGEX REPLACE "includefile" "${file}" outfile "${infile}")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/OutputFile.h-tmp" "${outfile}")
file(RENAME "${CMAKE_CURRENT_BINARY_DIR}/OutputFile.h-tmp"
            "${CMAKE_CURRENT_BINARY_DIR}/OutputFile.h")

# Test file copy with relative paths
file(COPY .
  DESTINATION src
  FILE_PERMISSIONS OWNER_READ # test no OWNER_WRITE
  DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
  FILES_MATCHING PATTERN *.cxx # Only copy the main source file
  REGEX /src$ EXCLUDE # Block recursion for in-source build
  )

# Test file glob
file(GLOB_RECURSE src_files "${CMAKE_CURRENT_SOURCE_DIR}/*")
message("Files in ${CMAKE_CURRENT_SOURCE_DIR} are ${src_files}")
set(expr "${CMAKE_CURRENT_BINARY_DIR}/src/[sS][!a-su-zA-Z0-9][^a-qs-zA-Z0-9]ing?ile*.cxx")
message("Glob expression is [${expr}].")
file(GLOB src_files "${expr}")
message("Globbed files [${src_files}].")
add_executable(StringFileTest ${src_files})

set(expr "${CMAKE_CURRENT_SOURCE_DIR}/../*.cxx")
file(GLOB_RECURSE rel_src_files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/.." "${expr}")
message("Globbed files [${rel_src_files}].")

# Test FOREACH range
message("Cheack if FOREACH with RANGE works")
macro(TEST_RANGE ARGS CHECK)
  set(r)
  foreach(a RANGE ${ARGS})
    set(r ${r} ${a})
  endforeach()
  message("FOREACH with RANGE ${ARGS} produces ${r}")
  if("x${r}x" MATCHES "^x${CHECK}x$")
  else()
    message(SEND_ERROR "The range resulted in: ${r} should be ${CHECK}")
  endif()
endmacro()
TEST_RANGE("5" "0;1;2;3;4;5")
TEST_RANGE("3;5" "3;4;5")
TEST_RANGE("5;3" "5;4;3")
TEST_RANGE("3;10;2" "3;5;7;9")
TEST_RANGE("10;0;-3" "10;7;4;1")

# Test FOREACH IN signature
set(list1 "" a "")
set(list2 a "" b)
set(var_)
set(var_a)
set(var_b)
foreach(item IN LISTS list1 list2 ITEMS "" a "")
  set(var_${item} "${var_${item}}x")
endforeach()
if(NOT "${var_}" STREQUAL "xxxxx")
  message(FATAL_ERROR "count incorrect for \"\": [${var_}]")
endif()
if(NOT "${var_a}" STREQUAL "xxx")
  message(FATAL_ERROR "count incorrect for \"a\": [${var_a}]")
endif()
if(NOT "${var_b}" STREQUAL "x")
  message(FATAL_ERROR "count incorrect \"b\": [${var_b}]")
endif()

# Test SUBSTRING command
set(ST_INPUTSTRING "0123456789")
string(SUBSTRING ${ST_INPUTSTRING} 3 0 ST_EMPTY)
string(SUBSTRING ${ST_INPUTSTRING} 1 1 ST_ONE)
string(SUBSTRING ${ST_INPUTSTRING} 0 10 ST_ALL)
string(SUBSTRING ${ST_INPUTSTRING} 0 -1 ST_ALL_MINUS)
string(SUBSTRING ${ST_INPUTSTRING} 9 -1 ST_NINE)

if(ST_EMPTY)
  message(SEND_ERROR "SUBSTRING with length 0 does not return an empty string")
endif()
if(NOT ST_ONE STREQUAL "1")
  message(SEND_ERROR "SUBSTING command does not cut the correct selected character, was \"" ${ST_ONE} "\", should be \"1\"")
endif()
if(NOT ST_INPUTSTRING STREQUAL ST_ALL)
  message(SEND_ERROR "SUBSTRING does not return the whole string when selected with length")
endif()
if(NOT ST_INPUTSTRING STREQUAL ST_ALL_MINUS)
  message(SEND_ERROR "SUBSTRING does not return the whole string when selected with -1")
endif()
if(NOT ST_NINE STREQUAL "9")
  message(SEND_ERROR "SUBSTRING does not return the tail when selected with -1")
endif()

string(MAKE_C_IDENTIFIER "1one-two$" MCI_1)

if(NOT MCI_1 STREQUAL _1one_two_)
  message(SEND_ERROR "MAKE_C_IDENTIFIER did not create expected result.")
endif()

string(GENEX_STRIP "one;$<1:two;three>;four;$<TARGET_OBJECTS:some_target>" strip_result)

if (NOT strip_result STREQUAL "one;four")
  message(SEND_ERROR "GENEX_STRIP did not create expected result: ${strip_result}")
endif()
