// // io_test.cxx // dice-td // // Created by Sam Jaffe on 1/16/21. // Copyright © 2021 Sam Jaffe. All rights reserved. // #include #include "xcode_gtest_helper.h" #include "dice-roll/die.h" #include "dice-roll/roll.h" using testing::Eq; TEST(DiceIOTest, StringFormIsExplicit) { std::stringstream ss; ss << dice::from_string("2{2d6-d4+5}"); EXPECT_THAT(ss.str(), Eq("2{2d6-1d4+5}")); } TEST(DiceIOTest, AllModifiersComeAtTheEnd) { std::stringstream ss; ss << dice::from_string("2d6-4-1d6+5"); EXPECT_THAT(ss.str(), Eq("2d6-1d6-4+5")); } TEST(DiceIOTest, StringFormDoesNotPreserveWhitespace) { std::stringstream ss; ss << dice::from_string("2 { d 4 + 5 }"); EXPECT_THAT(ss.str(), Eq("2{1d4+5}")); } TEST(DiceIOTest, CanReadDirectlyFromStream) { std::stringstream in("2d6-4-1d6+5"), out; dice::dice d; in >> d; out << d; EXPECT_THAT(out.str(), Eq("2d6-1d6-4+5")); } TEST(DiceIOTest, PrintsOutDCMarker) { std::string const tokens[] = {"<", "<=", ">", ">="}; for (auto & tok : tokens) { std::stringstream ss; ss << dice::from_string("1d20" + tok + "10"); EXPECT_THAT(ss.str(), "1d20" + tok + "10"); } } TEST(RollIOTest, CanPrint0dN) { dice::dice_roll roll{{{}}}; std::stringstream ss; ss << roll; EXPECT_THAT(ss.str(), Eq("0")); } TEST(RollIOTest, Prints1dNAsRollNumber) { dice::dice_roll roll{{{dice::sign::ZERO, {3}}}}; std::stringstream ss; ss << roll; EXPECT_THAT(ss.str(), Eq("3")); } TEST(RollIOTest, PrintsNdMAsList) { dice::dice_roll roll{{{dice::sign::ZERO, {3, 2, 4}}}}; std::stringstream ss; ss << roll; EXPECT_THAT(ss.str(), Eq("[ 3, 2, 4 ]")); } TEST(RollIOTest, PrintsModifiersAfterList) { dice::dice_roll roll{{{dice::sign::ZERO, {3, 2, 4}}}, {{dice::sign::PLUS, 2}}}; std::stringstream ss; ss << roll; EXPECT_THAT(ss.str(), Eq("[ 3, 2, 4 ]+2")); }