|
11 | 11 | #include <scratchcpp/costume.h> |
12 | 12 | #include <scratchcpp/rect.h> |
13 | 13 | #include <enginemock.h> |
| 14 | +#include <renderedtargetmock.h> |
14 | 15 |
|
15 | 16 | #include "../common.h" |
16 | 17 |
|
@@ -795,3 +796,108 @@ TEST_F(RenderedTargetTest, GetFastBounds) |
795 | 796 |
|
796 | 797 | context.doneCurrent(); |
797 | 798 | } |
| 799 | + |
| 800 | +TEST_F(RenderedTargetTest, TouchingClones) |
| 801 | +{ |
| 802 | + EngineMock engine; |
| 803 | + Sprite sprite, clone1, clone2; |
| 804 | + SpriteModel model, model1, model2; |
| 805 | + model.init(&sprite); |
| 806 | + clone1.setInterface(&model1); |
| 807 | + clone2.setInterface(&model2); |
| 808 | + |
| 809 | + QQuickItem parent; |
| 810 | + parent.setWidth(480); |
| 811 | + parent.setHeight(360); |
| 812 | + |
| 813 | + RenderedTarget target(&parent); |
| 814 | + target.setEngine(&engine); |
| 815 | + target.setSpriteModel(&model); |
| 816 | + |
| 817 | + RenderedTargetMock target1, target2; |
| 818 | + model1.setRenderedTarget(&target1); |
| 819 | + model2.setRenderedTarget(&target2); |
| 820 | + |
| 821 | + // Create OpenGL context |
| 822 | + QOpenGLContext context; |
| 823 | + QOffscreenSurface surface; |
| 824 | + createContextAndSurface(&context, &surface); |
| 825 | + |
| 826 | + // Load costume |
| 827 | + EXPECT_CALL(engine, stageWidth()).WillRepeatedly(Return(480)); |
| 828 | + EXPECT_CALL(engine, stageHeight()).WillRepeatedly(Return(360)); |
| 829 | + auto costume = std::make_shared<Costume>("", "", "png"); |
| 830 | + std::string costumeData = readFileStr("image.png"); |
| 831 | + costume->setData(costumeData.size(), static_cast<void *>(costumeData.data())); |
| 832 | + sprite.addCostume(costume); |
| 833 | + target.loadCostumes(); |
| 834 | + target.updateCostume(costume.get()); |
| 835 | + target.setWidth(3); |
| 836 | + target.setHeight(3); |
| 837 | + |
| 838 | + EXPECT_CALL(target1, getFastBounds()).WillOnce(Return(Rect(2, 1, 6, -5))); |
| 839 | + EXPECT_CALL(target2, getFastBounds()).WillOnce(Return(Rect(-5, -1, 1.8, -8))); |
| 840 | + EXPECT_CALL(target1, containsScratchPoint(1, -3)).WillOnce(Return(false)); |
| 841 | + EXPECT_CALL(target2, containsScratchPoint(1, -3)).WillOnce(Return(false)); |
| 842 | + EXPECT_CALL(target1, containsScratchPoint(2, -3)).WillOnce(Return(false)); |
| 843 | + EXPECT_CALL(target2, containsScratchPoint(2, -3)).WillOnce(Return(false)); |
| 844 | + EXPECT_CALL(target1, containsScratchPoint(3, -3)).WillOnce(Return(false)); |
| 845 | + EXPECT_CALL(target2, containsScratchPoint(3, -3)).WillOnce(Return(false)); |
| 846 | + EXPECT_CALL(target1, containsScratchPoint(1, -2)).WillOnce(Return(false)); |
| 847 | + EXPECT_CALL(target2, containsScratchPoint(1, -2)).WillOnce(Return(false)); |
| 848 | + EXPECT_CALL(target1, containsScratchPoint(3, -2)).WillOnce(Return(false)); |
| 849 | + EXPECT_CALL(target2, containsScratchPoint(3, -2)).WillOnce(Return(false)); |
| 850 | + EXPECT_CALL(target1, containsScratchPoint(1, -1)).WillOnce(Return(false)); |
| 851 | + EXPECT_CALL(target2, containsScratchPoint(1, -1)).WillOnce(Return(false)); |
| 852 | + EXPECT_CALL(target1, containsScratchPoint(2, -1)).WillOnce(Return(false)); |
| 853 | + EXPECT_CALL(target2, containsScratchPoint(2, -1)).WillOnce(Return(false)); |
| 854 | + EXPECT_CALL(target1, containsScratchPoint(3, -1)).WillOnce(Return(false)); |
| 855 | + EXPECT_CALL(target2, containsScratchPoint(3, -1)).WillOnce(Return(false)); |
| 856 | + ASSERT_FALSE(target.touchingClones({ &clone1, &clone2 })); |
| 857 | + |
| 858 | + EXPECT_CALL(target1, getFastBounds()).WillOnce(Return(Rect(2, 1, 6, -5))); |
| 859 | + EXPECT_CALL(target2, getFastBounds()).WillOnce(Return(Rect(-5, -1, 1.8, -8))); |
| 860 | + EXPECT_CALL(target1, containsScratchPoint(1, -3)).WillOnce(Return(false)); |
| 861 | + EXPECT_CALL(target2, containsScratchPoint(1, -3)).WillOnce(Return(false)); |
| 862 | + EXPECT_CALL(target1, containsScratchPoint(2, -3)).WillOnce(Return(true)); |
| 863 | + ASSERT_TRUE(target.touchingClones({ &clone1, &clone2 })); |
| 864 | + |
| 865 | + EXPECT_CALL(target1, getFastBounds()).WillOnce(Return(Rect(5, 1, 6, -5))); |
| 866 | + EXPECT_CALL(target2, getFastBounds()).WillOnce(Return(Rect(-5, -1, 1.8, -8))); |
| 867 | + EXPECT_CALL(target1, containsScratchPoint(1, -3)).WillOnce(Return(false)); |
| 868 | + EXPECT_CALL(target2, containsScratchPoint(1, -3)).WillOnce(Return(false)); |
| 869 | + EXPECT_CALL(target1, containsScratchPoint(1, -2)).WillOnce(Return(false)); |
| 870 | + EXPECT_CALL(target2, containsScratchPoint(1, -2)).WillOnce(Return(false)); |
| 871 | + EXPECT_CALL(target1, containsScratchPoint(1, -1)).WillOnce(Return(false)); |
| 872 | + EXPECT_CALL(target2, containsScratchPoint(1, -1)).WillOnce(Return(false)); |
| 873 | + ASSERT_FALSE(target.touchingClones({ &clone1, &clone2 })); |
| 874 | + |
| 875 | + EXPECT_CALL(target1, getFastBounds()).WillOnce(Return(Rect(2, 1, 6, -5))); |
| 876 | + EXPECT_CALL(target2, getFastBounds()).WillOnce(Return(Rect(-5, -6.5, 1.8, -8))); |
| 877 | + EXPECT_CALL(target1, containsScratchPoint(2, -3)).WillOnce(Return(false)); |
| 878 | + EXPECT_CALL(target2, containsScratchPoint(2, -3)).WillOnce(Return(false)); |
| 879 | + EXPECT_CALL(target1, containsScratchPoint(3, -3)).WillOnce(Return(false)); |
| 880 | + EXPECT_CALL(target2, containsScratchPoint(3, -3)).WillOnce(Return(false)); |
| 881 | + EXPECT_CALL(target1, containsScratchPoint(3, -2)).WillOnce(Return(false)); |
| 882 | + EXPECT_CALL(target2, containsScratchPoint(3, -2)).WillOnce(Return(false)); |
| 883 | + EXPECT_CALL(target1, containsScratchPoint(2, -1)).WillOnce(Return(false)); |
| 884 | + EXPECT_CALL(target2, containsScratchPoint(2, -1)).WillOnce(Return(false)); |
| 885 | + EXPECT_CALL(target1, containsScratchPoint(3, -1)).WillOnce(Return(false)); |
| 886 | + EXPECT_CALL(target2, containsScratchPoint(3, -1)).WillOnce(Return(false)); |
| 887 | + ASSERT_FALSE(target.touchingClones({ &clone1, &clone2 })); |
| 888 | + |
| 889 | + EXPECT_CALL(target1, getFastBounds()).WillOnce(Return(Rect(2, 1, 6, -5))); |
| 890 | + EXPECT_CALL(target2, getFastBounds()).WillOnce(Return(Rect(-5, -6.5, 1.8, -8))); |
| 891 | + EXPECT_CALL(target1, containsScratchPoint(2, -3)).WillOnce(Return(false)); |
| 892 | + EXPECT_CALL(target2, containsScratchPoint(2, -3)).WillOnce(Return(true)); |
| 893 | + ASSERT_TRUE(target.touchingClones({ &clone1, &clone2 })); |
| 894 | + |
| 895 | + EXPECT_CALL(target1, getFastBounds()).WillOnce(Return(Rect(5, 1, 6, -5))); |
| 896 | + EXPECT_CALL(target2, getFastBounds()).WillOnce(Return(Rect(-5, -6.5, 1.8, -8))); |
| 897 | + EXPECT_CALL(target1, containsScratchPoint).Times(0); |
| 898 | + EXPECT_CALL(target2, containsScratchPoint).Times(0); |
| 899 | + ASSERT_FALSE(target.touchingClones({ &clone1, &clone2 })); |
| 900 | + |
| 901 | + // Cleanup |
| 902 | + context.doneCurrent(); |
| 903 | +} |
0 commit comments