https://gitlab.opengeosys.org/ogs/ogs.git
Raw File
Tip revision: 2df40fa689a9b54b601f4f962ecd3aae78c09eab authored by Christoph Lehmann on 12 October 2023, 08:20:46 UTC
Merge branch 'vtkdiff-field-data' into 'master'
Tip revision: 2df40fa
TestSplitMaterialIdString.cpp
/**
 * \file
 * \copyright
 * Copyright (c) 2012-2023, OpenGeoSys Community (http://www.opengeosys.org)
 *            Distributed under a Modified BSD License.
 *              See accompanying file LICENSE.txt or
 *              http://www.opengeosys.org/project/license
 *
 */

#include <gmock/gmock.h>
#include <gtest/gtest.h>

#include <algorithm>

#include "BaseLib/StringTools.h"

using namespace BaseLib;

TEST(BaseLib_SplitIntegerList, EmptyList)
{
    ASSERT_TRUE(splitMaterialIdString("").empty());
}

TEST(BaseLib_SplitIntegerList, SingleInt)
{
    using namespace testing;

    EXPECT_THAT(splitMaterialIdString("5"), ContainerEq(std::vector<int>{5}));

    // leading whitespace
    EXPECT_THAT(splitMaterialIdString("  16"),
                ContainerEq(std::vector<int>{16}));

    // trailing whitespace
    EXPECT_THAT(splitMaterialIdString("23    "),
                ContainerEq(std::vector<int>{23}));

    // negative numbers are OK
    EXPECT_THAT(splitMaterialIdString("-20"),
                ContainerEq(std::vector<int>{-20}));
}

TEST(BaseLib_SplitIntegerList, SingleIntFail)
{
    // wrong character prefix/suffix
    EXPECT_THROW(splitMaterialIdString("x"), std::runtime_error);
    EXPECT_THROW(splitMaterialIdString(".5"), std::runtime_error);
    EXPECT_THROW(splitMaterialIdString("5?"), std::runtime_error);
    EXPECT_THROW(splitMaterialIdString("7 !"), std::runtime_error);
    EXPECT_THROW(splitMaterialIdString("8   u"), std::runtime_error);

    // hexadecimal numbers are not accepted
    EXPECT_THROW(splitMaterialIdString("0xfa"), std::runtime_error);

    // another integer is not accepted
    EXPECT_THROW(splitMaterialIdString("1 2"), std::runtime_error);

    // range exceeeded
    EXPECT_THROW(
        splitMaterialIdString("1234567890123456789012345678901234567890"),
        std::runtime_error);
}

TEST(BaseLib_SplitIntegerList, IntList)
{
    using namespace testing;

    EXPECT_THAT(splitMaterialIdString("5,6,7"),
                ContainerEq(std::vector<int>{5, 6, 7}));

    // whitespace around comma
    EXPECT_THAT(splitMaterialIdString("9  ,10,  11,12   ,   13"),
                ContainerEq(std::vector<int>{9, 10, 11, 12, 13}));

    // trailing comma is ignored
    EXPECT_THAT(splitMaterialIdString("20, 22, 24,"),
                ContainerEq(std::vector<int>{20, 22, 24}));
}

TEST(BaseLib_SplitIntegerList, IntListFail)
{
    // only delimiter
    EXPECT_THROW(BaseLib::splitMaterialIdString(","), std::runtime_error);

    // empty element
    EXPECT_THROW(BaseLib::splitMaterialIdString("5,,6"), std::runtime_error);

    // leading comma
    EXPECT_THROW(BaseLib::splitMaterialIdString(",40"), std::runtime_error);

    // missing comma
    EXPECT_THROW(BaseLib::splitMaterialIdString("12   20"), std::runtime_error);

    // wrong number in the list
    EXPECT_THROW(BaseLib::splitMaterialIdString("1,2,x,5"), std::runtime_error);
}
back to top