summaryrefslogtreecommitdiffstats
path: root/Source/WebKit/chromium/tests/LinkHighlightTest.cpp
blob: be467a0d5af2f8a50872200e2ecc20e2a1f4909e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*
 * Copyright (C) 2012 Google Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1.  Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 * 2.  Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include "config.h"

#include "LinkHighlight.h"

#include "AnimationIdVendor.h"
#include "GraphicsLayerChromium.h"
#include "GraphicsLayerClient.h"
#include "IntRect.h"
#include "Path.h"
#include <gtest/gtest.h>
#include <public/WebTransformationMatrix.h>
#include <wtf/PassOwnPtr.h>

using namespace WebCore;
using WebKit::WebTransformationMatrix;

namespace {

class MockGraphicsLayerClient : public GraphicsLayerClient {
public:
    virtual void notifyAnimationStarted(const GraphicsLayer*, double time) OVERRIDE { }
    virtual void notifySyncRequired(const GraphicsLayer*) OVERRIDE { }
    virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const IntRect& inClip) OVERRIDE { }
    virtual bool showDebugBorders(const GraphicsLayer*) const OVERRIDE { return false; }
    virtual bool showRepaintCounter(const GraphicsLayer*) const OVERRIDE { return false; }
};

TEST(LinkHighlightTest, verifyLinkHighlightLayer)
{
    Path highlightPath;
    highlightPath.addRect(FloatRect(5, 6, 12, 8));
    IntRect pathBoundingRect = enclosingIntRect(highlightPath.boundingRect());

    RefPtr<LinkHighlight> highlight = LinkHighlight::create(0, highlightPath, AnimationIdVendor::LinkHighlightAnimationId, AnimationIdVendor::getNextGroupId());
    ASSERT_TRUE(highlight.get());
    ContentLayerChromium* contentLayer = highlight->contentLayer();
    ASSERT_TRUE(contentLayer);

    EXPECT_EQ(pathBoundingRect.size(), contentLayer->bounds());
    EXPECT_TRUE(contentLayer->transform().isIdentityOrTranslation());
    EXPECT_TRUE(contentLayer->transform().isIntegerTranslation());

    float expectedXTranslation = pathBoundingRect.x() + pathBoundingRect.width() / 2;
    float expectedYTranslation = pathBoundingRect.y() + pathBoundingRect.height() / 2;
    EXPECT_FLOAT_EQ(expectedXTranslation, contentLayer->transform().m41());
    EXPECT_FLOAT_EQ(expectedYTranslation, contentLayer->transform().m42());
}

TEST(LinkHighlightTest, verifyGraphicsLayerChromiumEmbedding)
{
    MockGraphicsLayerClient client;
    OwnPtr<GraphicsLayerChromium> graphicsLayer = static_pointer_cast<GraphicsLayerChromium>(GraphicsLayer::create(&client));
    ASSERT_TRUE(graphicsLayer.get());

    Path highlightPath;
    highlightPath.addRect(FloatRect(5, 5, 10, 8));

    // Neither of the following operations should crash.
    graphicsLayer->addLinkHighlight(highlightPath);
    graphicsLayer->didFinishLinkHighlight();
}

} // namespace