/*
Ousía
Copyright (C) 2014, 2015 Benjamin Paaßen, Andreas Stöckel
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
#include
#include
#include
#include
#include
#include
namespace ousia {
static void assertBoolConversion(Variant conv, Variant expected,
bool expectedSuccess,
VariantConverter::Mode mode, Logger &logger)
{
EXPECT_EQ(expectedSuccess, VariantConverter::toBool(conv, logger, mode));
if (expectedSuccess) {
EXPECT_EQ(expected, conv);
}
}
TEST(VariantConverter, toBool)
{
// setup
Logger logger;
Variant b = true;
Variant i = 0;
Variant d = 2.3;
Variant s = "test";
Variant A = Variant::arrayType{b, i, d, s};
Variant M = Variant::mapType{{"b", b}, {"i", i}, {"d", d}, {"s", s}};
Variant::cardinalityType card;
card.merge({2, 5});
Variant C = card;
// in safe mode only bool to bool conversion should be possible.
assertBoolConversion(b, b, true, VariantConverter::Mode::SAFE, logger);
assertBoolConversion(i, nullptr, false, VariantConverter::Mode::SAFE,
logger);
assertBoolConversion(d, nullptr, false, VariantConverter::Mode::SAFE,
logger);
assertBoolConversion(s, nullptr, false, VariantConverter::Mode::SAFE,
logger);
assertBoolConversion(A, nullptr, false, VariantConverter::Mode::SAFE,
logger);
assertBoolConversion(M, nullptr, false, VariantConverter::Mode::SAFE,
logger);
assertBoolConversion(C, nullptr, false, VariantConverter::Mode::SAFE,
logger);
// in all mode more should be possible.
assertBoolConversion(b, b, true, VariantConverter::Mode::ALL, logger);
assertBoolConversion(i, false, true, VariantConverter::Mode::ALL, logger);
assertBoolConversion(d, true, true, VariantConverter::Mode::ALL, logger);
// it may be counter-intuitive at first, but everything else gets just
// converted to true.
assertBoolConversion(s, true, true, VariantConverter::Mode::ALL, logger);
assertBoolConversion(A, true, true, VariantConverter::Mode::ALL, logger);
assertBoolConversion(M, true, true, VariantConverter::Mode::ALL, logger);
assertBoolConversion(C, true, true, VariantConverter::Mode::ALL, logger);
}
static void assertIntConversion(Variant conv, Variant expected,
bool expectedSuccess,
VariantConverter::Mode mode, Logger &logger)
{
EXPECT_EQ(expectedSuccess, VariantConverter::toInt(conv, logger, mode));
if (expectedSuccess) {
EXPECT_EQ(expected, conv);
}
}
TEST(VariantConverter, toInt)
{
// setup
Logger logger;
Variant b = true;
Variant i = 6;
Variant d = 2.7;
Variant s = "test";
Variant A = Variant::arrayType{i};
Variant M = Variant::mapType{{"b", b}, {"i", i}, {"d", d}, {"s", s}};
Variant::cardinalityType card;
card.merge({4});
Variant C = card;
// in safe mode only int to int conversion should be possible.
assertIntConversion(b, nullptr, false, VariantConverter::Mode::SAFE,
logger);
assertIntConversion(i, i, true, VariantConverter::Mode::SAFE, logger);
assertIntConversion(d, nullptr, false, VariantConverter::Mode::SAFE,
logger);
assertIntConversion(s, nullptr, false, VariantConverter::Mode::SAFE,
logger);
assertIntConversion(A, nullptr, false, VariantConverter::Mode::SAFE,
logger);
assertIntConversion(M, nullptr, false, VariantConverter::Mode::SAFE,
logger);
assertIntConversion(C, nullptr, false, VariantConverter::Mode::SAFE,
logger);
// in all mode more should be possible.
assertIntConversion(b, 1, true, VariantConverter::Mode::ALL, logger);
assertIntConversion(i, i, true, VariantConverter::Mode::ALL, logger);
assertIntConversion(d, 2, true, VariantConverter::Mode::ALL, logger);
assertIntConversion(s, nullptr, false, VariantConverter::Mode::ALL, logger);
assertIntConversion(A, i, true, VariantConverter::Mode::ALL, logger);
assertIntConversion(M, nullptr, false, VariantConverter::Mode::ALL, logger);
assertIntConversion(C, 4, true, VariantConverter::Mode::ALL, logger);
}
}