diff --git a/test/fixtures/image/no_profile.png b/test/fixtures/image/no_profile.png new file mode 100644 index 000000000..f05b5f5fb Binary files /dev/null and b/test/fixtures/image/no_profile.png differ diff --git a/test/fixtures/image/no_profile_alpha.png b/test/fixtures/image/no_profile_alpha.png new file mode 100644 index 000000000..1705b244b Binary files /dev/null and b/test/fixtures/image/no_profile_alpha.png differ diff --git a/test/fixtures/image/profile.png b/test/fixtures/image/profile.png new file mode 100644 index 000000000..bcd6b8ca8 Binary files /dev/null and b/test/fixtures/image/profile.png differ diff --git a/test/fixtures/image/profile_alpha.png b/test/fixtures/image/profile_alpha.png new file mode 100644 index 000000000..dfd40429a Binary files /dev/null and b/test/fixtures/image/profile_alpha.png differ diff --git a/test/fixtures/image/tile.jpeg b/test/fixtures/image/tile.jpeg new file mode 100644 index 000000000..450f95ef4 Binary files /dev/null and b/test/fixtures/image/tile.jpeg differ diff --git a/test/fixtures/image/tile.png b/test/fixtures/image/tile.png new file mode 100644 index 000000000..9623468af Binary files /dev/null and b/test/fixtures/image/tile.png differ diff --git a/test/miscellaneous/image.cpp b/test/miscellaneous/image.cpp new file mode 100644 index 000000000..8a321583c --- /dev/null +++ b/test/miscellaneous/image.cpp @@ -0,0 +1,93 @@ +#include "../fixtures/util.hpp" + +#include +#include +#include + +using namespace mbgl; + +TEST(Image, PNGRoundTrip) { + UnassociatedImage rgba { 1, 1 }; + rgba.data[0] = 128; + rgba.data[1] = 0; + rgba.data[2] = 0; + rgba.data[3] = 255; + + PremultipliedImage image = decodeImage(encodePNG(rgba)); + EXPECT_EQ(128, image.data[0]); + EXPECT_EQ(0, image.data[1]); + EXPECT_EQ(0, image.data[2]); + EXPECT_EQ(255, image.data[3]); +} + +TEST(Image, PNGRoundTripAlpha) { + UnassociatedImage rgba { 1, 1 }; + rgba.data[0] = 128; + rgba.data[1] = 0; + rgba.data[2] = 0; + rgba.data[3] = 128; + + PremultipliedImage image = decodeImage(encodePNG(rgba)); + EXPECT_EQ(64, image.data[0]); + EXPECT_EQ(0, image.data[1]); + EXPECT_EQ(0, image.data[2]); + EXPECT_EQ(128, image.data[3]); +} + +TEST(Image, PNGReadNoProfile) { + PremultipliedImage image = decodeImage(util::read_file("test/fixtures/image/no_profile.png")); + EXPECT_EQ(128, image.data[0]); + EXPECT_EQ(0, image.data[1]); + EXPECT_EQ(0, image.data[2]); + EXPECT_EQ(255, image.data[3]); +} + +TEST(Image, PNGReadNoProfileAlpha) { + PremultipliedImage image = decodeImage(util::read_file("test/fixtures/image/no_profile_alpha.png")); + EXPECT_EQ(64, image.data[0]); + EXPECT_EQ(0, image.data[1]); + EXPECT_EQ(0, image.data[2]); + EXPECT_EQ(128, image.data[3]); +} + +TEST(Image, PNGReadProfile) { + PremultipliedImage image = decodeImage(util::read_file("test/fixtures/image/profile.png")); + EXPECT_EQ(128, image.data[0]); + EXPECT_EQ(0, image.data[1]); + EXPECT_EQ(0, image.data[2]); + EXPECT_EQ(255, image.data[3]); +} + +TEST(Image, PNGReadProfileAlpha) { + PremultipliedImage image = decodeImage(util::read_file("test/fixtures/image/profile_alpha.png")); + EXPECT_EQ(64, image.data[0]); + EXPECT_EQ(0, image.data[1]); + EXPECT_EQ(0, image.data[2]); + EXPECT_EQ(128, image.data[3]); +} + +TEST(Image, PNGTile) { + PremultipliedImage image = decodeImage(util::read_file("test/fixtures/image/tile.png")); + EXPECT_EQ(256, image.width); + EXPECT_EQ(256, image.height); +} + +TEST(Image, JPEGTile) { + PremultipliedImage image = decodeImage(util::read_file("test/fixtures/image/tile.jpeg")); + EXPECT_EQ(256, image.width); + EXPECT_EQ(256, image.height); +} + +TEST(Image, Premultiply) { + UnassociatedImage rgba { 1, 1 }; + rgba.data[0] = 255; + rgba.data[1] = 254; + rgba.data[2] = 253; + rgba.data[3] = 128; + + PremultipliedImage image = util::premultiply(std::move(rgba)); + EXPECT_EQ(128, image.data[0]); + EXPECT_EQ(127, image.data[1]); + EXPECT_EQ(127, image.data[2]); + EXPECT_EQ(128, image.data[3]); +} diff --git a/test/test.gypi b/test/test.gypi index 583474a98..9530d5d49 100644 --- a/test/test.gypi +++ b/test/test.gypi @@ -52,6 +52,7 @@ 'miscellaneous/enums.cpp', 'miscellaneous/functions.cpp', 'miscellaneous/geo.cpp', + 'miscellaneous/image.cpp', 'miscellaneous/map.cpp', 'miscellaneous/map_context.cpp', 'miscellaneous/mapbox.cpp',