diff options
author | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 15:39:57 -0700 |
---|---|---|
committer | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 15:39:57 -0700 |
commit | 035c7fabc3b82cbc9a346c11abe2e9462b4c0379 (patch) | |
tree | 7e40f5a790eae329a8c5d3e59f046451767956ff /Tests/StringFileTest | |
download | cmake-035c7fabc3b82cbc9a346c11abe2e9462b4c0379.tar.gz cmake-035c7fabc3b82cbc9a346c11abe2e9462b4c0379.tar.bz2 cmake-035c7fabc3b82cbc9a346c11abe2e9462b4c0379.zip |
Imported Upstream version 2.8.9upstream/2.8.9
Diffstat (limited to 'Tests/StringFileTest')
-rw-r--r-- | Tests/StringFileTest/CMakeLists.txt | 282 | ||||
-rw-r--r-- | Tests/StringFileTest/InputFile.h.in | 38 | ||||
-rw-r--r-- | Tests/StringFileTest/StringFile.cxx | 31 | ||||
-rw-r--r-- | Tests/StringFileTest/main.ihx | 21 | ||||
-rw-r--r-- | Tests/StringFileTest/main.srec | 21 | ||||
-rw-r--r-- | Tests/StringFileTest/test.bin | bin | 0 -> 5 bytes |
6 files changed, 393 insertions, 0 deletions
diff --git a/Tests/StringFileTest/CMakeLists.txt b/Tests/StringFileTest/CMakeLists.txt new file mode 100644 index 000000000..7792a353d --- /dev/null +++ b/Tests/StringFileTest/CMakeLists.txt @@ -0,0 +1,282 @@ +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("${hexContents}" STREQUAL "0001027700") + MESSAGE(SEND_ERROR "FILE(READ HEX) incorrectly read [${hexContents}], but expected was [0001027700]") +ENDIF("${hexContents}" STREQUAL "0001027700") + +# 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("${infile_strings}" STREQUAL "${infile_strings_goal}") + MESSAGE(SEND_ERROR + "FILE(STRINGS) incorrectly read [${infile_strings}]") +ENDIF("${infile_strings}" STREQUAL "${infile_strings_goal}") + +# 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(NOT "${infilehex}" STREQUAL "53313036") + + +# 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("${infile_strings}" MATCHES "${infile_strings_goal}") + MESSAGE(SEND_ERROR + "FILE(STRINGS) incorrectly read from hex file [${infile_strings}]") +ENDIF("${infile_strings}" MATCHES "${infile_strings_goal}") + +# 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("${infile_strings}" MATCHES "${infile_strings_goal}") + MESSAGE(SEND_ERROR + "FILE(STRINGS) incorrectly read from srec file [${infile_strings}]") +ENDIF("${infile_strings}" MATCHES "${infile_strings_goal}") + +# 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("abc" STREQUAL "xyz") + +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(NOT "${CMAKE_MATCH_0}" STREQUAL "CMake is cool") + IF(NOT "${CMAKE_MATCH_1}" STREQUAL "CMake") + MESSAGE(SEND_ERROR "CMAKE_MATCH_1 wrong: \"${CMAKE_MATCH_1}\", expected \"CMake\"") + ENDIF(NOT "${CMAKE_MATCH_1}" STREQUAL "CMake") + IF(NOT "${CMAKE_MATCH_2}" STREQUAL "is") + MESSAGE(SEND_ERROR "CMAKE_MATCH_2 wrong: \"${CMAKE_MATCH_2}\", expected \"is\"") + ENDIF(NOT "${CMAKE_MATCH_2}" STREQUAL "is") +ELSE("CMake is cool" MATCHES "(CMake) (is).+") + MESSAGE(SEND_ERROR "Problem with the IF(MATCHES), no match found") +ENDIF("CMake is cool" MATCHES "(CMake) (is).+") + +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(NOT "${matchResultVar}" STREQUAL "People should use CMake") +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(NOT "${CMAKE_MATCH_0}" STREQUAL "People should use CMake") +IF(NOT "${CMAKE_MATCH_1}" STREQUAL "People") + MESSAGE(SEND_ERROR "CMAKE_MATCH_1 wrong: \"${CMAKE_MATCH_1}\", expected \"People\"") +ENDIF(NOT "${CMAKE_MATCH_1}" STREQUAL "People") +IF(NOT "${CMAKE_MATCH_2}" STREQUAL "") + MESSAGE(SEND_ERROR "CMAKE_MATCH_2 wrong: \"${CMAKE_MATCH_2}\", expected empty string") +ENDIF(NOT "${CMAKE_MATCH_2}" STREQUAL "") + + +STRING(STRIP " + ST1 + " ST1) +STRING(STRIP "ST2 " ST2) +STRING(STRIP " ST3" ST3) + +FOREACH(var ST1 ST2 ST3) + IF("${var}" STREQUAL "${${var}}") + MESSAGE("[${var}] == [${${var}}]") + ELSE("${var}" STREQUAL "${${var}}") + MESSAGE(SEND_ERROR "Problem with the STRIP command for ${var}: [${${var}}]") + ENDIF("${var}" STREQUAL "${${var}}") +ENDFOREACH(var) + +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") + +# Escaping test +SET(var "\\ \" \ \t \n \r \# \( \) \0") +MESSAGE("Output: [${var}]") +SET(var \\ \" \ \t \n \r \# \( \) \0) +MESSAGE("Output: [${var}]") + +# 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(NOT result) + +# Obscure environment variable name +SET("ENV{x+(y)}" "Obscure environment variable value") +MESSAGE("Output: [$ENV{x+(y)}]") +IF(NOT "$ENV{x+(y)}" STREQUAL "Obscure environment variable value") + MESSAGE(SEND_ERROR "Environment variable \"ENV{x+(y)}\" does not work.") +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(var) + +# 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(NOT "${file}" IS_NEWER_THAN "${CMAKE_CURRENT_SOURCE_DIR}/InputFile.h.in") + +# 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(a) + MESSAGE("FOREACH with RANGE ${ARGS} produces ${r}") + IF("x${r}x" MATCHES "^x${CHECK}x$") + ELSE("x${r}x" MATCHES "^x${CHECK}x$") + MESSAGE(SEND_ERROR "The range resulted in: ${r} should be ${CHECK}") + ENDIF("x${r}x" MATCHES "^x${CHECK}x$") +ENDMACRO(TEST_RANGE) +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(item) +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(ST_EMPTY) +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(NOT ST_ONE STREQUAL "1") +IF(NOT ST_INPUTSTRING STREQUAL ST_ALL) + MESSAGE(SEND_ERROR "SUBSTRING does not return the whole string when selected with length") +ENDIF(NOT ST_INPUTSTRING STREQUAL ST_ALL) +IF(NOT ST_INPUTSTRING STREQUAL ST_ALL_MINUS) + MESSAGE(SEND_ERROR "SUBSTRING does not return the whole string when selected with -1") +ENDIF(NOT ST_INPUTSTRING STREQUAL ST_ALL_MINUS) +IF(NOT ST_NINE STREQUAL "9") + MESSAGE(SEND_ERROR "SUBSTRING does not return the tail when selected with -1") +ENDIF(NOT ST_NINE STREQUAL "9") diff --git a/Tests/StringFileTest/InputFile.h.in b/Tests/StringFileTest/InputFile.h.in new file mode 100644 index 000000000..3e70a36e8 --- /dev/null +++ b/Tests/StringFileTest/InputFile.h.in @@ -0,0 +1,38 @@ +#include "includefile" + +/* This should be configured to a define. */ +#cmakedefine TEST_DEFINED @TEST_DEFINED@ +/* This should be configured to a commented undef with the curlies in place */ +#cmakedefine TEST_NOT_DEFINED ${TEST_NOT_DEFINED} + +/* This complicated line should be configured unchanged: */ +static const char* configvar = +"@$@$junk =~ s/#$xyz#/$foo_bar{$wibble}->{$xyz}/;@@"; + +int CheckMethod(const char* var, const char* val ) +{ + if ( !var ) + { + printf("Var not specified\n"); + return 1; + } + if ( !val ) + { + printf("Val not specified\n"); + return 1; + } + if ( strcmp(var, val) != 0) + { + printf("Var (%s) and Val (%s) are not the same...\n", var, val); + return 1; + } +#if !defined(TEST_DEFINED) || TEST_DEFINED != 123 + printf("TEST_DEFINED is not defined to 123\n"); + return 1; +#elif defined(TEST_NOT_DEFINED) + printf("TEST_NOT_DEFINED is defined\n"); + return 1; +#else + return 0; +#endif +} diff --git a/Tests/StringFileTest/StringFile.cxx b/Tests/StringFileTest/StringFile.cxx new file mode 100644 index 000000000..609ebaf20 --- /dev/null +++ b/Tests/StringFileTest/StringFile.cxx @@ -0,0 +1,31 @@ +#include <stdio.h> +#include <string.h> +#include "OutputFile.h" + +int main(int, char*[]) +{ + int res = 0; + + res += CheckMethod(rmvar, "CMake"); + res += CheckMethod(rmallvar, "CMake;cmake;CMake"); + res += CheckMethod(rrepvar, "People should use CMake and CMake"); + res += CheckMethod(repvar, "People should use CMake"); + res += CheckMethod(substringres, "Everybody should use CMake"); + res += CheckMethod(nceqvar, "0"); + res += CheckMethod(lengthres, "26"); + res += CheckMethod(ceqvar, "1"); + res += CheckMethod(cneqvar, "1"); + res += CheckMethod(ncneqvar, "0"); + res += CheckMethod(nclvar, "0"); + res += CheckMethod(clvar, "1"); + res += CheckMethod(cgvar, "1"); + res += CheckMethod(ncgvar, "0"); + res += CheckMethod(savar, "Cmake"); + res += CheckMethod(tuvar, "CMAKE"); + res += CheckMethod(tlvar, "cmake"); + res += CheckMethod(relpath, "../../X11R6/bin/xnest"); + res += CheckMethod(configvar, + "@$@$junk =~ s/#$xyz#/$foo_bar{$wibble}->{$xyz}/;@@"); + + return res; +} diff --git a/Tests/StringFileTest/main.ihx b/Tests/StringFileTest/main.ihx new file mode 100644 index 000000000..c1d1dd2b3 --- /dev/null +++ b/Tests/StringFileTest/main.ihx @@ -0,0 +1,21 @@ +:03000000020003F8 +:03005C0002005F40 +:05005F0012006480FEA8 +:010064002279 +:0E006900494E464F3A636F6D70696C65725B6D +:0A007700534443432D4845585D00F3 +:06003200E478FFF6D8FDA2 +:080010007900E94400601B7A4D +:0500180000900081785A +:03001D000075A0CB +:0A00200000E493F2A308B800020503 +:08002A00A0D9F4DAF275A0FF81 +:080038007800E84400600A7939 +:030040000075A0A8 +:0600430000E4F309D8FC03 +:080049007800E84400600C7926 +:0B00510000900000E4F0A3D8FCD9FAF6 +:03000300758107FD +:0A000600120065E582600302005F4E +:04006500758200227E +:00000001FF diff --git a/Tests/StringFileTest/main.srec b/Tests/StringFileTest/main.srec new file mode 100644 index 000000000..bd47c29cc --- /dev/null +++ b/Tests/StringFileTest/main.srec @@ -0,0 +1,21 @@ +S1060000020003F4 +S106005C02005F3C +S108005F12006480FEA4 +S10400642275 +S1110069494E464F3A636F6D70696C65725B69 +S10E0077534443432D535245435D00A6 +S1090032E478FFF6D8FD9E +S10B00107900E94400601B7A49 +S1080018009000827855 +S106001D0075A0C7 +S10D002000E493F2A308B8000205FF +S10B002AA0D9F4DAF275A0FF7D +S10B00387800E84400600A7935 +S10600400075A0A4 +S109004300E4F309D8FCFF +S10B00497800E84400600C7922 +S10E005100900000E4F0A3D8FCD9FAF2 +S1060003758107F9 +S10D0006120065E582600302005F4A +S1070065758200227A +S9030000FC diff --git a/Tests/StringFileTest/test.bin b/Tests/StringFileTest/test.bin Binary files differnew file mode 100644 index 000000000..18d62a144 --- /dev/null +++ b/Tests/StringFileTest/test.bin |