Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/Tests/VersionTest.cpp
blob: 3f2b4bcac137ca6c8a312fc68e8231584daf3719 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com>
// SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0

#include <Progmasoft/Catch3.hpp>

#include "Progmasoft/Tazelish/Version.hpp"

namespace tazelish = Progmasoft::Tazelish;

TEST_CASE("A release has four numbers without leading zeros", "[version]")
{
    const auto version = tazelish::ParseVersion("0.4.0.3");
    REQUIRE(version.has_value());
    CHECK(std::get<tazelish::Release>(*version)
          == tazelish::Release{ 0, 4, 0, 3 });
    CHECK(tazelish::FormatVersion(*version) == "0.4.0.3");
    CHECK(tazelish::ParseVersion("12.19.9.9").has_value());

    for (const char *text : { "0.4.0",
                              "0.4.0.3.1",
                              "0.04.0.3",
                              "0.4..3",
                              ".0.4.0",
                              "0.4.0.",
                              "a.4.0.3",
                              "0.4.0.3 ",
                              "4294967296.0.0.0",
                              "" })
    {
        INFO(text);
        CHECK_FALSE(tazelish::ParseVersion(text).has_value());
    }
}

TEST_CASE("A channel names its newest build", "[version]")
{
    CHECK(std::get<tazelish::Newest>(*tazelish::ParseVersion("unstable"))
          == tazelish::Newest{ tazelish::Channel::kUnstable });
    CHECK(std::get<tazelish::Newest>(*tazelish::ParseVersion("nightly"))
          == tazelish::Newest{ tazelish::Channel::kNightly });
    CHECK_FALSE(tazelish::ParseVersion("Nightly").has_value());
    CHECK_FALSE(tazelish::ParseVersion("stable").has_value());
}

TEST_CASE("A dated build needs a day the calendar has", "[version]")
{
    const auto version = tazelish::ParseVersion("2026-11-05-nightly");
    REQUIRE(version.has_value());
    CHECK(std::get<tazelish::Dated>(*version)
          == tazelish::Dated{ 2026, 11, 5, tazelish::Channel::kNightly });
    CHECK(tazelish::FormatVersion(*version) == "2026-11-05-nightly");
    CHECK(tazelish::ParseVersion("2028-02-29-unstable").has_value());

    for (const char *text : { "2026-02-29-unstable",
                              "1900-02-29-nightly",
                              "2026-13-01-nightly",
                              "2026-00-10-nightly",
                              "2026-04-31-nightly",
                              "2026-11-5-nightly",
                              "2026-11-05",
                              "2026-11-05-",
                              "2026-11-05-stable",
                              "2026/11/05-nightly" })
    {
        INFO(text);
        CHECK_FALSE(tazelish::ParseVersion(text).has_value());
    }
}