Skip to content

Commit

Permalink
feat: Add UT for DSGBlurNode
Browse files Browse the repository at this point in the history
  Add UT.
  • Loading branch information
18202781743 authored and FeiWang1119 committed Aug 4, 2023
1 parent 65258be commit e626808
Show file tree
Hide file tree
Showing 6 changed files with 127 additions and 0 deletions.
1 change: 1 addition & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ file(GLOB TEST_SOURCES
ut_dquickdciiconimage.cpp
ut_dmaskeffectnode.cpp
ut_dquickdciicon.cpp
ut_dblurimagenode.cpp
)
if (EnableDtk5)
list(APPEND TEST_SOURCES
Expand Down
2 changes: 2 additions & 0 deletions tests/data.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
<qresource prefix="/">
<file>data/dconf-example.meta.json</file>
<file>icon/red.svg</file>
<file>icon/deepin.png</file>
<file>qml/ColorSelector_GetColorFromProperty.qml</file>
<file>qml/CustomThemeMenu.qml</file>
<file>qml/WindowButtonGroup.qml</file>
Expand All @@ -24,5 +25,6 @@
<file>qml/DciIcon.qml</file>
<file>qml/DMaskEffectNode.qml</file>
<file>qml/DMaskEffectNode_TextureMaterial.qml</file>
<file>qml/DSGBlurImageNode.qml</file>
</qresource>
</RCC>
Binary file added tests/icon/deepin.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions tests/qml/DSGBlurImageNode.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later

import test 1.0

DSGBlurImageNodeItem {
opacity: 1
width: 100; height: 100
}
7 changes: 7 additions & 0 deletions tests/test_helper.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,13 @@ namespace TestUtil {
return QSGPlainTexture::fromImage(image);
}

Q_GLOBAL_STATIC_WITH_ARGS(QImage, simpleImage, (":/icon/deepin.png"))
inline QSGTexture *imageTexture(const QSize &size = QSize(100, 100))
{
QImage tmp = simpleImage->scaled(size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
return QSGPlainTexture::fromImage(tmp);
}

template<class T>
inline void registerType(const char* type)
{
Expand Down
107 changes: 107 additions & 0 deletions tests/ut_dblurimagenode.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later

#include <gtest/gtest.h>

#include "test_helper.hpp"

#include <QQuickItem>
#include <QSGRectangleNode>
#include <QSignalSpy>

#ifndef QT_NO_OPENGL
#include <QOpenGLFramebufferObject>
#endif

#include "dblurimagenode_p.h"
DQUICK_USE_NAMESPACE

class DSGBlurImageNodeItem : public QQuickItem
{
Q_OBJECT
public:
DSGBlurImageNodeItem()
: QQuickItem()
{
setFlag(ItemHasContents, true);
}

protected:
QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override
{
QSGRectangleNode *node = static_cast<QSGRectangleNode *>(oldNode);
const auto ga = window()->rendererInterface()->graphicsApi();
if (!node) {
node = window()->createRectangleNode();

DSGBlurNode *blurNode = nullptr;
do {
if (ga == QSGRendererInterface::Software) {
blurNode = new DSoftwareBlurImageNode(this);
} else if (TestUtil::supportOpengl(ga)) {
#ifndef QT_NO_OPENGL
blurNode = new DOpenGLBlurEffectNode(this);
#endif
}
if (!blurNode)
break;

blurNode->setTexture(TestUtil::imageTexture());
blurNode->setRenderCallback([](DSGBlurNode *node, void *argu) -> void {
auto item = reinterpret_cast<DSGBlurImageNodeItem*>(argu);
ASSERT_TRUE(item);
Q_EMIT item->callbackCalled();
if (auto tmp = dynamic_cast<DSoftwareBlurImageNode *>(node)) {
item->nodeTextureImg = tmp->cachedSource;
}
else {
#ifndef QT_NO_OPENGL
if (auto tmp = dynamic_cast<DOpenGLBlurEffectNode *>(node)) {
item->nodeTextureImg = tmp->m_fboVector[0]->toImage();
}
#endif
}
}, this);

blurNode->setOffscreen(false);
blurNode->setBlendColor(TestUtil::simpleColor);
blurNode->setRadius(10);
blurNode->setRect(QRectF(0, 0, 100, 100));
blurNode->setSourceRect(QRectF(0, 0, 100, 100));

} while(false);

if (blurNode)
node->appendChildNode(blurNode);
}

node->setRect(this->boundingRect());

return node;
}

signals:
void callbackCalled();

public:
QImage nodeTextureImg;
};

TEST(ut_DSGBlurImageNode, properties)
{
TestUtil::registerType<DSGBlurImageNodeItem>("DSGBlurImageNodeItem");
QuickViewHelper<DSGBlurImageNodeItem> helper;
ASSERT_TRUE(helper.load("qrc:/qml/DSGBlurImageNode.qml"));

auto target = helper.object;
ASSERT_TRUE(target);
QSignalSpy spy(target, SIGNAL(callbackCalled()));
helper.requestExposed();

EXPECT_GE(spy.count(), 1);

EXPECT_NE(TestUtil::simpleImage->pixelColor(QPoint(50, 50)), target->nodeTextureImg.pixelColor(QPoint(50, 50)));
}

#include "ut_dblurimagenode.moc"

0 comments on commit e626808

Please sign in to comment.