| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- function(assert_strequal actual expected)
- if(NOT expected STREQUAL actual)
- message(SEND_ERROR "Output:\n${actual}\nDid not match expected:\n${expected}\n")
- endif()
- endfunction()
- function(assert_strequal_error actual expected error)
- if(error)
- message(SEND_ERROR "Unexpected error: ${error}")
- endif()
- assert_strequal("${actual}" "${expected}")
- endfunction()
- function(assert_json_equal error actual expected)
- if(error)
- message(SEND_ERROR "Unexpected error: ${error}")
- endif()
- string(JSON eql EQUAL "${actual}" "${expected}")
- if(NOT eql)
- message(SEND_ERROR "Expected equality got\n ${actual}\n expected\n${expected}")
- endif()
- endfunction()
- # test EQUAL
- string(JSON result EQUAL
- [=[ {"foo":"bar"} ]=]
- [=[
- {
- "foo": "bar"
- }
- ]=])
- if(NOT result)
- message(SEND_ERROR "Expected ON got ${result}")
- endif()
- string(JSON result EQUAL
- [=[ {"foo":"bar"} ]=]
- [=[
- {
- "foo1": "bar"
- }
- ]=])
- if(result)
- message(SEND_ERROR "Expected OFF got ${result}")
- endif()
- set(json1 [=[
- {
- "foo" : "bar",
- "array" : [5, "val", {"some": "other"}, null],
- "types" : {
- "null" : null,
- "number" : 5,
- "string" : "foo",
- "boolean" : false,
- "array" : [1,2,3],
- "object" : {}
- },
- "values" : {
- "null" : null,
- "number" : 5,
- "string" : "foo",
- "false" : false,
- "true" : true
- },
- "special" : {
- "foo;bar" : "value1",
- ";" : "value2",
- "semicolon" : ";",
- "list" : ["one", "two;three", "four"],
- "quote" : "\"",
- "\"" : "quote",
- "backslash" : "\\",
- "\\" : "backslash",
- "slash" : "\/",
- "\/" : "slash",
- "newline" : "\n",
- "\n" : "newline",
- "return" : "\r",
- "\r" : "return",
- "tab" : "\t",
- "\t" : "tab",
- "backspace" : "\b",
- "\b" : "backspace",
- "formfeed" : "\f",
- "\f" : "formfeed"
- }
- }
- ]=])
- string(JSON result GET "${json1}" foo)
- assert_strequal("${result}" bar)
- string(JSON result GET "${json1}" array 0)
- assert_strequal("${result}" 5)
- string(JSON result GET "${json1}" array 1)
- assert_strequal("${result}" val)
- string(JSON result GET "${json1}" array 2 some)
- assert_strequal("${result}" other)
- string(JSON result GET "${json1}" values null)
- assert_strequal("${result}" "")
- string(JSON result GET "${json1}" values number)
- assert_strequal("${result}" 5)
- string(JSON result GET "${json1}" values string)
- assert_strequal("${result}" "foo")
- string(JSON result GET "${json1}" values true)
- assert_strequal("${result}" "ON")
- if(NOT result)
- message(SEND_ERROR "Output did not match expected: TRUE actual: ${result}")
- endif()
- string(JSON result GET "${json1}" values false)
- assert_strequal("${result}" "OFF")
- if(result)
- message(SEND_ERROR "Output did not match expected: FALSE actual: ${result}")
- endif()
- string(JSON result ERROR_VARIABLE error GET "${json1}" foo)
- assert_strequal_error("${result}" "bar" "${error}")
- string(JSON result ERROR_VARIABLE error GET "${json1}" notThere)
- assert_strequal("${result}" "notThere-NOTFOUND")
- assert_strequal("${error}" "member 'notThere' not found")
- string(JSON result ERROR_VARIABLE error GET "${json1}" 0)
- assert_strequal("${result}" "0-NOTFOUND")
- assert_strequal("${error}" "member '0' not found")
- string(JSON result ERROR_VARIABLE error GET "${json1}" array 10)
- assert_strequal("${result}" "array-10-NOTFOUND")
- assert_strequal("${error}" "expected an index less then 4 got '10'")
- string(JSON result ERROR_VARIABLE error GET "${json1}" array 2 some notThere)
- assert_strequal("${result}" "array-2-some-notThere-NOTFOUND")
- assert_strequal("${error}" "invalid path 'array 2 some notThere', need element of OBJECT or ARRAY type to lookup 'notThere' got STRING")
- # special chars
- string(JSON result ERROR_VARIABLE error GET "${json1}" special "foo;bar")
- assert_strequal_error("${result}" "value1" "${error}")
- string(JSON result ERROR_VARIABLE error GET "${json1}" special ";")
- assert_strequal_error("${result}" "value2" "${error}")
- string(JSON result ERROR_VARIABLE error GET "${json1}" special semicolon)
- assert_strequal_error("${result}" ";" "${error}")
- string(JSON result ERROR_VARIABLE error GET "${json1}" special list 1)
- assert_strequal_error("${result}" "two;three" "${error}")
- string(JSON result ERROR_VARIABLE error GET "${json1}")
- assert_json_equal("${error}" "${result}" "${json1}")
- string(JSON result ERROR_VARIABLE error GET "${json1}" array)
- assert_json_equal("${error}" "${result}" [=[ [5, "val", {"some": "other"}, null] ]=])
- string(JSON result ERROR_VARIABLE error GET "${json1}" special quote)
- assert_strequal_error("${result}" "\"" "${error}")
- string(JSON result ERROR_VARIABLE error GET "${json1}" special "\"")
- assert_strequal_error("${result}" "quote" "${error}")
- string(JSON result ERROR_VARIABLE error GET "${json1}" special backslash)
- assert_strequal_error("${result}" "\\" "${error}")
- string(JSON result ERROR_VARIABLE error GET "${json1}" special "\\")
- assert_strequal_error("${result}" "backslash" "${error}")
- string(JSON result ERROR_VARIABLE error GET "${json1}" special slash)
- assert_strequal_error("${result}" "/" "${error}")
- string(JSON result ERROR_VARIABLE error GET "${json1}" special "/")
- assert_strequal_error("${result}" "slash" "${error}")
- string(JSON result ERROR_VARIABLE error GET "${json1}" special newline)
- assert_strequal_error("${result}" "\n" "${error}")
- string(JSON result ERROR_VARIABLE error GET "${json1}" special "\n")
- assert_strequal_error("${result}" "newline" "${error}")
- string(JSON result ERROR_VARIABLE error GET "${json1}" special return)
- assert_strequal_error("${result}" "\r" "${error}")
- string(JSON result ERROR_VARIABLE error GET "${json1}" special "\r")
- assert_strequal_error("${result}" "return" "${error}")
- string(JSON result ERROR_VARIABLE error GET "${json1}" special tab)
- assert_strequal_error("${result}" "\t" "${error}")
- string(JSON result ERROR_VARIABLE error GET "${json1}" special "\t")
- assert_strequal_error("${result}" "tab" "${error}")
- file(READ ${CMAKE_CURRENT_LIST_DIR}/json/unicode.json unicode)
- string(JSON char ERROR_VARIABLE error GET "${unicode}" backspace)
- string(JSON result ERROR_VARIABLE error GET "${unicode}" "${char}")
- assert_strequal_error("${result}" "backspace" "${error}")
- file(READ ${CMAKE_CURRENT_LIST_DIR}/json/unicode.json unicode)
- string(JSON char ERROR_VARIABLE error GET "${unicode}" backspace)
- string(JSON result ERROR_VARIABLE error GET "${unicode}" "${char}")
- assert_strequal_error("${result}" "backspace" "${error}")
- string(JSON char ERROR_VARIABLE error GET "${unicode}" formfeed)
- string(JSON result ERROR_VARIABLE error GET "${unicode}" "${char}")
- assert_strequal_error("${result}" "formfeed" "${error}")
- string(JSON char ERROR_VARIABLE error GET "${unicode}" datalinkescape)
- string(JSON result ERROR_VARIABLE error GET "${unicode}" "${char}")
- assert_strequal_error("${result}" "datalinkescape" "${error}")
- # Test TYPE
- string(JSON result TYPE "${json1}" types null)
- assert_strequal("${result}" NULL)
- string(JSON result TYPE "${json1}" types number)
- assert_strequal("${result}" NUMBER)
- string(JSON result TYPE "${json1}" types string)
- assert_strequal("${result}" STRING)
- string(JSON result TYPE "${json1}" types boolean)
- assert_strequal("${result}" BOOLEAN)
- string(JSON result TYPE "${json1}" types array)
- assert_strequal("${result}" ARRAY)
- string(JSON result TYPE "${json1}" types object)
- assert_strequal("${result}" OBJECT)
- # Test LENGTH
- string(JSON result ERROR_VARIABLE error LENGTH "${json1}")
- assert_strequal("${result}" 5)
- if(error)
- message(SEND_ERROR "Unexpected error: ${error}")
- endif()
- string(JSON result ERROR_VARIABLE error LENGTH "${json1}" array)
- assert_strequal("${result}" 4)
- if(error)
- message(SEND_ERROR "Unexpected error: ${error}")
- endif()
- string(JSON result ERROR_VARIABLE error LENGTH "${json1}" foo)
- assert_strequal("${result}" "foo-NOTFOUND")
- assert_strequal("${error}" "LENGTH needs to be called with an element of type ARRAY or OBJECT, got STRING")
- # Test MEMBER
- string(JSON result ERROR_VARIABLE error MEMBER "${json1}" values 2)
- assert_strequal("${result}" "number")
- if(error)
- message(SEND_ERROR "Unexpected error: ${error}")
- endif()
- string(JSON result ERROR_VARIABLE error MEMBER "${json1}" values 100)
- assert_strequal("${result}" "values-100-NOTFOUND")
- assert_strequal("${error}" "expected an index less then 5 got '100'")
- # Test length loops
- string(JSON arrayLength ERROR_VARIABLE error LENGTH "${json1}" types array)
- if(error)
- message(SEND_ERROR "Unexpected error: ${error}")
- endif()
- set(values "")
- math(EXPR arrayLength "${arrayLength}-1")
- foreach(index RANGE ${arrayLength})
- string(JSON value ERROR_VARIABLE error GET "${json1}" types array ${index})
- if(error)
- message(SEND_ERROR "Unexpected error: ${error}")
- endif()
- list(APPEND values "${value}")
- endforeach()
- assert_strequal("${values}" "1;2;3")
- string(JSON valuesLength ERROR_VARIABLE error LENGTH "${json1}" values)
- if(error)
- message(SEND_ERROR "Unexpected error: ${error}")
- endif()
- set(values "")
- set(members "")
- math(EXPR valuesLength "${valuesLength}-1")
- foreach(index RANGE ${valuesLength})
- string(JSON member ERROR_VARIABLE error MEMBER "${json1}" values ${index})
- if(error)
- message(SEND_ERROR "Unexpected error: ${error}")
- endif()
- string(JSON value ERROR_VARIABLE error GET "${json1}" values ${member})
- if(error)
- message(SEND_ERROR "Unexpected error: ${error}")
- endif()
- list(APPEND members "${member}")
- list(APPEND values "${value}")
- endforeach()
- assert_strequal("${members}" "false;null;number;string;true")
- assert_strequal("${values}" "OFF;;5;foo;ON")
- # Test REMOVE
- set(json2 [=[{
- "foo" : "bar",
- "array" : [5, "val", {"some": "other"}, null]
- }]=])
- string(JSON result ERROR_VARIABLE error REMOVE ${json2} foo)
- assert_json_equal("${error}" "${result}"
- [=[{
- "array" : [5, "val", {"some": "other"}, null]
- }]=])
- string(JSON result ERROR_VARIABLE error REMOVE ${json2} array 1)
- assert_json_equal("${error}" "${result}"
- [=[{
- "foo" : "bar",
- "array" : [5, {"some": "other"}, null]
- }]=])
- string(JSON result ERROR_VARIABLE error REMOVE ${json2} array 100)
- assert_strequal("${result}" "array-100-NOTFOUND")
- assert_strequal("${error}" "expected an index less then 4 got '100'")
- # Test SET
- string(JSON result ERROR_VARIABLE error SET ${json2} new 5)
- assert_json_equal("${error}" "${result}"
- [=[{
- "foo" : "bar",
- "array" : [5, "val", {"some": "other"}, null],
- "new" : 5
- }]=])
- string(JSON result ERROR_VARIABLE error SET ${json2} new [=[ {"obj" : false} ]=])
- assert_json_equal("${error}" "${result}"
- [=[{
- "foo" : "bar",
- "array" : [5, "val", {"some": "other"}, null],
- "new" : {"obj" : false}
- }]=])
- string(JSON result ERROR_VARIABLE error SET ${json2} array 0 6)
- assert_json_equal("${error}" "${result}"
- [=[{
- "foo" : "bar",
- "array" : [6, "val", {"some": "other"}, null]
- }]=])
- string(JSON result ERROR_VARIABLE error SET ${json2} array 5 [["append"]])
- assert_json_equal("${error}" "${result}"
- [=[{
- "foo" : "bar",
- "array" : [5, "val", {"some": "other"}, null, "append"]
- }]=])
- string(JSON result ERROR_VARIABLE error SET ${json2} array 100 [["append"]])
- assert_json_equal("${error}" "${result}"
- [=[{
- "foo" : "bar",
- "array" : [5, "val", {"some": "other"}, null, "append"]
- }]=])
|