summaryrefslogtreecommitdiff
path: root/test/text
diff options
context:
space:
mode:
authorAlexander Shalamov <alexander.shalamov@mapbox.com>2019-12-09 10:41:27 +0200
committerTobrun <tobrun.van.nuland@gmail.com>2019-12-18 13:36:44 +0100
commitcd337ffa27caff425045c5b492cc14ed9cf0e36d (patch)
tree429c8679f7619be52ec793babadf8a9c5727ecab /test/text
parent8e9538110a4fc7a69762f96f0d6ab08ed4c77432 (diff)
downloadqtlocation-mapboxgl-cd337ffa27caff425045c5b492cc14ed9cf0e36d.tar.gz
[core] Add unit test for getAnchors and remove unused field
Diffstat (limited to 'test/text')
-rw-r--r--test/text/get_anchors.test.cpp130
-rw-r--r--test/text/quads.test.cpp4
2 files changed, 132 insertions, 2 deletions
diff --git a/test/text/get_anchors.test.cpp b/test/text/get_anchors.test.cpp
new file mode 100644
index 0000000000..84dea4394f
--- /dev/null
+++ b/test/text/get_anchors.test.cpp
@@ -0,0 +1,130 @@
+#include <mbgl/test/util.hpp>
+
+#include <mbgl/text/get_anchors.hpp>
+
+using namespace mbgl;
+
+namespace mbgl {
+constexpr inline bool operator==(const Anchor& rhs, const Anchor& lhs) {
+ return rhs.point == lhs.point && rhs.angle == lhs.angle && rhs.segment == lhs.segment;
+}
+} // namespace mbgl
+
+namespace {
+const auto makeLine = [](std::size_t shift = 0u) {
+ GeometryCoordinates line;
+ for (std::size_t i = shift; i < 10u + shift; ++i) {
+ line.push_back({1, static_cast<int16_t>(i)});
+ }
+ return line;
+};
+
+const GeometryCoordinates continuedLine = makeLine();
+const GeometryCoordinates nonContinuedLine = makeLine(1u);
+
+const float smallSpacing = 2.0f;
+const float bigSpacing = 3.0f;
+const float textLeft = -1.0f;
+const float textRight = 1.0f;
+const float iconLeft = -0.5f;
+const float iconRight = 0.5f;
+const float glyphSize = 0.1f;
+const float boxScale = 1.0f;
+const float overscaling = 1.0f;
+} // namespace
+
+TEST(getAnchors, NonContinuedLineShortLabels) {
+ const Anchors anchors = getAnchors(
+ nonContinuedLine, bigSpacing, M_PI, textLeft, textRight, iconLeft, iconRight, glyphSize, boxScale, overscaling);
+ const Anchors expected_anchors = {Anchor(1.0f, 2.0f, 1.570796371f, 1u),
+ Anchor(1.0f, 5.0f, 1.570796371f, 4u),
+ Anchor(1.0f, 8.0f, 1.570796371f, 7u)};
+
+ EXPECT_EQ(anchors, expected_anchors);
+}
+
+TEST(getAnchors, NonContinuedLineLongLabels) {
+ const Anchors anchors = getAnchors(nonContinuedLine,
+ smallSpacing,
+ M_PI,
+ textLeft,
+ textRight,
+ iconLeft,
+ iconRight,
+ glyphSize,
+ boxScale,
+ overscaling);
+ const Anchors expected_anchors = {Anchor(1.0f, 2.0f, 1.570796371f, 1u),
+ Anchor(1.0f, 5.0f, 1.570796371f, 3u),
+ Anchor(1.0f, 7.0f, 1.570796371f, 6u)};
+
+ EXPECT_EQ(anchors, expected_anchors);
+}
+
+TEST(getAnchors, ContinuedLineShortLabels) {
+ const Anchors anchors = getAnchors(
+ continuedLine, bigSpacing, M_PI, textLeft, textRight, iconLeft, iconRight, glyphSize, boxScale, overscaling);
+ const Anchors expected_anchors = {Anchor(1.0f, 2.0f, 1.570796371f, 1u),
+ Anchor(1.0f, 5.0f, 1.570796371f, 4u),
+ Anchor(1.0f, 8.0f, 1.570796371f, 7u)};
+
+ EXPECT_EQ(anchors, expected_anchors);
+}
+
+TEST(getAnchors, ContinuedLineLongLabels) {
+ const Anchors anchors = getAnchors(
+ continuedLine, smallSpacing, M_PI, textLeft, textRight, iconLeft, iconRight, glyphSize, boxScale, overscaling);
+ const Anchors expected_anchors = {Anchor(1.0f, 1.0f, 1.570796371f, 1u),
+ Anchor(1.0f, 4.0f, 1.570796371f, 3u),
+ Anchor(1.0f, 6.0f, 1.570796371f, 6u)};
+
+ EXPECT_EQ(anchors, expected_anchors);
+}
+
+TEST(getAnchors, OverscaledAnchorsInParent) {
+ const Anchors anchors = getAnchors(
+ nonContinuedLine, bigSpacing, M_PI, textLeft, textRight, iconLeft, iconRight, glyphSize, boxScale, overscaling);
+ const Anchors childAnchors = getAnchors(nonContinuedLine,
+ bigSpacing / 2,
+ M_PI,
+ textLeft,
+ textRight,
+ iconLeft,
+ iconRight,
+ glyphSize,
+ 0.5f /*boxScale*/,
+ 2.0f /*overscaling*/);
+ for (const auto& anchor : anchors) {
+ EXPECT_TRUE(std::find(childAnchors.begin(), childAnchors.end(), anchor) != childAnchors.end());
+ }
+}
+
+TEST(getAnchors, UseMidpointForShortLine) {
+ const GeometryCoordinates shortLine = {Point<int16_t>{1, 1}, Point<int16_t>{1, 3}};
+ const Anchors anchors = getAnchors(
+ shortLine, smallSpacing, M_PI, textLeft, textRight, iconLeft, iconRight, glyphSize, boxScale, overscaling);
+ const Anchors expected_anchors = {Anchor(1.0f, 2.0f, 1.570796371f, 0u)};
+
+ EXPECT_EQ(anchors, expected_anchors);
+}
+
+TEST(getAnchors, GetCenterAnchor) {
+ const GeometryCoordinates line = {
+ Point<int16_t>{1, 1}, Point<int16_t>{1, 3}, Point<int16_t>{3, 6}, Point<int16_t>{4, 7}};
+ const auto anchor = getCenterAnchor(line, M_PI, textLeft, textRight, iconLeft, iconRight, glyphSize, boxScale);
+ EXPECT_TRUE(anchor);
+ EXPECT_EQ(*anchor, Anchor(2.0f, 4.0f, .982793748f, 1u));
+}
+
+TEST(getAnchors, GetCenterAnchorOutsideTileBounds) {
+ const GeometryCoordinates line = {Point<int16_t>{-10, -10}, Point<int16_t>{5, 5}};
+ const auto anchor = getCenterAnchor(line, M_PI, textLeft, textRight, iconLeft, iconRight, glyphSize, boxScale);
+ EXPECT_TRUE(anchor);
+ EXPECT_EQ(*anchor, Anchor(-3.0f, -3.0f, .785398185f, 0u));
+}
+
+TEST(getAnchors, GetCenterAnchorFailMaxAngle) {
+ const GeometryCoordinates line = {Point<int16_t>{1, 1}, Point<int16_t>{1, 3}, Point<int16_t>{3, 3}};
+ const auto anchor = getCenterAnchor(line, M_PI / 4, textLeft, textRight, iconLeft, iconRight, glyphSize, boxScale);
+ EXPECT_FALSE(anchor);
+}
diff --git a/test/text/quads.test.cpp b/test/text/quads.test.cpp
index 64255c72db..5a78195faa 100644
--- a/test/text/quads.test.cpp
+++ b/test/text/quads.test.cpp
@@ -12,7 +12,7 @@ using namespace mbgl::style;
TEST(getIconQuads, normal) {
SymbolLayoutProperties::Evaluated layout;
- Anchor anchor(2.0, 3.0, 0.0, 0.5f, 0);
+ Anchor anchor(2.0, 3.0, 0.0, 0);
ImagePosition image = {
mapbox::Bin(-1, 15, 11, 0, 0, 0, 0),
style::Image::Impl("test", PremultipliedImage({1,1}), 1.0)
@@ -35,7 +35,7 @@ TEST(getIconQuads, normal) {
}
TEST(getIconQuads, style) {
- Anchor anchor(0.0, 0.0, 0.0, 0.5f, 0);
+ Anchor anchor(0.0, 0.0, 0.0, 0);
const ImagePosition image = {mapbox::Bin(-1, 20, 20, 0, 0, 0, 0),
style::Image::Impl("test", PremultipliedImage({1, 1}), 1.0)};