Files
StorytellersBestFriend/sbf-cpp/Derangements_test.cpp

235 lines
12 KiB
C++

#include "Derangements.h"
#include "test.h"
#include <string>
#include <vector>
#include <tuple>
#include <sstream>
using namespace SBF;
using namespace Test;
using namespace std;
namespace Test::Derangements {
TestResults test_DerangementType_operator_extract();
TestResults test_DerangementType_operator_equal_to();
TestResults test_DerangementType_operator_not_equal_to();
TestResults test_GetDerangement();
TestResults test_FillDerangements();
} // End Test::Derangements
using namespace Test::Derangements;
TestResults main_test_Derangements(int argc, char** argv) {
TestResults results;
results += test_DerangementType_operator_extract();
results += test_DerangementType_operator_equal_to();
results += test_DerangementType_operator_not_equal_to();
results += test_GetDerangement();
results += test_FillDerangements();
return results;
}
namespace Test::Derangements {
TestResults test_GetDerangement() {
return execute_suite<DerangementType, int>(make_test_suite(
"SBF::GetDerangement",
GetDerangement,
vector<TestTuple<DerangementType, int>>({
make_test<DerangementType, int>(
"should get {0, "", "", 0} for invalid derangement id 0",
{0, "", "", 0},
make_tuple(0)),
make_test<DerangementType, int>(
"should get {kDerangementAmnesiaId, kDerangementAmnesiaLabel, kDerangementAmnesiaDescription, kDerangementAmnesiaTextColor} for derangement id 1",
kDerangementAmnesia,
make_tuple(1)),
make_test<DerangementType, int>(
"should get {kDerangementDelusionsOfGrandeurId, kDerangementDelusionsOfGrandeurLabel, kDerangementDelusionsOfGrandeurDescription, kDerangementDelusionsOfGrandeurTextColor} for derangement id 2",
kDerangementDelusionsOfGrandeur,
make_tuple(2)),
make_test<DerangementType, int>(
"should get {kDerangementFantasyId, kDerangementFantasyLabel, kDerangementFantasyDescription, kDerangementFantasyTextColor} for derangement id 3",
kDerangementFantasy,
make_tuple(3)),
make_test<DerangementType, int>(
"should get {kDerangementManicDepressionId, kDerangementManicDepressionLabel, kDerangementManicDepressionDescription, kDerangementManicDepressionTextColor} for derangement id 4",
kDerangementManicDepression,
make_tuple(4)),
make_test<DerangementType, int>(
"should get {kDerangementMultiplePersonalitiesId, kDerangementMultiplePersonalitiesLabel, kDerangementMultiplePersonalitiesDescription, kDerangementMultiplePersonalitiesTextColor} for derangement id 5",
kDerangementMultiplePersonalities,
make_tuple(5)),
make_test<DerangementType, int>(
"should get {kDerangementObsessionId, kDerangementObsessionLabel, kDerangementObsessionDescription, kDerangementObsessionTextColor} for derangement id 6",
kDerangementObsession,
make_tuple(6)),
make_test<DerangementType, int>(
"should get {kDerangementOvercompensationId, kDerangementOvercompensationLabel, kDerangementOvercompensationDescription, kDerangementOvercompensationTextColor} for derangement id 7",
kDerangementOvercompensation,
make_tuple(7)),
make_test<DerangementType, int>(
"should get {kDerangementParanoiaId, kDerangementParanoiaLabel, kDerangementParanoiaDescription, kDerangementParanoiaTextColor} for derangement id 8",
kDerangementParanoia,
make_tuple(8)),
make_test<DerangementType, int>(
"should get {kDerangementPerfectionId, kDerangementPerfectionLabel, kDerangementPerfectionDescription, kDerangementPerfectionTextColor} for derangement id 9",
kDerangementPerfection,
make_tuple(9)),
make_test<DerangementType, int>(
"should get {kDerangementRegressionId, kDerangementRegressionLabel, kDerangementRegressionDescription, kDerangementRegressionTextColor} for derangement id 10",
kDerangementRegression,
make_tuple(10)),
make_test<DerangementType, int>(
"should get {0, "", "", 0} for invalid derangement id 11",
{0, "", "", 0},
make_tuple(11)),
})
));
}
TestResults test_FillDerangements() {
auto fnToTest = []()->string {
ostringstream error_message;
vector<DerangementType> expected = {
kDerangementAmnesia,
kDerangementDelusionsOfGrandeur,
kDerangementFantasy,
kDerangementManicDepression,
kDerangementMultiplePersonalities,
kDerangementObsession,
kDerangementOvercompensation,
kDerangementParanoia,
kDerangementPerfection,
kDerangementRegression,
};
vector<DerangementType> actual = {
{-1, "This should be removed.", "This should be removed.", 255}
};
FillDerangements(actual);
compare(error_message, expected, actual);
string error = error_message.str();
if (error.size() > 0) {
return error;
}
return "no errors";
};
return execute_suite<string>(make_test_suite(
"SBF::FillDerangements",
fnToTest,
vector<TestTuple<string>>({
make_test<string>(
"should fill derangements",
"no errors",
make_tuple()),
})
));
}
TestResults test_DerangementType_operator_extract() {
return execute_suite<string, DerangementType>(make_test_suite(
"SBF::DerangementType::operator<<",
[](const DerangementType& derangement){
ostringstream os;
os << derangement;
return os.str();
},
vector<TestTuple<string, DerangementType>>({
make_test<string, DerangementType>(
"should print amnesia",
"Derangement: {id: 1, label: \"" + kDerangementAmnesiaLabel + "\", description: \"" + kDerangementAmnesiaDescription + "\", textColor: 4}",
make_tuple(kDerangementAmnesia)),
make_test<string, DerangementType>(
"should print delusions of grandeur",
"Derangement: {id: 2, label: \"" + kDerangementDelusionsOfGrandeurLabel + "\", description: \"" + kDerangementDelusionsOfGrandeurDescription + "\", textColor: 5}",
make_tuple(kDerangementDelusionsOfGrandeur)),
make_test<string, DerangementType>(
"should print fantasy",
"Derangement: {id: 3, label: \"" + kDerangementFantasyLabel + "\", description: \"" + kDerangementFantasyDescription + "\", textColor: 6}",
make_tuple(kDerangementFantasy)),
make_test<string, DerangementType>(
"should print manic depression",
"Derangement: {id: 4, label: \"" + kDerangementManicDepressionLabel + "\", description: \"" + kDerangementManicDepressionDescription + "\", textColor: 7}",
make_tuple(kDerangementManicDepression)),
make_test<string, DerangementType>(
"should print multiple personalities",
"Derangement: {id: 5, label: \"" + kDerangementMultiplePersonalitiesLabel + "\", description: \"" + kDerangementMultiplePersonalitiesDescription + "\", textColor: 1}",
make_tuple(kDerangementMultiplePersonalities)),
make_test<string, DerangementType>(
"should print obsession",
"Derangement: {id: 6, label: \"" + kDerangementObsessionLabel + "\", description: \"" + kDerangementObsessionDescription + "\", textColor: 10}",
make_tuple(kDerangementObsession)),
make_test<string, DerangementType>(
"should print overcompensation",
"Derangement: {id: 7, label: \"" + kDerangementOvercompensationLabel + "\", description: \"" + kDerangementOvercompensationDescription + "\", textColor: 11}",
make_tuple(kDerangementOvercompensation)),
make_test<string, DerangementType>(
"should print paranoia",
"Derangement: {id: 8, label: \"" + kDerangementParanoiaLabel + "\", description: \"" + kDerangementParanoiaDescription + "\", textColor: 12}",
make_tuple(kDerangementParanoia)),
make_test<string, DerangementType>(
"should print perfection",
"Derangement: {id: 9, label: \"" + kDerangementPerfectionLabel + "\", description: \"" + kDerangementPerfectionDescription + "\", textColor: 13}",
make_tuple(kDerangementPerfection)),
make_test<string, DerangementType>(
"should print regression",
"Derangement: {id: 10, label: \"" + kDerangementRegressionLabel + "\", description: \"" + kDerangementRegressionDescription + "\", textColor: 14}",
make_tuple(kDerangementRegression)),
make_test<string, DerangementType>(
"should print an unknown derangement",
"Derangement: {id: 0, label: \"MyLabel\", description: \"My Description\", textColor: 5}",
make_tuple((DerangementType){
0, "MyLabel", "My Description", 5})),
})
));
}
TestResults test_DerangementType_operator_equal_to() {
return execute_suite<bool, DerangementType, DerangementType>(
make_test_suite(
"SBF::DerangementType::operator==",
[](const DerangementType& left, const DerangementType& right) {
return left == right;
},
vector<TestTuple<bool, DerangementType, DerangementType>>({
make_test<bool, DerangementType, DerangementType>(
"should return true when comparing a derangement to itself",
true,
make_tuple(kDerangementDelusionsOfGrandeur, kDerangementDelusionsOfGrandeur)),
make_test<bool, DerangementType, DerangementType>(
"should return true when comparing two different instances created with the same values",
true,
make_tuple(kDerangementFantasy, DerangementType({kDerangementFantasyId, kDerangementFantasyLabel, kDerangementFantasyDescription, kDerangementFantasyTextColor}))),
make_test<bool, DerangementType, DerangementType>(
"should return false when comparing two different derangements",
false,
make_tuple(kDerangementManicDepression, kDerangementParanoia)),
})
));
}
TestResults test_DerangementType_operator_not_equal_to() {
return execute_suite<bool, DerangementType, DerangementType>(
make_test_suite(
"SBF::DerangementType::operator!=",
[](const DerangementType& left, const DerangementType& right) {
return left != right;
},
vector<TestTuple<bool, DerangementType, DerangementType>>({
make_test<bool, DerangementType, DerangementType>(
"should return false when comparing a derangement to itself",
false,
make_tuple(kDerangementDelusionsOfGrandeur, kDerangementDelusionsOfGrandeur)),
make_test<bool, DerangementType, DerangementType>(
"should return false when comparing two different instances created with the same values",
false,
make_tuple(kDerangementFantasy, DerangementType({kDerangementFantasyId, kDerangementFantasyLabel, kDerangementFantasyDescription, kDerangementFantasyTextColor}))),
make_test<bool, DerangementType, DerangementType>(
"should return true when comparing two different derangements",
true,
make_tuple(kDerangementManicDepression, kDerangementParanoia)),
})
));
}
} // End Test::Derangements