~alan-griffiths/mir/knee-jerk-mir_surface_state_automatic

« back to all changes in this revision

Viewing changes to tests/unit-tests/compositor/test_compositor.cpp

  • Committer: Kevin DuBois
  • Date: 2012-11-13 01:36:29 UTC
  • mfrom: (245 trunk)
  • mto: This revision was merged to the branch mainline in revision 246.
  • Revision ID: kevin.dubois@canonical.com-20121113013629-q4496w4mp5e33auk
merge in base branch. move the demo clients to a new directory, examples/

Show diffs side-by-side

added added

removed removed

Lines of Context:
41
41
    MOCK_METHOD1(render, void(mg::Renderable&));
42
42
};
43
43
 
 
44
struct MockRenderable : mg::Renderable
 
45
{
 
46
    MOCK_CONST_METHOD0(top_left, geom::Point());
 
47
    MOCK_CONST_METHOD0(size, geom::Size());
 
48
    MOCK_CONST_METHOD0(texture, std::shared_ptr<mc::GraphicRegion>());
 
49
    MOCK_CONST_METHOD0(transformation, glm::mat4());
 
50
    MOCK_CONST_METHOD0(alpha, float());
 
51
    MOCK_CONST_METHOD0(hidden, bool());
 
52
};
 
53
 
44
54
struct MockRenderView : mc::RenderView
45
55
{
46
56
    MOCK_METHOD2(for_each_if, void(mc::FilterForRenderables&, mc::OperatorForRenderables&));
47
57
};
48
58
 
 
59
struct FakeRenderView : mc::RenderView
 
60
{
 
61
    FakeRenderView(std::vector<mg::Renderable*> renderables) :
 
62
        renderables(renderables)
 
63
    {
 
64
    }
 
65
 
 
66
    // Ugly...should we use delegation?
 
67
    void for_each_if(mc::FilterForRenderables& filter, mc::OperatorForRenderables& renderable_operator)
 
68
    {
 
69
        for (auto it = renderables.begin(); it != renderables.end(); it++)
 
70
        {
 
71
            mg::Renderable &renderable = **it;
 
72
            if (filter(renderable)) renderable_operator(renderable);
 
73
        }
 
74
    }
 
75
 
 
76
    std::vector<mg::Renderable*> renderables;
 
77
};
 
78
 
49
79
 
50
80
}
51
81
 
52
 
 
53
82
TEST(Compositor, render)
54
83
{
55
84
    using namespace testing;
77
106
 
78
107
    comp.render(&display);
79
108
}
 
109
 
 
110
TEST(Compositor, skips_invisible_rendererables)
 
111
{
 
112
    using namespace testing;
 
113
 
 
114
    MockSurfaceRenderer mock_renderer;
 
115
    std::shared_ptr<mg::Renderer> renderer(
 
116
        &mock_renderer,
 
117
        mir::EmptyDeleter());
 
118
    mg::MockDisplay display;
 
119
 
 
120
    EXPECT_CALL(display, view_area())
 
121
            .Times(1)
 
122
            .WillRepeatedly(Return(geom::Rectangle()));
 
123
    
 
124
    MockRenderable mr1, mr2, mr3;
 
125
    
 
126
    ON_CALL(mr1, hidden()).WillByDefault(Return(false));
 
127
    ON_CALL(mr2, hidden()).WillByDefault(Return(true));
 
128
    ON_CALL(mr3, hidden()).WillByDefault(Return(false));
 
129
    
 
130
    std::vector<mg::Renderable*> renderables;
 
131
    renderables.push_back(&mr1);
 
132
    renderables.push_back(&mr2);
 
133
    renderables.push_back(&mr3);
 
134
    
 
135
    EXPECT_CALL(mock_renderer, render(Ref(mr1))).Times(1);
 
136
    EXPECT_CALL(mock_renderer, render(Ref(mr2))).Times(0);
 
137
    EXPECT_CALL(mock_renderer, render(Ref(mr3))).Times(1);
 
138
    
 
139
    FakeRenderView render_view(renderables);
 
140
 
 
141
    mc::Compositor comp(&render_view, renderer);
 
142
    
 
143
    comp.render(&display);
 
144
}