Blame unitTests/test_TimeValue.cpp

Packit 01d647
#include "value.hpp"
Packit 01d647
Packit 01d647
#include "gtestwrapper.h"
Packit 01d647
Packit 01d647
using namespace Exiv2;
Packit 01d647
Packit 01d647
TEST(ATimeValue, isDefaultConstructed)
Packit 01d647
{
Packit 01d647
    const TimeValue value;
Packit 01d647
    ASSERT_EQ(0, value.getTime().hour);
Packit 01d647
    ASSERT_EQ(0, value.getTime().minute);
Packit 01d647
    ASSERT_EQ(0, value.getTime().second);
Packit 01d647
    ASSERT_EQ(0, value.getTime().tzHour);
Packit 01d647
    ASSERT_EQ(0, value.getTime().tzMinute);
Packit 01d647
}
Packit 01d647
Packit 01d647
TEST(ATimeValue, isConstructedWithArgs)
Packit 01d647
{
Packit 01d647
    const TimeValue value (23, 55, 2);
Packit 01d647
    ASSERT_EQ(23, value.getTime().hour);
Packit 01d647
    ASSERT_EQ(55, value.getTime().minute);
Packit 01d647
    ASSERT_EQ(2,  value.getTime().second);
Packit 01d647
    ASSERT_EQ(0, value.getTime().tzHour);
Packit 01d647
    ASSERT_EQ(0, value.getTime().tzMinute);
Packit 01d647
}
Packit 01d647
Packit 01d647
/// \todo add tests to check what happen with values out of valid ranges
Packit 01d647
Packit 01d647
TEST(ATimeValue, canBeReadFromStringHMS)
Packit 01d647
{
Packit 01d647
    TimeValue value;
Packit 01d647
    const std::string hms("23:55:02");
Packit 01d647
    ASSERT_EQ(0, value.read(hms));
Packit 01d647
    ASSERT_EQ(23, value.getTime().hour);
Packit 01d647
    ASSERT_EQ(55, value.getTime().minute);
Packit 01d647
    ASSERT_EQ(2,  value.getTime().second);
Packit 01d647
    ASSERT_EQ(0, value.getTime().tzHour);
Packit 01d647
    ASSERT_EQ(0, value.getTime().tzMinute);
Packit 01d647
}
Packit 01d647
Packit 01d647
TEST(ATimeValue, canBeReadFromWideString)
Packit 01d647
{
Packit 01d647
    TimeValue value;
Packit 01d647
    const std::string hms("23:55:02+04:04");
Packit 01d647
    ASSERT_EQ(0, value.read(hms));
Packit 01d647
    ASSERT_EQ(23, value.getTime().hour);
Packit 01d647
    ASSERT_EQ(55, value.getTime().minute);
Packit 01d647
    ASSERT_EQ(2,  value.getTime().second);
Packit 01d647
    ASSERT_EQ(4, value.getTime().tzHour);
Packit 01d647
    ASSERT_EQ(4, value.getTime().tzMinute);
Packit 01d647
}
Packit 01d647
Packit 01d647
TEST(ATimeValue, canBeReadFromWideStringNegative)
Packit 01d647
{
Packit 01d647
    TimeValue value;
Packit 01d647
    const std::string hms("23:55:02-04:04");
Packit 01d647
    ASSERT_EQ(0, value.read(hms));
Packit 01d647
    ASSERT_EQ(23, value.getTime().hour);
Packit 01d647
    ASSERT_EQ(55, value.getTime().minute);
Packit 01d647
    ASSERT_EQ(2,  value.getTime().second);
Packit 01d647
    ASSERT_EQ(-4, value.getTime().tzHour);
Packit 01d647
    ASSERT_EQ(-4, value.getTime().tzMinute);
Packit 01d647
}
Packit 01d647
Packit 01d647
/// \todo check what we should do here.
Packit 01d647
TEST(ATimeValue, canBeReadFromWideStringOther)
Packit 01d647
{
Packit 01d647
    TimeValue value;
Packit 01d647
    const std::string hms("23:55:02?04:04");
Packit 01d647
    ASSERT_EQ(0, value.read(hms));
Packit 01d647
    ASSERT_EQ(23, value.getTime().hour);
Packit 01d647
    ASSERT_EQ(55, value.getTime().minute);
Packit 01d647
    ASSERT_EQ(2,  value.getTime().second);
Packit 01d647
    ASSERT_EQ(4, value.getTime().tzHour);
Packit 01d647
    ASSERT_EQ(4, value.getTime().tzMinute);
Packit 01d647
}
Packit 01d647
Packit 01d647
TEST(ATimeValue, cannotReadFromStringWithBadFormat)
Packit 01d647
{
Packit 01d647
    TimeValue value;
Packit 01d647
    ASSERT_EQ(1, value.read("aa:55:02")); // String with non-digit chars
Packit 01d647
    ASSERT_EQ(1, value.read("25:55:02")); // Hours >= 24
Packit 01d647
    ASSERT_EQ(1, value.read("23:65:02")); // Minutes >= 60
Packit 01d647
    ASSERT_EQ(1, value.read("23:55:62")); // Seconds >= 60
Packit 01d647
    ASSERT_EQ(1, value.read("23:55:02+25:04")); // tzHour >= 24
Packit 01d647
    ASSERT_EQ(1, value.read("23:55:02+04:66")); // tzMinutes >= 60
Packit 01d647
Packit 01d647
    /// \todo This one does not fail
Packit 01d647
    //ASSERT_EQ(1, value.read("23:55:02+04:06:06")); // More components than expected
Packit 01d647
}
Packit 01d647
Packit 01d647
TEST(ATimeValue, isCopiedToBuffer)
Packit 01d647
{
Packit 01d647
    const TimeValue value (23, 55, 2);
Packit 01d647
    byte buffer[11];
Packit 01d647
    ASSERT_EQ(11, value.copy(buffer));
Packit 01d647
Packit 01d647
    const byte expectedDate[11] = {'2', '3', '5', '5', '0', '2',
Packit 01d647
                                   '+', '0', '0', '0', '0'};
Packit 01d647
    for (int i = 0; i < 11; ++i) {
Packit 01d647
        ASSERT_EQ(expectedDate[i], buffer[i]) << "i: " << i;
Packit 01d647
    }
Packit 01d647
}