1
0
Fork 0
arangodb/UnitTests/Basics/json-utilities-test.cpp

225 lines
9.5 KiB
C++

////////////////////////////////////////////////////////////////////////////////
/// @brief test suite for json-utilities.c
///
/// @file
///
/// DISCLAIMER
///
/// Copyright 2012 triagens GmbH, Cologne, Germany
///
/// Licensed under the Apache License, Version 2.0 (the "License");
/// you may not use this file except in compliance with the License.
/// You may obtain a copy of the License at
///
/// http://www.apache.org/licenses/LICENSE-2.0
///
/// Unless required by applicable law or agreed to in writing, software
/// distributed under the License is distributed on an "AS IS" BASIS,
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
/// See the License for the specific language governing permissions and
/// limitations under the License.
///
/// Copyright holder is triAGENS GmbH, Cologne, Germany
///
/// @author Jan Steemann
/// @author Copyright 2012, triAGENS GmbH, Cologne, Germany
////////////////////////////////////////////////////////////////////////////////
#include "Basics/Common.h"
#define BOOST_TEST_INCLUDED
#include <boost/test/unit_test.hpp>
#include "Basics/json-utilities.h"
#include "Basics/StringBuffer.h"
#include "Basics/VelocyPackHelper.h"
#include "Basics/Utf8Helper.h"
#if _WIN32
#include "Basics/win-utils.h"
#define FIX_ICU_ENV TRI_FixIcuDataEnv()
#else
#define FIX_ICU_ENV
#endif
static bool Initialized = false;
// -----------------------------------------------------------------------------
// --SECTION-- private macros
// -----------------------------------------------------------------------------
#define JSON_CHECK(expected, func, lValue, rValue) \
l = TRI_JsonString(TRI_UNKNOWN_MEM_ZONE, lValue); \
r = TRI_JsonString(TRI_UNKNOWN_MEM_ZONE, rValue); \
if (l && r) { \
BOOST_CHECK_EQUAL(expected, func(l, r)); \
TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, l); \
TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, r); \
}
#define INIT_BUFFER TRI_string_buffer_t* sb = TRI_CreateStringBuffer(TRI_UNKNOWN_MEM_ZONE);
#define FREE_BUFFER TRI_FreeStringBuffer(TRI_UNKNOWN_MEM_ZONE, sb);
#define STRINGIFY TRI_StringifyJson(sb, json);
#define STRING_VALUE sb->_buffer
#define FREE_JSON TRI_FreeJson(TRI_UNKNOWN_MEM_ZONE, json);
// -----------------------------------------------------------------------------
// --SECTION-- setup / tear-down
// -----------------------------------------------------------------------------
struct CJsonUtilitiesSetup {
CJsonUtilitiesSetup () {
FIX_ICU_ENV;
if (!arangodb::basics::Utf8Helper::DefaultUtf8Helper.setCollatorLanguage("")) {
std::string msg =
"cannot initialize ICU; please make sure ICU*dat is available; "
"the variable ICU_DATA='";
if (getenv("ICU_DATA") != nullptr) {
msg += getenv("ICU_DATA");
}
msg += "' should point the directory containing the ICU*dat file.";
BOOST_TEST_MESSAGE(msg);
BOOST_CHECK_EQUAL(false, true);
}
BOOST_TEST_MESSAGE("setup json utilities test");
if (!Initialized) {
Initialized = true;
arangodb::basics::VelocyPackHelper::initialize();
}
}
~CJsonUtilitiesSetup () {
BOOST_TEST_MESSAGE("tear-down json utilities test");
}
};
// -----------------------------------------------------------------------------
// --SECTION-- test suite
// -----------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
/// @brief setup
////////////////////////////////////////////////////////////////////////////////
BOOST_FIXTURE_TEST_SUITE(CJsonUtilitiesTest, CJsonUtilitiesSetup)
////////////////////////////////////////////////////////////////////////////////
/// @brief test compare values with equal values
////////////////////////////////////////////////////////////////////////////////
BOOST_AUTO_TEST_CASE (tst_compare_values_equal) {
TRI_json_t* l;
TRI_json_t* r;
// With Utf8-mode:
JSON_CHECK(0, TRI_CompareValuesJson, "null", "null");
JSON_CHECK(0, TRI_CompareValuesJson, "false", "false");
JSON_CHECK(0, TRI_CompareValuesJson, "true", "true");
JSON_CHECK(0, TRI_CompareValuesJson, "0", "0");
JSON_CHECK(0, TRI_CompareValuesJson, "1", "1");
JSON_CHECK(0, TRI_CompareValuesJson, "1.5", "1.5");
JSON_CHECK(0, TRI_CompareValuesJson, "-43.2", "-43.2");
JSON_CHECK(0, TRI_CompareValuesJson, "\"\"", "\"\"");
JSON_CHECK(0, TRI_CompareValuesJson, "\" \"", "\" \"");
JSON_CHECK(0, TRI_CompareValuesJson, "\"the quick brown fox\"", "\"the quick brown fox\"");
JSON_CHECK(0, TRI_CompareValuesJson, "[]", "[]");
JSON_CHECK(0, TRI_CompareValuesJson, "[-1]", "[-1]");
JSON_CHECK(0, TRI_CompareValuesJson, "[0]", "[0]");
JSON_CHECK(0, TRI_CompareValuesJson, "[1]", "[1]");
JSON_CHECK(0, TRI_CompareValuesJson, "[true]", "[true]");
JSON_CHECK(0, TRI_CompareValuesJson, "{}", "{}");
}
////////////////////////////////////////////////////////////////////////////////
/// @brief test compare values with unequal values
////////////////////////////////////////////////////////////////////////////////
BOOST_AUTO_TEST_CASE (tst_compare_values_unequal) {
TRI_json_t* l;
TRI_json_t* r;
JSON_CHECK(-1, TRI_CompareValuesJson, "null", "false");
JSON_CHECK(-1, TRI_CompareValuesJson, "null", "true");
JSON_CHECK(-1, TRI_CompareValuesJson, "null", "-1");
JSON_CHECK(-1, TRI_CompareValuesJson, "null", "0");
JSON_CHECK(-1, TRI_CompareValuesJson, "null", "1");
JSON_CHECK(-1, TRI_CompareValuesJson, "null", "-10");
JSON_CHECK(-1, TRI_CompareValuesJson, "null", "\"\"");
JSON_CHECK(-1, TRI_CompareValuesJson, "null", "\"0\"");
JSON_CHECK(-1, TRI_CompareValuesJson, "null", "\" \"");
JSON_CHECK(-1, TRI_CompareValuesJson, "null", "[]");
JSON_CHECK(-1, TRI_CompareValuesJson, "null", "[null]");
JSON_CHECK(-1, TRI_CompareValuesJson, "null", "[false]");
JSON_CHECK(-1, TRI_CompareValuesJson, "null", "[true]");
JSON_CHECK(-1, TRI_CompareValuesJson, "null", "[0]");
JSON_CHECK(-1, TRI_CompareValuesJson, "null", "{}");
JSON_CHECK(-1, TRI_CompareValuesJson, "false", "true");
JSON_CHECK(-1, TRI_CompareValuesJson, "false", "-1");
JSON_CHECK(-1, TRI_CompareValuesJson, "false", "0");
JSON_CHECK(-1, TRI_CompareValuesJson, "false", "1");
JSON_CHECK(-1, TRI_CompareValuesJson, "false", "-10");
JSON_CHECK(-1, TRI_CompareValuesJson, "false", "\"\"");
JSON_CHECK(-1, TRI_CompareValuesJson, "false", "\"0\"");
JSON_CHECK(-1, TRI_CompareValuesJson, "false", "\" \"");
JSON_CHECK(-1, TRI_CompareValuesJson, "false", "[]");
JSON_CHECK(-1, TRI_CompareValuesJson, "false", "[null]");
JSON_CHECK(-1, TRI_CompareValuesJson, "false", "[false]");
JSON_CHECK(-1, TRI_CompareValuesJson, "false", "[true]");
JSON_CHECK(-1, TRI_CompareValuesJson, "false", "[0]");
JSON_CHECK(-1, TRI_CompareValuesJson, "false", "{}");
JSON_CHECK(-1, TRI_CompareValuesJson, "true", "-1");
JSON_CHECK(-1, TRI_CompareValuesJson, "true", "0");
JSON_CHECK(-1, TRI_CompareValuesJson, "true", "1");
JSON_CHECK(-1, TRI_CompareValuesJson, "true", "-10");
JSON_CHECK(-1, TRI_CompareValuesJson, "true", "\"\"");
JSON_CHECK(-1, TRI_CompareValuesJson, "true", "\"0\"");
JSON_CHECK(-1, TRI_CompareValuesJson, "true", "\" \"");
JSON_CHECK(-1, TRI_CompareValuesJson, "true", "[]");
JSON_CHECK(-1, TRI_CompareValuesJson, "true", "[null]");
JSON_CHECK(-1, TRI_CompareValuesJson, "true", "[false]");
JSON_CHECK(-1, TRI_CompareValuesJson, "true", "[true]");
JSON_CHECK(-1, TRI_CompareValuesJson, "true", "[0]");
JSON_CHECK(-1, TRI_CompareValuesJson, "true", "{}");
JSON_CHECK(-1, TRI_CompareValuesJson, "-2", "-1");
JSON_CHECK(-1, TRI_CompareValuesJson, "-10", "-9");
JSON_CHECK(-1, TRI_CompareValuesJson, "-20", "-5");
JSON_CHECK(-1, TRI_CompareValuesJson, "-5", "-2");
JSON_CHECK(-1, TRI_CompareValuesJson, "true", "1");
JSON_CHECK(-1, TRI_CompareValuesJson, "1.5", "1.6");
JSON_CHECK(-1, TRI_CompareValuesJson, "10.5", "10.51");
JSON_CHECK(-1, TRI_CompareValuesJson, "0", "\"\"");
JSON_CHECK(-1, TRI_CompareValuesJson, "0", "\"0\"");
JSON_CHECK(-1, TRI_CompareValuesJson, "0", "\"-1\"");
JSON_CHECK(-1, TRI_CompareValuesJson, "1", "\"-1\"");
JSON_CHECK(-1, TRI_CompareValuesJson, "1", "\" \"");
JSON_CHECK(-1, TRI_CompareValuesJson, "0", "[]");
JSON_CHECK(-1, TRI_CompareValuesJson, "0", "[-1]");
JSON_CHECK(-1, TRI_CompareValuesJson, "0", "[0]");
JSON_CHECK(-1, TRI_CompareValuesJson, "0", "[1]");
JSON_CHECK(-1, TRI_CompareValuesJson, "0", "[null]");
JSON_CHECK(-1, TRI_CompareValuesJson, "0", "[false]");
JSON_CHECK(-1, TRI_CompareValuesJson, "0", "[true]");
JSON_CHECK(-1, TRI_CompareValuesJson, "0", "{}");
JSON_CHECK(-1, TRI_CompareValuesJson, "1", "[]");
JSON_CHECK(-1, TRI_CompareValuesJson, "1", "[-1]");
JSON_CHECK(-1, TRI_CompareValuesJson, "1", "[0]");
JSON_CHECK(-1, TRI_CompareValuesJson, "1", "[1]");
JSON_CHECK(-1, TRI_CompareValuesJson, "1", "[null]");
JSON_CHECK(-1, TRI_CompareValuesJson, "1", "[false]");
JSON_CHECK(-1, TRI_CompareValuesJson, "1", "[true]");
JSON_CHECK(-1, TRI_CompareValuesJson, "1", "{}");
}
////////////////////////////////////////////////////////////////////////////////
/// @brief generate tests
////////////////////////////////////////////////////////////////////////////////
BOOST_AUTO_TEST_SUITE_END ()
// Local Variables:
// mode: outline-minor
// outline-regexp: "^\\(/// @brief\\|/// {@inheritDoc}\\|/// @addtogroup\\|// --SECTION--\\|/// @\\}\\)"
// End: