You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
343 lines
11 KiB
343 lines
11 KiB
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"]
|
|
}]=])
|