Index: webkit/compositor/WebLayerTest.cpp |
diff --git a/webkit/compositor/WebLayerTest.cpp b/webkit/compositor/WebLayerTest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..18dc0442118e536304d8e4147cf38a1ab3fecbc7 |
--- /dev/null |
+++ b/webkit/compositor/WebLayerTest.cpp |
@@ -0,0 +1,155 @@ |
+// Copyright 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "config.h" |
+#include <public/WebLayer.h> |
+ |
+#include "CompositorFakeWebGraphicsContext3D.h" |
+#include "WebLayerImpl.h" |
+#include "WebLayerTreeViewTestCommon.h" |
+#include <public/WebCompositor.h> |
+#include <public/WebContentLayer.h> |
+#include <public/WebContentLayerClient.h> |
+#include <public/WebExternalTextureLayer.h> |
+#include <public/WebFloatPoint.h> |
+#include <public/WebFloatRect.h> |
+#include <public/WebLayerTreeView.h> |
+#include <public/WebLayerTreeViewClient.h> |
+#include <public/WebRect.h> |
+#include <public/WebSize.h> |
+ |
+#include <gmock/gmock.h> |
+ |
+using namespace WebKit; |
+using testing::AnyNumber; |
+using testing::AtLeast; |
+using testing::Mock; |
+using testing::Test; |
+using testing::_; |
+ |
+namespace { |
+ |
+class MockWebContentLayerClient : public WebContentLayerClient { |
+public: |
+ MOCK_METHOD3(paintContents, void(WebCanvas*, const WebRect& clip, WebFloatRect& opaque)); |
+}; |
+ |
+class WebLayerTest : public Test { |
+public: |
+ virtual void SetUp() |
+ { |
+ // Initialize without threading support. |
+ WebKit::WebCompositor::initialize(0); |
+ m_rootLayer = adoptPtr(WebLayer::create()); |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AnyNumber()); |
+ EXPECT_TRUE(m_view = adoptPtr(WebLayerTreeView::create(&m_client, *m_rootLayer, WebLayerTreeView::Settings()))); |
+ Mock::VerifyAndClearExpectations(&m_client); |
+ } |
+ |
+ virtual void TearDown() |
+ { |
+ // We may get any number of scheduleComposite calls during shutdown. |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AnyNumber()); |
+ m_rootLayer.clear(); |
+ m_view.clear(); |
+ WebKit::WebCompositor::shutdown(); |
+ } |
+ |
+protected: |
+ MockWebLayerTreeViewClient m_client; |
+ OwnPtr<WebLayer> m_rootLayer; |
+ OwnPtr<WebLayerTreeView> m_view; |
+}; |
+ |
+// Tests that the client gets called to ask for a composite if we change the |
+// fields. |
+TEST_F(WebLayerTest, Client) |
+{ |
+ // Base layer. |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AnyNumber()); |
+ OwnPtr<WebLayer> layer = adoptPtr(WebLayer::create()); |
+ m_rootLayer->addChild(layer.get()); |
+ Mock::VerifyAndClearExpectations(&m_client); |
+ |
+ WebFloatPoint point(3, 4); |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AtLeast(1)); |
+ layer->setAnchorPoint(point); |
+ Mock::VerifyAndClearExpectations(&m_client); |
+ EXPECT_EQ(point, layer->anchorPoint()); |
+ |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AtLeast(1)); |
+ float anchorZ = 5; |
+ layer->setAnchorPointZ(anchorZ); |
+ Mock::VerifyAndClearExpectations(&m_client); |
+ EXPECT_EQ(anchorZ, layer->anchorPointZ()); |
+ |
+ WebSize size(7, 8); |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AtLeast(1)); |
+ layer->setBounds(size); |
+ Mock::VerifyAndClearExpectations(&m_client); |
+ EXPECT_EQ(size, layer->bounds()); |
+ |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AtLeast(1)); |
+ layer->setMasksToBounds(true); |
+ Mock::VerifyAndClearExpectations(&m_client); |
+ EXPECT_TRUE(layer->masksToBounds()); |
+ |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AnyNumber()); |
+ OwnPtr<WebLayer> otherLayer = adoptPtr(WebLayer::create()); |
+ m_rootLayer->addChild(otherLayer.get()); |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AtLeast(1)); |
+ layer->setMaskLayer(otherLayer.get()); |
+ Mock::VerifyAndClearExpectations(&m_client); |
+ |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AtLeast(1)); |
+ float opacity = 0.123f; |
+ layer->setOpacity(opacity); |
+ Mock::VerifyAndClearExpectations(&m_client); |
+ EXPECT_EQ(opacity, layer->opacity()); |
+ |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AtLeast(1)); |
+ layer->setOpaque(true); |
+ Mock::VerifyAndClearExpectations(&m_client); |
+ EXPECT_TRUE(layer->opaque()); |
+ |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AtLeast(1)); |
+ layer->setPosition(point); |
+ Mock::VerifyAndClearExpectations(&m_client); |
+ EXPECT_EQ(point, layer->position()); |
+ |
+ // Texture layer. |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AnyNumber()); |
+ OwnPtr<WebExternalTextureLayer> textureLayer = adoptPtr(WebExternalTextureLayer::create()); |
+ m_rootLayer->addChild(textureLayer->layer()); |
+ Mock::VerifyAndClearExpectations(&m_client); |
+ |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AtLeast(1)); |
+ textureLayer->setTextureId(3); |
+ Mock::VerifyAndClearExpectations(&m_client); |
+ |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AtLeast(1)); |
+ textureLayer->setFlipped(true); |
+ Mock::VerifyAndClearExpectations(&m_client); |
+ |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AtLeast(1)); |
+ WebFloatRect uvRect(0.1f, 0.1f, 0.9f, 0.9f); |
+ textureLayer->setUVRect(uvRect); |
+ Mock::VerifyAndClearExpectations(&m_client); |
+ |
+ |
+ // Content layer. |
+ MockWebContentLayerClient contentClient; |
+ EXPECT_CALL(contentClient, paintContents(_, _, _)).Times(AnyNumber()); |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AnyNumber()); |
+ OwnPtr<WebContentLayer> contentLayer = adoptPtr(WebContentLayer::create(&contentClient)); |
+ m_rootLayer->addChild(contentLayer->layer()); |
+ Mock::VerifyAndClearExpectations(&m_client); |
+ |
+ EXPECT_CALL(m_client, scheduleComposite()).Times(AtLeast(1)); |
+ contentLayer->layer()->setDrawsContent(false); |
+ Mock::VerifyAndClearExpectations(&m_client); |
+ EXPECT_FALSE(contentLayer->layer()->drawsContent()); |
+} |
+ |
+} |