16 #define GETTEXT_DOMAIN "wesnoth-test"
18 #include <boost/test/unit_test.hpp>
31 using namespace image;
35 class environment_setup
41 , output_redirect_(ignored_stream_)
53 void set_up_color_info()
59 "rgb",
"FF0000,FFFFFF,000000,FF0000"
64 "rgb",
"2E419B,FFFFFF,0F0F0F,0000FF"
76 void set_up_image_paths()
82 std::stringstream ignored_stream_;
98 environment_setup env_setup;
102 auto low_priority_mod = std::make_unique<fl_modification>();
103 auto high_priority_mod = std::make_unique<rc_modification>();
108 queue.
push(std::move(low_priority_mod));
109 queue.
push(std::move(high_priority_mod));
111 BOOST_REQUIRE_EQUAL(queue.
size(), 2);
113 BOOST_CHECK_EQUAL(&queue.
top(), hptr);
115 BOOST_CHECK_EQUAL(&queue.
top(), lptr);
118 low_priority_mod = std::make_unique<fl_modification>();
119 high_priority_mod = std::make_unique<rc_modification>();
121 lptr = low_priority_mod.get();
122 hptr = high_priority_mod.get();
125 queue.
push(std::move(high_priority_mod));
126 queue.
push(std::move(low_priority_mod));
128 BOOST_REQUIRE_EQUAL(queue.
size(), 2);
130 BOOST_CHECK_EQUAL(&queue.
top(), hptr);
132 BOOST_CHECK_EQUAL(&queue.
top(), lptr);
139 environment_setup env_setup;
143 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
148 BOOST_REQUIRE(mod !=
nullptr);
155 BOOST_CHECK(expected == mod->map());
161 environment_setup env_setup;
165 BOOST_REQUIRE_EQUAL(queue.
size(), 0);
171 environment_setup env_setup;
175 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
180 BOOST_REQUIRE(mod !=
nullptr);
186 BOOST_CHECK(expected == mod->map());
192 environment_setup env_setup;
196 BOOST_REQUIRE_EQUAL(queue.
size(), 0);
202 environment_setup env_setup;
207 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
212 BOOST_REQUIRE(mod !=
nullptr);
218 for(std::size_t
i = 0;
i < old_palette.size() &&
i < new_palette.size(); ++
i) {
219 environment_setup env_setup;
221 expected[old_palette[
i]] = new_palette[
i];
224 BOOST_CHECK(expected == mod->map());
230 environment_setup env_setup;
235 BOOST_REQUIRE_EQUAL(queue.
size(), 0);
241 environment_setup env_setup;
245 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
250 BOOST_REQUIRE(mod !=
nullptr);
252 BOOST_CHECK(mod->get_horiz());
253 BOOST_CHECK(!mod->get_vert());
259 environment_setup env_setup;
263 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
268 BOOST_REQUIRE(mod !=
nullptr);
270 BOOST_CHECK(mod->get_horiz());
271 BOOST_CHECK(!mod->get_vert());
277 environment_setup env_setup;
281 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
286 BOOST_REQUIRE(mod !=
nullptr);
288 BOOST_CHECK(!mod->get_horiz());
289 BOOST_CHECK(mod->get_vert());
295 environment_setup env_setup;
299 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
304 BOOST_REQUIRE(mod !=
nullptr);
306 BOOST_CHECK(mod->get_horiz());
307 BOOST_CHECK(mod->get_vert());
313 environment_setup env_setup;
317 BOOST_REQUIRE(queue.
size() == 1);
322 BOOST_CHECK(mod !=
nullptr);
328 environment_setup env_setup;
332 BOOST_REQUIRE_EQUAL(queue.
size(), 0);
338 environment_setup env_setup;
342 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
347 BOOST_REQUIRE(mod !=
nullptr);
349 const rect& slice = mod->get_slice();
351 BOOST_CHECK_EQUAL(slice.x, 1);
352 BOOST_CHECK_EQUAL(slice.y, 0);
353 BOOST_CHECK_EQUAL(slice.w, 0);
354 BOOST_CHECK_EQUAL(slice.h, 0);
360 environment_setup env_setup;
364 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
369 BOOST_REQUIRE(mod !=
nullptr);
371 const rect& slice = mod->get_slice();
373 BOOST_CHECK_EQUAL(slice.x, 1);
374 BOOST_CHECK_EQUAL(slice.y, 2);
375 BOOST_CHECK_EQUAL(slice.w, 0);
376 BOOST_CHECK_EQUAL(slice.h, 0);
382 environment_setup env_setup;
386 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
391 BOOST_REQUIRE(mod !=
nullptr);
393 const rect& slice = mod->get_slice();
395 BOOST_CHECK_EQUAL(slice.x, 1);
396 BOOST_CHECK_EQUAL(slice.y, 2);
397 BOOST_CHECK_EQUAL(slice.w, 3);
398 BOOST_CHECK_EQUAL(slice.h, 0);
404 environment_setup env_setup;
408 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
413 BOOST_REQUIRE(mod !=
nullptr);
415 const rect& slice = mod->get_slice();
417 BOOST_CHECK_EQUAL(slice.x, 1);
418 BOOST_CHECK_EQUAL(slice.y, 2);
419 BOOST_CHECK_EQUAL(slice.w, 3);
420 BOOST_CHECK_EQUAL(slice.h, 4);
429 environment_setup env_setup;
433 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
438 BOOST_REQUIRE(mod !=
nullptr);
440 BOOST_CHECK(mod->get_surface());
441 BOOST_CHECK_EQUAL(mod->get_x(), 0);
442 BOOST_CHECK_EQUAL(mod->get_y(), 0);
451 environment_setup env_setup;
455 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
459 BOOST_REQUIRE(mod !=
nullptr);
462 BOOST_CHECK(mod->get_surface());
463 BOOST_CHECK_EQUAL(mod->get_x(), 1);
464 BOOST_CHECK_EQUAL(mod->get_y(), 2);
470 environment_setup env_setup;
474 "~BLIT(wesnoth-icon.png,1,-2)"
475 "~BLIT(wesnoth-icon.png,-1,2)"
476 "~BLIT(wesnoth-icon.png,-1,-2)"
477 "~BLIT(wesnoth-icon.png,1,2,3)");
479 BOOST_CHECK_EQUAL(queue.
size(), 3);
488 environment_setup env_setup;
492 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
497 BOOST_REQUIRE(mod !=
nullptr);
499 BOOST_CHECK(mod->get_mask());
500 BOOST_CHECK_EQUAL(mod->get_x(), 0);
501 BOOST_CHECK_EQUAL(mod->get_y(), 0);
510 environment_setup env_setup;
514 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
519 BOOST_REQUIRE(mod !=
nullptr);
521 BOOST_CHECK(mod->get_mask());
522 BOOST_CHECK_EQUAL(mod->get_x(), 3);
523 BOOST_CHECK_EQUAL(mod->get_y(), 4);
529 environment_setup env_setup;
533 "~MASK(wesnoth-icon.png,3,-4)"
534 "~MASK(wesnoth-icon.png,-3,4)"
535 "~MASK(wesnoth-icon.png,-3,-4)");
537 BOOST_CHECK_EQUAL(queue.
size(), 0);
543 environment_setup env_setup;
547 BOOST_CHECK_EQUAL(queue.
size(), 0);
556 environment_setup env_setup;
560 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
565 BOOST_REQUIRE(mod !=
nullptr);
567 BOOST_CHECK(mod->get_surface());
573 environment_setup env_setup;
577 BOOST_CHECK_EQUAL(queue.
size(), 0);
583 environment_setup env_setup;
587 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
592 BOOST_REQUIRE(mod !=
nullptr);
594 BOOST_CHECK_EQUAL(mod->get_w(), 3);
595 BOOST_CHECK_EQUAL(mod->get_h(), 0);
601 environment_setup env_setup;
605 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
610 BOOST_REQUIRE(mod !=
nullptr);
612 BOOST_CHECK_EQUAL(mod->get_w(), 4);
613 BOOST_CHECK_EQUAL(mod->get_h(), 5);
619 environment_setup env_setup;
623 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
628 BOOST_REQUIRE(mod !=
nullptr);
630 BOOST_CHECK(mod->get_opacity() > 0.44f);
631 BOOST_CHECK(mod->get_opacity() < 0.46f);
637 environment_setup env_setup;
641 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
646 BOOST_REQUIRE(mod !=
nullptr);
648 BOOST_CHECK(mod->get_opacity() > 0.33f);
649 BOOST_CHECK(mod->get_opacity() < 0.35f);
655 environment_setup env_setup;
659 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
664 BOOST_REQUIRE(mod !=
nullptr);
666 BOOST_CHECK_EQUAL(mod->get_depth(), 0);
672 environment_setup env_setup;
676 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
681 BOOST_REQUIRE(mod !=
nullptr);
683 BOOST_CHECK_EQUAL(mod->get_depth(), 2);
689 environment_setup env_setup;
693 BOOST_REQUIRE_EQUAL(queue.
size(), 3);
695 for(
int i = 0;
i < 3;
i++) {
696 environment_setup env_setup;
701 BOOST_REQUIRE(mod !=
nullptr);
703 BOOST_CHECK_EQUAL(mod->get_r(), 0);
704 BOOST_CHECK_EQUAL(mod->get_g(), 0);
705 BOOST_CHECK_EQUAL(mod->get_b(), 0);
714 environment_setup env_setup;
718 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
723 BOOST_REQUIRE(mod !=
nullptr);
725 BOOST_CHECK_EQUAL(mod->get_r(), 123);
726 BOOST_CHECK_EQUAL(mod->get_g(), 0);
727 BOOST_CHECK_EQUAL(mod->get_b(), 0);
733 environment_setup env_setup;
737 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
742 BOOST_REQUIRE(mod !=
nullptr);
744 BOOST_CHECK_EQUAL(mod->get_r(), 0);
745 BOOST_CHECK_EQUAL(mod->get_g(), 132);
746 BOOST_CHECK_EQUAL(mod->get_b(), 0);
752 environment_setup env_setup;
756 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
761 BOOST_REQUIRE(mod !=
nullptr);
763 BOOST_CHECK_EQUAL(mod->get_r(), 0);
764 BOOST_CHECK_EQUAL(mod->get_g(), 0);
765 BOOST_CHECK_EQUAL(mod->get_b(), 312);
771 environment_setup env_setup;
775 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
780 BOOST_REQUIRE(mod !=
nullptr);
782 BOOST_CHECK_EQUAL(mod->get_color().r, 0);
783 BOOST_CHECK_EQUAL(mod->get_color().g, 0);
784 BOOST_CHECK_EQUAL(mod->get_color().b, 0);
785 BOOST_CHECK_EQUAL(mod->get_color().a, SDL_ALPHA_OPAQUE);
791 environment_setup env_setup;
795 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
800 BOOST_REQUIRE(mod !=
nullptr);
802 BOOST_CHECK_EQUAL(mod->get_color().r, 1);
803 BOOST_CHECK_EQUAL(mod->get_color().g, 0);
804 BOOST_CHECK_EQUAL(mod->get_color().b, 0);
805 BOOST_CHECK_EQUAL(mod->get_color().a, SDL_ALPHA_OPAQUE);
811 environment_setup env_setup;
815 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
820 BOOST_REQUIRE(mod !=
nullptr);
822 BOOST_CHECK_EQUAL(mod->get_color().r, 1);
823 BOOST_CHECK_EQUAL(mod->get_color().g, 2);
824 BOOST_CHECK_EQUAL(mod->get_color().b, 0);
825 BOOST_CHECK_EQUAL(mod->get_color().a, SDL_ALPHA_OPAQUE);
831 environment_setup env_setup;
835 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
840 BOOST_REQUIRE(mod !=
nullptr);
842 BOOST_CHECK_EQUAL(mod->get_color().r, 1);
843 BOOST_CHECK_EQUAL(mod->get_color().g, 2);
844 BOOST_CHECK_EQUAL(mod->get_color().b, 3);
845 BOOST_CHECK_EQUAL(mod->get_color().a, SDL_ALPHA_OPAQUE);
851 environment_setup env_setup;
855 BOOST_REQUIRE_EQUAL(queue.
size(), 1);
860 BOOST_REQUIRE(mod !=
nullptr);
862 BOOST_CHECK_EQUAL(mod->get_color().r, 1);
863 BOOST_CHECK_EQUAL(mod->get_color().g, 2);
864 BOOST_CHECK_EQUAL(mod->get_color().b, 3);
865 BOOST_CHECK_EQUAL(mod->get_color().a, 4);
868 BOOST_AUTO_TEST_SUITE_END()
A color range definition is made of four reference RGB colors, used for calculating conversions from ...
A config object defines a single node in a WML file, with access to child nodes.
static game_config_view wrap(const config &cfg)
Gaussian-like blur (BL) modification.
Scale (BLIT) modification.
Crop (CROP) modification.
Color-shift (CS, R, G, B) modification.
Mirror (FL) modification.
Grayscale (GS) modification.
Mask (MASK) modification.
A modified priority queue used to order image modifications.
void push(std::unique_ptr< modification > &&mod)
Adds mod to the queue.
const modification & top() const
Returns a const reference to the top element in the queue.
void pop()
Removes the top element from the queue.
std::size_t size() const
Returns the number of elements in the queue.
Base abstract class for an image-path modification.
static modification_queue decode(const std::string &)
Decodes modifications from a modification string.
Opacity (O) modification.
Recolor (RC/TC/PAL) modification.
Scaling (SCALE[_INTO], SCALE[_INTO]_SHARP) modifications.
Helper class to redirect the output of the logger in a certain scope.
color_mapping generate_color_mapping(const color_range &new_range, const std::vector< color_t > &old_rgb)
Converts a source palette using the specified color_range object.
std::unordered_map< color_t, color_t > color_mapping
Definitions for the interface to Wesnoth Markup Language (WML).
Declarations for File-IO.
Standard logging facilities (interface).
const std::vector< color_t > & tc_info(std::string_view name)
const color_range & color_info(std::string_view name)
static void add_color_info(const game_config_view &v, bool build_defaults)
Functions to load and save images from/to disk.
The paths manager is responsible for recording the various paths that binary files may be located at.
Fill background with a color (BG).
An abstract description of a rectangle with integer coordinates.
BOOST_AUTO_TEST_SUITE(filesystem)
BOOST_AUTO_TEST_CASE(test_modificaiton_queue_order)
Tests if modifications with a higher priority are placed before the others.