@@ -718,6 +718,193 @@ TEST(EngineTest, Targets)
718718 ASSERT_EQ (block2->engine (), &engine);
719719}
720720
721+ void createTargets (Engine *engine, std::vector<Sprite *> &sprites)
722+ {
723+ auto stage = std::make_shared<Stage>();
724+ stage->setLayerOrder (0 );
725+ auto sprite1 = std::make_shared<Sprite>();
726+ sprite1->setLayerOrder (1 );
727+ auto sprite2 = std::make_shared<Sprite>();
728+ sprite2->setLayerOrder (5 );
729+ auto sprite3 = std::make_shared<Sprite>();
730+ sprite3->setLayerOrder (3 );
731+ auto sprite4 = std::make_shared<Sprite>();
732+ sprite4->setLayerOrder (4 );
733+ auto sprite5 = std::make_shared<Sprite>();
734+ sprite5->setLayerOrder (2 );
735+
736+ engine->setTargets ({ stage, sprite1, sprite2, sprite3, sprite4, sprite5 });
737+ sprites = { sprite1.get (), sprite2.get (), sprite3.get (), sprite4.get (), sprite5.get () };
738+
739+ ASSERT_EQ (sprites[0 ]->layerOrder (), 1 );
740+ ASSERT_EQ (sprites[1 ]->layerOrder (), 5 );
741+ ASSERT_EQ (sprites[2 ]->layerOrder (), 3 );
742+ ASSERT_EQ (sprites[3 ]->layerOrder (), 4 );
743+ ASSERT_EQ (sprites[4 ]->layerOrder (), 2 );
744+ }
745+
746+ TEST (EngineTest, MoveSpriteToFront)
747+ {
748+ Engine engine;
749+ std::vector<Sprite *> sprites;
750+ createTargets (&engine, sprites);
751+
752+ engine.moveSpriteToFront (sprites[2 ]);
753+ ASSERT_EQ (sprites[0 ]->layerOrder (), 1 );
754+ ASSERT_EQ (sprites[1 ]->layerOrder (), 4 );
755+ ASSERT_EQ (sprites[2 ]->layerOrder (), 5 );
756+ ASSERT_EQ (sprites[3 ]->layerOrder (), 3 );
757+ ASSERT_EQ (sprites[4 ]->layerOrder (), 2 );
758+
759+ for (int i = 0 ; i < 2 ; i++) {
760+ engine.moveSpriteToFront (sprites[0 ]);
761+ ASSERT_EQ (sprites[0 ]->layerOrder (), 5 );
762+ ASSERT_EQ (sprites[1 ]->layerOrder (), 3 );
763+ ASSERT_EQ (sprites[2 ]->layerOrder (), 4 );
764+ ASSERT_EQ (sprites[3 ]->layerOrder (), 2 );
765+ ASSERT_EQ (sprites[4 ]->layerOrder (), 1 );
766+ }
767+
768+ auto stage = std::make_shared<Stage>();
769+ stage->setLayerOrder (0 );
770+ auto sprite = std::make_shared<Sprite>();
771+ sprite->setLayerOrder (1 );
772+
773+ engine.setTargets ({ stage, sprite });
774+ engine.moveSpriteToFront (sprite.get ());
775+ ASSERT_EQ (sprite->layerOrder (), 1 );
776+ }
777+
778+ TEST (EngineTest, MoveSpriteToBack)
779+ {
780+ Engine engine;
781+ std::vector<Sprite *> sprites;
782+ createTargets (&engine, sprites);
783+
784+ engine.moveSpriteToBack (sprites[2 ]);
785+ ASSERT_EQ (sprites[0 ]->layerOrder (), 2 );
786+ ASSERT_EQ (sprites[1 ]->layerOrder (), 5 );
787+ ASSERT_EQ (sprites[2 ]->layerOrder (), 1 );
788+ ASSERT_EQ (sprites[3 ]->layerOrder (), 4 );
789+ ASSERT_EQ (sprites[4 ]->layerOrder (), 3 );
790+
791+ for (int i = 0 ; i < 1 ; i++) {
792+ engine.moveSpriteToBack (sprites[1 ]);
793+ ASSERT_EQ (sprites[0 ]->layerOrder (), 3 );
794+ ASSERT_EQ (sprites[1 ]->layerOrder (), 1 );
795+ ASSERT_EQ (sprites[2 ]->layerOrder (), 2 );
796+ ASSERT_EQ (sprites[3 ]->layerOrder (), 5 );
797+ ASSERT_EQ (sprites[4 ]->layerOrder (), 4 );
798+ }
799+
800+ auto stage = std::make_shared<Stage>();
801+ stage->setLayerOrder (0 );
802+ auto sprite = std::make_shared<Sprite>();
803+ sprite->setLayerOrder (1 );
804+
805+ engine.setTargets ({ stage, sprite });
806+ engine.moveSpriteToBack (sprite.get ());
807+ ASSERT_EQ (sprite->layerOrder (), 1 );
808+ }
809+
810+ TEST (EngineTest, MoveSpriteForwardLayers)
811+ {
812+ Engine engine;
813+ std::vector<Sprite *> sprites;
814+ createTargets (&engine, sprites);
815+
816+ engine.moveSpriteForwardLayers (sprites[4 ], 2 );
817+ ASSERT_EQ (sprites[0 ]->layerOrder (), 1 );
818+ ASSERT_EQ (sprites[1 ]->layerOrder (), 5 );
819+ ASSERT_EQ (sprites[2 ]->layerOrder (), 2 );
820+ ASSERT_EQ (sprites[3 ]->layerOrder (), 3 );
821+ ASSERT_EQ (sprites[4 ]->layerOrder (), 4 );
822+
823+ engine.moveSpriteForwardLayers (sprites[4 ], 2 );
824+ ASSERT_EQ (sprites[0 ]->layerOrder (), 1 );
825+ ASSERT_EQ (sprites[1 ]->layerOrder (), 4 );
826+ ASSERT_EQ (sprites[2 ]->layerOrder (), 2 );
827+ ASSERT_EQ (sprites[3 ]->layerOrder (), 3 );
828+ ASSERT_EQ (sprites[4 ]->layerOrder (), 5 );
829+
830+ engine.moveSpriteForwardLayers (sprites[4 ], -3 );
831+ ASSERT_EQ (sprites[0 ]->layerOrder (), 1 );
832+ ASSERT_EQ (sprites[1 ]->layerOrder (), 5 );
833+ ASSERT_EQ (sprites[2 ]->layerOrder (), 3 );
834+ ASSERT_EQ (sprites[3 ]->layerOrder (), 4 );
835+ ASSERT_EQ (sprites[4 ]->layerOrder (), 2 );
836+
837+ engine.moveSpriteForwardLayers (sprites[2 ], -3 );
838+ ASSERT_EQ (sprites[0 ]->layerOrder (), 2 );
839+ ASSERT_EQ (sprites[1 ]->layerOrder (), 5 );
840+ ASSERT_EQ (sprites[2 ]->layerOrder (), 1 );
841+ ASSERT_EQ (sprites[3 ]->layerOrder (), 4 );
842+ ASSERT_EQ (sprites[4 ]->layerOrder (), 3 );
843+ }
844+
845+ TEST (EngineTest, MoveSpriteBackwardLayers)
846+ {
847+ Engine engine;
848+ std::vector<Sprite *> sprites;
849+ createTargets (&engine, sprites);
850+
851+ engine.moveSpriteBackwardLayers (sprites[4 ], -2 );
852+ ASSERT_EQ (sprites[0 ]->layerOrder (), 1 );
853+ ASSERT_EQ (sprites[1 ]->layerOrder (), 5 );
854+ ASSERT_EQ (sprites[2 ]->layerOrder (), 2 );
855+ ASSERT_EQ (sprites[3 ]->layerOrder (), 3 );
856+ ASSERT_EQ (sprites[4 ]->layerOrder (), 4 );
857+
858+ engine.moveSpriteBackwardLayers (sprites[4 ], -2 );
859+ ASSERT_EQ (sprites[0 ]->layerOrder (), 1 );
860+ ASSERT_EQ (sprites[1 ]->layerOrder (), 4 );
861+ ASSERT_EQ (sprites[2 ]->layerOrder (), 2 );
862+ ASSERT_EQ (sprites[3 ]->layerOrder (), 3 );
863+ ASSERT_EQ (sprites[4 ]->layerOrder (), 5 );
864+
865+ engine.moveSpriteBackwardLayers (sprites[4 ], 3 );
866+ ASSERT_EQ (sprites[0 ]->layerOrder (), 1 );
867+ ASSERT_EQ (sprites[1 ]->layerOrder (), 5 );
868+ ASSERT_EQ (sprites[2 ]->layerOrder (), 3 );
869+ ASSERT_EQ (sprites[3 ]->layerOrder (), 4 );
870+ ASSERT_EQ (sprites[4 ]->layerOrder (), 2 );
871+
872+ engine.moveSpriteBackwardLayers (sprites[2 ], 3 );
873+ ASSERT_EQ (sprites[0 ]->layerOrder (), 2 );
874+ ASSERT_EQ (sprites[1 ]->layerOrder (), 5 );
875+ ASSERT_EQ (sprites[2 ]->layerOrder (), 1 );
876+ ASSERT_EQ (sprites[3 ]->layerOrder (), 4 );
877+ ASSERT_EQ (sprites[4 ]->layerOrder (), 3 );
878+ }
879+
880+ TEST (EngineTest, MoveSpriteBehindOther)
881+ {
882+ Engine engine;
883+ std::vector<Sprite *> sprites;
884+ createTargets (&engine, sprites);
885+
886+ engine.moveSpriteBehindOther (sprites[4 ], sprites[3 ]);
887+ ASSERT_EQ (sprites[0 ]->layerOrder (), 1 );
888+ ASSERT_EQ (sprites[1 ]->layerOrder (), 5 );
889+ ASSERT_EQ (sprites[2 ]->layerOrder (), 2 );
890+ ASSERT_EQ (sprites[3 ]->layerOrder (), 4 );
891+ ASSERT_EQ (sprites[4 ]->layerOrder (), 3 );
892+
893+ engine.moveSpriteBehindOther (sprites[3 ], sprites[2 ]);
894+ ASSERT_EQ (sprites[0 ]->layerOrder (), 1 );
895+ ASSERT_EQ (sprites[1 ]->layerOrder (), 5 );
896+ ASSERT_EQ (sprites[2 ]->layerOrder (), 3 );
897+ ASSERT_EQ (sprites[3 ]->layerOrder (), 2 );
898+ ASSERT_EQ (sprites[4 ]->layerOrder (), 4 );
899+
900+ engine.moveSpriteBehindOther (sprites[4 ], sprites[0 ]);
901+ ASSERT_EQ (sprites[0 ]->layerOrder (), 2 );
902+ ASSERT_EQ (sprites[1 ]->layerOrder (), 5 );
903+ ASSERT_EQ (sprites[2 ]->layerOrder (), 4 );
904+ ASSERT_EQ (sprites[3 ]->layerOrder (), 3 );
905+ ASSERT_EQ (sprites[4 ]->layerOrder (), 1 );
906+ }
907+
721908TEST (EngineTest, Stage)
722909{
723910 Engine engine;
0 commit comments