Sha256: b3bb5c64aba1ddff0866d1c1060ce6f6c8401ac7ff8b588852e1428b603aec60

Contents?: true

Size: 1.88 KB

Versions: 16

Compression:

Stored size: 1.88 KB

Contents

#include <catch.hpp>
#include <leatherman/util/strings.hpp>

using namespace std;
using namespace leatherman::util;

TEST_CASE("strings::plural", "[strings]") {
    SECTION("pluralize string based on a number") {
        REQUIRE(plural(1) == "");
        REQUIRE(plural(2) == "s");
        REQUIRE(plural(0) == "s");
    }

    SECTION("pluralize string based on a list") {
        vector<string> things { "thing1" };
        REQUIRE(plural(things) == "");
        things.push_back("thing2");
        REQUIRE(plural(things) == "s");
    }
}

TEST_CASE("strings::get_UUID", "[strings]") {
    SECTION("returns a unique value each time") {
        set<string> ids;
        ids.insert(get_UUID());
        for(int i = 0; i < 100; i++) {
            string new_id = get_UUID();
            REQUIRE(ids.find(new_id) == ids.end());
            ids.insert(new_id);
        }
    }
}

TEST_CASE("each_line", "[strings]") {

    SECTION("empty string never calls callback") {
        each_line("", [](string &line) {
            FAIL("should not be called");
            return true;
        });
    }

    SECTION("an action is performed on each line") {
        string s = "test1\ntest2\ntest3\n";
        int i = 0;
        each_line(s, [&i](string const &line) {
            i++;
            return line == ("test" + std::to_string(i));
        });
        REQUIRE(i == 3);
    }

    SECTION("a callback that returns false stops at the first line") {
        string s = "test1\ntest2\ntest3\n";
        vector<string> lines;
        each_line(s, [&](string& line) {
            lines.emplace_back(move(line));
            return false;
        });
        REQUIRE(lines.size() == 1u);
        REQUIRE(lines[0] == "test1");
    }

    SECTION("strips '\r' from line endings") {
        string s = "test\r\n";
        each_line(s, [](string& line) {
            REQUIRE(line == "test");
            return true;
        });
    }
}

Version data entries

16 entries across 16 versions & 2 rubygems

Version Path
facter-3.12.2.cfacter.20181217 ext/facter/leatherman/util/tests/strings_test.cc
facter-3.12.1.cfacter.20181031 ext/facter/leatherman/util/tests/strings_test.cc
facter-3.11.6.cfacter.20181031 ext/facter/leatherman/util/tests/strings_test.cc
facter-3.12.1.cfacter.20181023 ext/facter/leatherman/util/tests/strings_test.cc
facter-3.11.5.cfacter.20181022 ext/facter/leatherman/util/tests/strings_test.cc
facter-3.12.0.cfacter.20181004 ext/facter/leatherman/util/tests/strings_test.cc
facter-3.12.0.cfacter.20181001 ext/facter/leatherman/util/tests/strings_test.cc
facter-3.12.0.cfacter.20180918 ext/facter/leatherman/util/tests/strings_test.cc
facter-3.11.4.cfacter.20180821 ext/facter/leatherman/util/tests/strings_test.cc
facter-3.11.3.cfacter.20180716 ext/facter/leatherman/util/tests/strings_test.cc
facter-3.11.2.cfacter.20180612 ext/facter/leatherman/util/tests/strings_test.cc
facter-3.9.6.cfacter.20180612 ext/facter/leatherman/util/tests/strings_test.cc
facter-3.11.2.cfacter.20180606 ext/facter/leatherman/util/tests/strings_test.cc
facter-3.9.6.cfacter.20180606 ext/facter/leatherman/util/tests/strings_test.cc
facter-3.11.0.cfacter.20180319 ext/facter/leatherman/util/tests/strings_test.cc
cfacter-3.11.0.rc.20180314 ext/facter/leatherman/util/tests/strings_test.cc