// // VarTest.h // // $Id: //poco/svn/Foundation/testsuite/src/VarTest.h#2 $ // // Tests for Any types // // Copyright (c) 2006, Applied Informatics Software Engineering GmbH. // and Contributors. // // SPDX-License-Identifier: BSL-1.0 // #ifndef VarTest_INCLUDED #define VarTest_INCLUDED #include "Poco/Foundation.h" #include "Poco/Dynamic/Var.h" #include "Poco/Dynamic/VarIterator.h" #include "Poco/Exception.h" #include "CppUnit/TestCase.h" class VarTest: public CppUnit::TestCase { public: VarTest(const std::string& name); ~VarTest(); void testInt8(); void testInt16(); void testInt32(); void testInt64(); void testUInt8(); void testUInt16(); void testUInt32(); void testUInt64(); void testBool(); void testChar(); void testFloat(); void testDouble(); void testLong(); void testULong(); void testString(); void testUDT(); void testConversionOperator(); void testComparisonOperators(); void testArithmeticOperators(); void testLimitsInt(); void testLimitsFloat(); void testCtor(); void testIsStruct(); void testIsArray(); void testArrayIdxOperator(); void testDynamicPair(); void testDynamicStructBasics(); void testDynamicStructString(); void testDynamicStructInt(); void testArrayToString(); void testArrayToStringEscape(); void testStructToString(); void testStructToStringEscape(); void testArrayOfStructsToString(); void testStructWithArraysToString(); void testJSONDeserializeString(); void testJSONDeserializePrimitives(); void testJSONDeserializeArray(); void testJSONDeserializeStruct(); void testJSONDeserializeComplex(); void testDate(); void testEmpty(); void testIterator(); void setUp(); void tearDown(); static CppUnit::Test* suite(); private: void testGetIdxMustThrow(Poco::Dynamic::Var& a1, std::vector::size_type n); void testGetIdxNoThrow(Poco::Dynamic::Var& a1, std::vector::size_type n); template void testGetIdx(const Poco::Dynamic::Var& a1, std::vector::size_type n, const T& expectedResult) { Poco::Dynamic::Var val1 = a1[n]; assert (val1 == expectedResult); const Poco::Dynamic::Var c1 = a1; assert (a1 == c1); // silence the compiler const Poco::Dynamic::Var cval1 = a1[n]; assert (cval1 == expectedResult); } template void testLimitsSigned() { TL iMin = std::numeric_limits::min(); Poco::Dynamic::Var da = iMin - 1; try { TS i; i = da.convert(); fail("must fail"); } catch (Poco::RangeException&) {} TL iMax = std::numeric_limits::max(); da = iMax + 1; try { TS i; i = da.convert(); fail("must fail"); } catch (Poco::RangeException&) {} } template void testLimitsFloatToInt() { Poco::Dynamic::Var da; if (std::numeric_limits::is_signed) { TL iMin = static_cast(std::numeric_limits::min()); da = iMin * 10; try { TS i; i = da.convert(); fail("must fail"); } catch (Poco::RangeException&) {} } TL iMax = static_cast(std::numeric_limits::max()); da = iMax * 10; try { TS i; i = da.convert(); fail("must fail"); } catch (Poco::RangeException&) {} } template void testLimitsSignedUnsigned() { assert (std::numeric_limits::is_signed); assert (!std::numeric_limits::is_signed); TS iMin = std::numeric_limits::min(); Poco::Dynamic::Var da = iMin; try { TU i; i = da.convert(); fail("must fail"); } catch (Poco::RangeException&) {} } template void testLimitsUnsigned() { TL iMax = std::numeric_limits::max(); Poco::Dynamic::Var da = iMax + 1; try { TS i; i = da.convert(); fail("must fail"); } catch (Poco::RangeException&) {} } template void testEmptyComparisons() { Poco::Dynamic::Var da; T val = 0; assert (da != val); assert (val != da); assert (!(val == da)); assert (!(da == val)); assert (!(da < val)); assert (!(val < da)); assert (!(da > val)); assert (!(val > da)); assert (!(da <= val)); assert (!(val <= da)); assert (!(da >= val)); assert (!(val >= da)); } template void testContainerIterator() { C cont; cont.push_back(1); cont.push_back("2"); cont.push_back(3.5); Poco::Dynamic::Var arr(cont); assert (arr.size() == 3); Poco::Dynamic::Var::Iterator it = arr.begin(); Poco::Dynamic::Var::Iterator end = arr.end(); int counter = 0; for (; it != end; ++it) { switch (++counter) { case 1: assert (*it == 1); break; case 2: assert (*it == 2); break; case 3: assert (*it == 3.5); break; default: fail ("must fail - wrong size"); } } } }; #endif // VarTest_INCLUDED