aboutsummaryrefslogtreecommitdiff
path: root/test/configdata.cpp
blob: 10f528f776c4ffb98d4c2e3ef61d368d18659bf5 (plain) (blame)
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include "3rd-party/catch.hpp"

#include "configdata.h"

using namespace newsboat;

TEST_CASE("set_value() doesn't return errors if new value is aligned "
	"with the setting's type",
	"[ConfigData]")
{
	SECTION("boolean") {
		ConfigData setting("yes", ConfigDataType::BOOL);

		REQUIRE(setting.set_value("no"));
		REQUIRE(setting.set_value("yes"));
		REQUIRE(setting.set_value("true"));
		REQUIRE(setting.set_value("false"));
	}

	SECTION("unsigned integer") {
		ConfigData setting("42", ConfigDataType::INT);

		REQUIRE(setting.set_value("13"));
		REQUIRE(setting.set_value("100500"));
		REQUIRE(setting.set_value("65535"));
	}

	SECTION("enum") {
		ConfigData setting("charlie", {"alpha", "bravo", "charlie", "delta"});

		REQUIRE(setting.set_value("alpha"));
		REQUIRE(setting.set_value("bravo"));
		REQUIRE(setting.set_value("charlie"));
		REQUIRE(setting.set_value("delta"));
	}

	SECTION("string") {
		ConfigData setting("johndoe", ConfigDataType::STR);

		REQUIRE(setting.set_value("minoru"));
		REQUIRE(setting.set_value("noname"));
		REQUIRE(setting.set_value("username"));
		REQUIRE(setting.set_value("nobody"));
	}

	SECTION("path") {
		ConfigData setting("~/urls", ConfigDataType::PATH);

		REQUIRE(setting.set_value("/tmp/whatever.txt"));
		REQUIRE(setting.set_value("C:\\Users\\Minoru\\urls.txt"));
		REQUIRE(setting.set_value("/usr/local/home/minoru/.newsboat/urls"));
	}
}

TEST_CASE("set_value() returns error if new value for a boolean setting is not "
	"a recognized boolean",
	"[ConfigData]")
{
	ConfigData setting("yes", ConfigDataType::BOOL);

	REQUIRE_FALSE(setting.set_value("enable"));
	REQUIRE_FALSE(setting.set_value("disabled"));
	REQUIRE_FALSE(setting.set_value("active"));
}

TEST_CASE("set_value() returns error if new value for a \"number\" setting "
	"is not a sequence of digits",
	"[ConfigData]")
{
	ConfigData setting("yes", ConfigDataType::INT);

	REQUIRE_FALSE(setting.set_value("0x42"));
	REQUIRE_FALSE(setting.set_value("infinity"));
	REQUIRE_FALSE(setting.set_value("123 minutes"));
}

TEST_CASE("set_value() returns error if new value for an \"enum\" setting "
	"does not belong to the enum",
	"[ConfigData]")
{
	ConfigData setting("N", {"H", "He", "Li", "Be", "B", "C", "N", "O", "F"});

	REQUIRE_FALSE(setting.set_value("Mg"));
	REQUIRE_FALSE(setting.set_value("Al"));
	REQUIRE_FALSE(setting.set_value("something entirely different"));
}