diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2019-12-09 17:21:48 +0100 |
---|---|---|
committer | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2020-01-15 15:02:11 +0200 |
commit | 47dc5727ab7e1b4b2d13540a0b4310e629668cfe (patch) | |
tree | dd4a15c8f3614180bed3036f75787f0e801daf67 /test/sprite | |
parent | 62b0f4cde289e5918c41d5b69b0a03baa6821862 (diff) | |
download | qtlocation-mapboxgl-47dc5727ab7e1b4b2d13540a0b4310e629668cfe.tar.gz |
[core] parse stretchX, stretchX, and content from sprite JSON files
Diffstat (limited to 'test/sprite')
-rw-r--r-- | test/sprite/sprite_parser.test.cpp | 456 |
1 files changed, 317 insertions, 139 deletions
diff --git a/test/sprite/sprite_parser.test.cpp b/test/sprite/sprite_parser.test.cpp index 1d6e006980..c37fee02b9 100644 --- a/test/sprite/sprite_parser.test.cpp +++ b/test/sprite/sprite_parser.test.cpp @@ -27,111 +27,160 @@ TEST(Sprite, SpriteImageCreationInvalid) { ASSERT_EQ(200u, image_1x.size.width); ASSERT_EQ(299u, image_1x.size.height); - ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, 0, 16, 1, false)); // width == 0 - ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, 16, 0, 1, false)); // height == 0 - ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, -1, 16, 1, false)); // width < 0 - ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, 16, -1, 1, false)); // height < 0 - ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, 1, 1, 0, false)); // ratio == 0 - ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, 1, 1, -1, false)); // ratio < 0 - ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, 1, 1, 23, false)); // ratio too large + ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, 0, 16, 1, false)); // width == 0 + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metrics: 0x16@0,0 in 200x299@1x sprite", + })); + EXPECT_EQ(0u, log.uncheckedCount()); + + ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, 16, 0, 1, false)); // height == 0 + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metrics: 16x0@0,0 in 200x299@1x sprite", + })); + EXPECT_EQ(0u, log.uncheckedCount()); + + ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, -1, 16, 1, false)); // width < 0 + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metrics: 4294967295x16@0,0 in 200x299@1x sprite", + })); + EXPECT_EQ(0u, log.uncheckedCount()); + + ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, 16, -1, 1, false)); // height < 0 + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metrics: 16x4294967295@0,0 in 200x299@1x sprite", + })); + EXPECT_EQ(0u, log.uncheckedCount()); + + ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, 1, 1, 0, false)); // ratio == 0 + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metrics: 1x1@0,0 in 200x299@0x sprite", + })); + EXPECT_EQ(0u, log.uncheckedCount()); + + ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, 1, 1, -1, false)); // ratio < 0 + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metrics: 1x1@0,0 in 200x299@-1x sprite", + })); + EXPECT_EQ(0u, log.uncheckedCount()); + + ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, 1, 1, 23, false)); // ratio too large + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metrics: 1x1@0,0 in 200x299@23x sprite", + })); + EXPECT_EQ(0u, log.uncheckedCount()); + ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, 2048, 16, 1, false)); // too wide - ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, 16, 1025, 1, false)); // too tall - ASSERT_EQ(nullptr, createStyleImage("test", image_1x, -1, 0, 16, 16, 1, false)); // srcX < 0 - ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, -1, 16, 16, 1, false)); // srcY < 0 - ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, image_1x.size.width + 1, 16, 1, false)); // right edge out of bounds - ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, 16, image_1x.size.height + 1, 1, false)); // bottom edge out of bounds - - EXPECT_EQ(1u, log.count({ - EventSeverity::Error, - Event::Sprite, - int64_t(-1), - "Can't create image with invalid metrics: 0x16@0,0 in 200x299@1x sprite", - })); - - EXPECT_EQ(1u, log.count({ - EventSeverity::Error, - Event::Sprite, - int64_t(-1), - "Can't create image with invalid metrics: 16x0@0,0 in 200x299@1x sprite", - })); - - EXPECT_EQ(1u, log.count({ - EventSeverity::Error, - Event::Sprite, - int64_t(-1), - "Can't create image with invalid metrics: 4294967295x16@0,0 in 200x299@1x sprite", - })); - - EXPECT_EQ(1u, log.count({ - EventSeverity::Error, - Event::Sprite, - int64_t(-1), - "Can't create image with invalid metrics: 16x4294967295@0,0 in 200x299@1x sprite", - })); - - EXPECT_EQ(1u, log.count({ - EventSeverity::Error, - Event::Sprite, - int64_t(-1), - "Can't create image with invalid metrics: 1x1@0,0 in 200x299@0x sprite", - })); - - EXPECT_EQ(1u, log.count({ - EventSeverity::Error, - Event::Sprite, - int64_t(-1), - "Can't create image with invalid metrics: 1x1@0,0 in 200x299@-1x sprite", - })); - - EXPECT_EQ(1u, log.count({ - EventSeverity::Error, - Event::Sprite, - int64_t(-1), - "Can't create image with invalid metrics: 1x1@0,0 in 200x299@23x sprite", - })); - - EXPECT_EQ(1u, log.count({ - EventSeverity::Error, - Event::Sprite, - int64_t(-1), - "Can't create image with invalid metrics: 2048x16@0,0 in 200x299@1x sprite", - })); - - EXPECT_EQ(1u, log.count({ - EventSeverity::Error, - Event::Sprite, - int64_t(-1), - "Can't create image with invalid metrics: 16x1025@0,0 in 200x299@1x sprite", - })); - - EXPECT_EQ(1u, log.count({ - EventSeverity::Error, - Event::Sprite, - int64_t(-1), - "Can't create image with invalid metrics: 16x16@4294967295,0 in 200x299@1x sprite", - })); - - EXPECT_EQ(1u, log.count({ - EventSeverity::Error, - Event::Sprite, - int64_t(-1), - "Can't create image with invalid metrics: 16x16@0,4294967295 in 200x299@1x sprite", - })); - - EXPECT_EQ(1u, log.count({ - EventSeverity::Error, - Event::Sprite, - int64_t(-1), - "Can't create image with invalid metrics: 201x16@0,0 in 200x299@1x sprite", - })); - - EXPECT_EQ(1u, log.count({ - EventSeverity::Error, - Event::Sprite, - int64_t(-1), - "Can't create image with invalid metrics: 16x300@0,0 in 200x299@1x sprite", - })); + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metrics: 2048x16@0,0 in 200x299@1x sprite", + })); + EXPECT_EQ(0u, log.uncheckedCount()); + ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, 16, 1025, 1, false)); // too tall + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metrics: 16x1025@0,0 in 200x299@1x sprite", + })); + EXPECT_EQ(0u, log.uncheckedCount()); + + ASSERT_EQ(nullptr, createStyleImage("test", image_1x, -1, 0, 16, 16, 1, false)); // srcX < 0 + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metrics: 16x16@4294967295,0 in 200x299@1x sprite", + })); + EXPECT_EQ(0u, log.uncheckedCount()); + + ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, -1, 16, 16, 1, false)); // srcY < 0 + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metrics: 16x16@0,4294967295 in 200x299@1x sprite", + })); + EXPECT_EQ(0u, log.uncheckedCount()); + + ASSERT_EQ( + nullptr, + createStyleImage("test", image_1x, 0, 0, image_1x.size.width + 1, 16, 1, false)); // right edge out of bounds + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metrics: 201x16@0,0 in 200x299@1x sprite", + })); + EXPECT_EQ(0u, log.uncheckedCount()); + + ASSERT_EQ( + nullptr, + createStyleImage("test", image_1x, 0, 0, 16, image_1x.size.height + 1, 1, false)); // bottom edge out of bounds + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metrics: 16x300@0,0 in 200x299@1x sprite", + })); + EXPECT_EQ(0u, log.uncheckedCount()); + + ASSERT_EQ(nullptr, createStyleImage("test", image_1x, 0, 0, 16, 16, 1, false, {{-1, 3}})); + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metadata: stretchX is out of bounds or overlapping", + })); + EXPECT_EQ(0u, log.uncheckedCount()); + + ASSERT_EQ(nullptr, + createStyleImage("test", image_1x, 0, 0, 16, 16, 1, false, {}, {}, style::ImageContent{14, 14, 12, 10})); + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metadata: content area is invalid", + })); + EXPECT_EQ(0u, log.uncheckedCount()); } TEST(Sprite, SpriteImageCreation1x) { @@ -294,6 +343,129 @@ TEST(Sprite, SpriteParsingInvalidJSON) { } } +TEST(Sprite, SpriteParsingInvalidStretches) { + FixtureLog log; + + const auto image_1x = util::read_file("test/fixtures/annotations/emerald.png"); + + parseSprite(image_1x, R"JSON({ + "interstate_1": { + "width": 40, + "height": 42, + "x": 100, + "y": 44, + "pixelRatio": 1, + "stretchX": {} + } + })JSON"); + EXPECT_EQ(1u, + log.count({EventSeverity::Warning, + Event::Sprite, + int64_t(-1), + "Invalid sprite image 'interstate_1': value of 'stretchX' must be an array"})); + EXPECT_EQ(0u, log.uncheckedCount()); + + parseSprite(image_1x, R"JSON({ + "interstate_1": { + "width": 40, + "height": 42, + "x": 100, + "y": 44, + "pixelRatio": 1, + "stretchX": [[[]]] + } + })JSON"); + EXPECT_EQ( + 1u, + log.count({EventSeverity::Warning, + Event::Sprite, + int64_t(-1), + "Invalid sprite image 'interstate_1': members of 'stretchX' must be an array of two numbers"})); + EXPECT_EQ(0u, log.uncheckedCount()); + + parseSprite(image_1x, R"JSON({ + "interstate_1": { + "width": 40, + "height": 42, + "x": 100, + "y": 44, + "pixelRatio": 1, + "stretchX": [[4, false]] + } + })JSON"); + EXPECT_EQ( + 1u, + log.count({EventSeverity::Warning, + Event::Sprite, + int64_t(-1), + "Invalid sprite image 'interstate_1': members of 'stretchX' must be an array of two numbers"})); + EXPECT_EQ(0u, log.uncheckedCount()); +} + +TEST(Sprite, SpriteParsingInvalidContent) { + FixtureLog log; + + const auto image_1x = util::read_file("test/fixtures/annotations/emerald.png"); + + parseSprite(image_1x, R"JSON({ + "interstate_1": { + "width": 40, + "height": 42, + "x": 100, + "y": 44, + "pixelRatio": 1, + "content": [] + } + })JSON"); + EXPECT_EQ(1u, + log.count({EventSeverity::Warning, + Event::Sprite, + int64_t(-1), + "Invalid sprite image 'interstate_1': value of 'content' must be an array of four numbers"})); + EXPECT_EQ(0u, log.uncheckedCount()); + + parseSprite(image_1x, R"JSON({ + "interstate_1": { + "width": 40, + "height": 42, + "x": 100, + "y": 44, + "pixelRatio": 1, + "content": [4, 4, 4, true] + } + })JSON"); + EXPECT_EQ(1u, + log.count({EventSeverity::Warning, + Event::Sprite, + int64_t(-1), + "Invalid sprite image 'interstate_1': value of 'content' must be an array of four numbers"})); + EXPECT_EQ(0u, log.uncheckedCount()); +} + +TEST(Sprite, SpriteParsingStretchAndContent) { + FixtureLog log; + + const auto image_1x = util::read_file("test/fixtures/annotations/emerald.png"); + + const auto images = parseSprite(image_1x, R"JSON({ + "image": { + "width": 16, + "height": 16, + "x": 0, + "y": 0, + "pixelRatio": 1, + "stretchX": [[2, 14]], + "stretchY": [[0, 4], [12, 16]], + "content": [2, 2, 14, 14] + } + })JSON"); + EXPECT_EQ(1u, images.size()); + EXPECT_EQ("image", images[0]->getID()); + EXPECT_EQ((style::ImageStretches{{2, 14}}), images[0]->getStretchX()); + EXPECT_EQ((style::ImageStretches{{0, 4}, {12, 16}}), images[0]->getStretchY()); + EXPECT_EQ((style::ImageContent{2, 2, 14, 14}), images[0]->getContent()); +} + TEST(Sprite, SpriteParsingEmptyImage) { FixtureLog log; @@ -303,12 +475,13 @@ TEST(Sprite, SpriteParsingEmptyImage) { const auto images = parseSprite(image_1x, json_1x); EXPECT_EQ(0u, images.size()); - EXPECT_EQ(1u, log.count({ - EventSeverity::Error, - Event::Sprite, - int64_t(-1), - "Can't create image with invalid metrics: 0x0@0,0 in 200x299@1x sprite", - })); + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metrics: 0x0@0,0 in 200x299@1x sprite", + })); } TEST(Sprite, SpriteParsingSimpleWidthHeight) { @@ -330,18 +503,20 @@ TEST(Sprite, SpriteParsingWidthTooBig) { const auto images = parseSprite(image_1x, json_1x); EXPECT_EQ(0u, images.size()); - EXPECT_EQ(1u, log.count({ - EventSeverity::Warning, - Event::Sprite, - int64_t(-1), - "Value of 'width' must be an integer between 0 and 65535", - })); - EXPECT_EQ(1u, log.count({ - EventSeverity::Error, - Event::Sprite, - int64_t(-1), - "Can't create image with invalid metrics: 0x32@0,0 in 200x299@1x sprite", - })); + EXPECT_EQ(1u, + log.count({ + EventSeverity::Warning, + Event::Sprite, + int64_t(-1), + "Invalid sprite image 'image': value of 'width' must be an integer between 0 and 65535", + })); + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metrics: 0x32@0,0 in 200x299@1x sprite", + })); } TEST(Sprite, SpriteParsingNegativeWidth) { @@ -353,18 +528,20 @@ TEST(Sprite, SpriteParsingNegativeWidth) { const auto images = parseSprite(image_1x, json_1x); EXPECT_EQ(0u, images.size()); - EXPECT_EQ(1u, log.count({ - EventSeverity::Warning, - Event::Sprite, - int64_t(-1), - "Value of 'width' must be an integer between 0 and 65535", - })); - EXPECT_EQ(1u, log.count({ - EventSeverity::Error, - Event::Sprite, - int64_t(-1), - "Can't create image with invalid metrics: 0x32@0,0 in 200x299@1x sprite", - })); + EXPECT_EQ(1u, + log.count({ + EventSeverity::Warning, + Event::Sprite, + int64_t(-1), + "Invalid sprite image 'image': value of 'width' must be an integer between 0 and 65535", + })); + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metrics: 0x32@0,0 in 200x299@1x sprite", + })); } TEST(Sprite, SpriteParsingNullRatio) { @@ -376,10 +553,11 @@ TEST(Sprite, SpriteParsingNullRatio) { const auto images = parseSprite(image_1x, json_1x); EXPECT_EQ(0u, images.size()); - EXPECT_EQ(1u, log.count({ - EventSeverity::Error, - Event::Sprite, - int64_t(-1), - "Can't create image with invalid metrics: 32x32@0,0 in 200x299@0x sprite", - })); + EXPECT_EQ(1u, + log.count({ + EventSeverity::Error, + Event::Sprite, + int64_t(-1), + "Can't create image with invalid metrics: 32x32@0,0 in 200x299@0x sprite", + })); } |