Index: remoting/client/gl_renderer_unittest.cc |
diff --git a/remoting/client/gl_renderer_unittest.cc b/remoting/client/gl_renderer_unittest.cc |
index 1a17e42613203011e1cc34a504be33ae4680d2bc..6b629ee2b0b15f6d91850726ecb3ea252a2506d7 100644 |
--- a/remoting/client/gl_renderer_unittest.cc |
+++ b/remoting/client/gl_renderer_unittest.cc |
@@ -81,11 +81,41 @@ class FakeGlRendererDelegate : public GlRendererDelegate { |
base::WeakPtrFactory<FakeGlRendererDelegate> weak_factory_; |
}; |
+class FakeGlDrawable : public GlDrawable { |
+ public: |
+ FakeGlDrawable() : drawn_(0), id_(-1), weak_factory_(this) {} |
joedow
2016/12/22 00:29:03
nit: init the primitives inline and clean up the i
nicholss
2017/01/09 18:50:24
Done.
|
+ |
+ void SetId(int id) { id_ = id; } |
+ int GetId() { return id_; } |
+ |
+ base::WeakPtr<GlDrawable> GetWeakPtr() override { |
+ return weak_factory_.GetWeakPtr(); |
+ } |
+ |
+ void SetCanvas(GlCanvas* canvas) override { canvas_ = canvas; } |
+ |
+ bool Draw() override { |
+ drawn_++; |
+ return false; |
+ } |
+ |
+ int DrawnCount() { return drawn_; } |
+ |
+ private: |
+ int drawn_; |
+ int id_; |
+ GlCanvas* canvas_; |
+ |
+ base::WeakPtrFactory<FakeGlDrawable> weak_factory_; |
joedow
2016/12/22 00:29:03
DISALLOW_COPY_AND_ASSIGN macro?
nicholss
2017/01/09 18:50:24
Done.
|
+}; |
+ |
class GlRendererTest : public testing::Test { |
public: |
void SetUp() override; |
void SetDesktopFrameWithSize(const webrtc::DesktopSize& size); |
void PostSetDesktopFrameTasks(const webrtc::DesktopSize& size, int count); |
+ int GetDrawablesCount(); |
+ std::vector<base::WeakPtr<GlDrawable>> GetDrawables(); |
joedow
2016/12/22 00:29:03
Can this return a const ref so it doesn't need to
nicholss
2017/01/09 18:50:24
I don't think it matters for the test. It is 5 ele
|
protected: |
void RequestRender(); |
@@ -113,6 +143,14 @@ void GlRendererTest::RequestRender() { |
renderer_->RequestRender(); |
} |
+int GlRendererTest::GetDrawablesCount() { |
+ return (int)renderer_->drawables_.size(); |
+} |
+ |
+std::vector<base::WeakPtr<GlDrawable>> GlRendererTest::GetDrawables() { |
+ return renderer_->drawables_; |
+} |
+ |
void GlRendererTest::SetDesktopFrameWithSize(const webrtc::DesktopSize& size) { |
renderer_->OnFrameReceived( |
base::MakeUnique<webrtc::BasicDesktopFrame>(size), |
@@ -216,4 +254,110 @@ TEST_F(GlRendererTest, TestOnFrameReceivedDoneCallbacks) { |
// TODO(yuweih): Add tests to validate the rendered output. |
+TEST_F(GlRendererTest, TestAddDrawable) { |
+ FakeGlDrawable* drawable0 = new FakeGlDrawable(); |
+ drawable0->SetId(0); |
+ renderer_->AddDrawable(drawable0->GetWeakPtr()); |
+ EXPECT_EQ(1, GetDrawablesCount()); |
+} |
+ |
+TEST_F(GlRendererTest, TestAddDrawableDefaultOrder) { |
+ FakeGlDrawable* drawable0 = new FakeGlDrawable(); |
+ drawable0->SetId(0); |
+ renderer_->AddDrawable(drawable0->GetWeakPtr()); |
+ EXPECT_EQ(1, GetDrawablesCount()); |
joedow
2016/12/22 00:29:03
Why use EXPECT instead of ASSERT? Do you want the
nicholss
2017/01/09 18:50:24
I do not know how to unit test in chromium... Don'
Yuwei
2017/01/09 20:28:52
I think ASSERT will fail the test case and make th
|
+ |
+ FakeGlDrawable* drawable1 = new FakeGlDrawable(); |
+ drawable1->SetId(1); |
+ renderer_->AddDrawable(drawable1->GetWeakPtr()); |
+ EXPECT_EQ(2, GetDrawablesCount()); |
+ |
+ FakeGlDrawable* drawable2 = new FakeGlDrawable(); |
+ drawable2->SetId(2); |
+ renderer_->AddDrawable(drawable2->GetWeakPtr()); |
+ EXPECT_EQ(3, GetDrawablesCount()); |
+ |
+ std::vector<base::WeakPtr<GlDrawable>> drawables = GetDrawables(); |
+ int i = 0; |
+ for (auto& drawable : drawables) { |
joedow
2016/12/22 00:29:03
replace 'drawable' with GetDrawables() instead?
nicholss
2017/01/09 18:50:24
Done.
|
+ FakeGlDrawable* fg = (FakeGlDrawable*)drawable.get(); |
joedow
2016/12/22 00:29:03
can you use a c++ style cast instead a c style? r
nicholss
2017/01/09 18:50:24
Done.
|
+ EXPECT_EQ(i, fg->GetId()); |
+ i++; |
+ } |
+ EXPECT_EQ(3, i); |
+} |
+ |
+TEST_F(GlRendererTest, TestAddDrawableOrder) { |
+ FakeGlDrawable* drawable2 = new FakeGlDrawable(); |
+ drawable2->SetId(2); |
+ drawable2->SetZIndex(2); |
+ renderer_->AddDrawable(drawable2->GetWeakPtr()); |
+ EXPECT_EQ(1, GetDrawablesCount()); |
+ |
+ FakeGlDrawable* drawable0 = new FakeGlDrawable(); |
+ drawable0->SetId(0); |
+ renderer_->AddDrawable(drawable0->GetWeakPtr()); |
+ EXPECT_EQ(2, GetDrawablesCount()); |
+ |
+ FakeGlDrawable* drawable1 = new FakeGlDrawable(); |
+ drawable1->SetId(1); |
+ drawable1->SetZIndex(1); |
+ renderer_->AddDrawable(drawable1->GetWeakPtr()); |
+ EXPECT_EQ(3, GetDrawablesCount()); |
+ |
+ std::vector<base::WeakPtr<GlDrawable>> drawables = GetDrawables(); |
+ int i = 0; |
+ for (auto& drawable : drawables) { |
+ FakeGlDrawable* fg = (FakeGlDrawable*)drawable.get(); |
+ EXPECT_EQ(i, fg->GetId()); |
+ i++; |
+ } |
+ EXPECT_EQ(3, i); |
+} |
+ |
+TEST_F(GlRendererTest, TestAddDrawableDrawn) { |
+ renderer_->OnSurfaceCreated(-1); |
+ |
+ delegate_.can_render_frame_ = true; |
+ PostSetDesktopFrameTasks(webrtc::DesktopSize(16, 16), 1); |
+ |
+ FakeGlDrawable* drawable0 = new FakeGlDrawable(); |
+ drawable0->SetId(3); |
+ renderer_->AddDrawable(drawable0->GetWeakPtr()); |
+ |
+ RequestRender(); |
+ RunTasksInCurrentQueue(); |
+ |
+ FakeGlDrawable* drawable1 = new FakeGlDrawable(); |
+ drawable1->SetId(2); |
+ drawable1->SetZIndex(1); |
+ renderer_->AddDrawable(drawable1->GetWeakPtr()); |
+ |
+ RequestRender(); |
+ RunTasksInCurrentQueue(); |
+ |
+ FakeGlDrawable* drawable2 = new FakeGlDrawable(); |
+ drawable2->SetId(1); |
+ drawable2->SetZIndex(2); |
+ renderer_->AddDrawable(drawable2->GetWeakPtr()); |
+ EXPECT_EQ(3, GetDrawablesCount()); |
+ |
+ RequestRender(); |
+ RunTasksInCurrentQueue(); |
+ std::vector<base::WeakPtr<GlDrawable>> drawables = GetDrawables(); |
+ for (auto& drawable : drawables) { |
+ FakeGlDrawable* fg = (FakeGlDrawable*)drawable.get(); |
+ EXPECT_EQ(fg->GetId(), fg->DrawnCount()); |
+ } |
+} |
+ |
+TEST_F(GlRendererTest, TestCreateGlRendererWithDesktop) { |
+ renderer_.reset(GlRenderer::CreateGlRendererWithDesktop()); |
+ renderer_->SetDelegate(delegate_.GetWeakPtr()); |
+ EXPECT_EQ(3, GetDrawablesCount()); |
+} |
+ |
+// TODO(nicholss): Add a test where the drawable is destructed and the renderer |
+// gets a dead weakptr. |
+ |
} // namespace remoting |