|
|
@@ -18,6 +18,10 @@ namespace env { namespace detail {
|
|
|
}}
|
|
|
#endif
|
|
|
|
|
|
+using testing::Eq;
|
|
|
+using testing::Le;
|
|
|
+using testing::SizeIs;
|
|
|
+
|
|
|
struct TextEngineTest : testing::Test {
|
|
|
void SetUp() override;
|
|
|
void TearDown() override;
|
|
|
@@ -40,3 +44,60 @@ TEST_F(TextEngineTest, CanBuildFromFont) {
|
|
|
TEST_F(TextEngineTest, ThrowsOnInvalidFile) {
|
|
|
EXPECT_ANY_THROW(engine::text_engine("missing", manager));
|
|
|
}
|
|
|
+
|
|
|
+struct CreateTextTest : TextEngineTest {
|
|
|
+ void SetUp() override;
|
|
|
+ void TearDown() override;
|
|
|
+
|
|
|
+ std::vector<graphics::object> out;
|
|
|
+ std::unique_ptr<engine::text_engine> engine;
|
|
|
+ engine::text_engine::cell const data{make_vector(0.f, 0.f),
|
|
|
+ make_vector(10.f, 20.f), "HELLO"};
|
|
|
+};
|
|
|
+
|
|
|
+void CreateTextTest::SetUp() {
|
|
|
+ TextEngineTest::SetUp();
|
|
|
+ engine = std::make_unique<engine::text_engine>("font", manager);
|
|
|
+}
|
|
|
+
|
|
|
+void CreateTextTest::TearDown() {
|
|
|
+ engine.reset();
|
|
|
+ TextEngineTest::TearDown();
|
|
|
+}
|
|
|
+
|
|
|
+TEST_F(CreateTextTest, TextGenIsNoThrow) {
|
|
|
+ EXPECT_NO_THROW(engine->create_text_cells(out, data));
|
|
|
+}
|
|
|
+
|
|
|
+TEST_F(CreateTextTest, GeneratesOneObjectPerChar) {
|
|
|
+ engine->create_text_cells(out, data);
|
|
|
+ EXPECT_THAT(out, SizeIs(5));
|
|
|
+}
|
|
|
+
|
|
|
+TEST_F(CreateTextTest, ShrinksOutVectorIfNeeded) {
|
|
|
+ out.resize(10, {{}, {}, cast<graphics::material>(1), {}});
|
|
|
+ engine->create_text_cells(out, data);
|
|
|
+ EXPECT_THAT(out, SizeIs(5));
|
|
|
+}
|
|
|
+
|
|
|
+TEST_F(CreateTextTest, ObjectsDoNotOverlap) {
|
|
|
+ engine->create_text_cells(out, data);
|
|
|
+ for (std::size_t i = 0; i < out.size() - 1; ++i) {
|
|
|
+ EXPECT_THAT(out[i].location.origin[0] + data.size[0],
|
|
|
+ Le(out[i + 1].location.origin[0]));
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+TEST_F(CreateTextTest, ObjectsAreOnSameHeight) {
|
|
|
+ engine->create_text_cells(out, data);
|
|
|
+ for (std::size_t i = 0; i < out.size(); ++i) {
|
|
|
+ EXPECT_THAT(out[i].location.origin[1], Eq(data.origin[1]));
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+TEST_F(CreateTextTest, EachObjectIsSizedByTheCell) {
|
|
|
+ engine->create_text_cells(out, data);
|
|
|
+ for (auto & obj : out) {
|
|
|
+ EXPECT_THAT(obj.location.size, Eq(data.size));
|
|
|
+ }
|
|
|
+}
|