You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
273 lines
8.9 KiB
273 lines
8.9 KiB
/* |
|
KWin - the KDE window manager |
|
This file is part of the KDE project. |
|
|
|
SPDX-FileCopyrightText: 2012 Martin Gräßlin <mgraesslin@kde.org> |
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later |
|
*/ |
|
|
|
#include <kwineffects.h> |
|
|
|
#include <QMatrix4x4> |
|
#include <QVector2D> |
|
#include <QVector3D> |
|
|
|
#include <QtTest> |
|
|
|
using namespace KWin; |
|
|
|
class TestScreenPaintData : public QObject |
|
{ |
|
Q_OBJECT |
|
private Q_SLOTS: |
|
|
|
void testCtor(); |
|
void testCopyCtor(); |
|
void testAssignmentOperator(); |
|
void testSetScale(); |
|
void testOperatorMultiplyAssign(); |
|
void testSetTranslate(); |
|
void testOperatorPlus(); |
|
void testSetAngle(); |
|
void testSetRotationOrigin(); |
|
void testSetRotationAxis(); |
|
}; |
|
|
|
void TestScreenPaintData::testCtor() |
|
{ |
|
ScreenPaintData data; |
|
QCOMPARE(data.xScale(), 1.0); |
|
QCOMPARE(data.yScale(), 1.0); |
|
QCOMPARE(data.zScale(), 1.0); |
|
QCOMPARE(data.xTranslation(), 0.0); |
|
QCOMPARE(data.yTranslation(), 0.0); |
|
QCOMPARE(data.zTranslation(), 0.0); |
|
QCOMPARE(data.translation(), QVector3D()); |
|
QCOMPARE(data.rotationAngle(), 0.0); |
|
QCOMPARE(data.rotationOrigin(), QVector3D()); |
|
QCOMPARE(data.rotationAxis(), QVector3D(0.0, 0.0, 1.0)); |
|
QCOMPARE(data.screen(), nullptr); |
|
} |
|
|
|
void TestScreenPaintData::testCopyCtor() |
|
{ |
|
ScreenPaintData data; |
|
ScreenPaintData data2(data); |
|
// no value had been changed |
|
QCOMPARE(data2.xScale(), 1.0); |
|
QCOMPARE(data2.yScale(), 1.0); |
|
QCOMPARE(data2.zScale(), 1.0); |
|
QCOMPARE(data2.xTranslation(), 0.0); |
|
QCOMPARE(data2.yTranslation(), 0.0); |
|
QCOMPARE(data2.zTranslation(), 0.0); |
|
QCOMPARE(data2.translation(), QVector3D()); |
|
QCOMPARE(data2.rotationAngle(), 0.0); |
|
QCOMPARE(data2.rotationOrigin(), QVector3D()); |
|
QCOMPARE(data2.rotationAxis(), QVector3D(0.0, 0.0, 1.0)); |
|
|
|
data2.setScale(QVector3D(0.5, 2.0, 3.0)); |
|
data2.translate(0.5, 2.0, 3.0); |
|
data2.setRotationAngle(45.0); |
|
data2.setRotationOrigin(QVector3D(1.0, 2.0, 3.0)); |
|
data2.setRotationAxis(QVector3D(1.0, 1.0, 0.0)); |
|
|
|
ScreenPaintData data3(data2); |
|
QCOMPARE(data3.xScale(), 0.5); |
|
QCOMPARE(data3.yScale(), 2.0); |
|
QCOMPARE(data3.zScale(), 3.0); |
|
QCOMPARE(data3.xTranslation(), 0.5); |
|
QCOMPARE(data3.yTranslation(), 2.0); |
|
QCOMPARE(data3.zTranslation(), 3.0); |
|
QCOMPARE(data3.translation(), QVector3D(0.5, 2.0, 3.0)); |
|
QCOMPARE(data3.rotationAngle(), 45.0); |
|
QCOMPARE(data3.rotationOrigin(), QVector3D(1.0, 2.0, 3.0)); |
|
QCOMPARE(data3.rotationAxis(), QVector3D(1.0, 1.0, 0.0)); |
|
} |
|
|
|
void TestScreenPaintData::testAssignmentOperator() |
|
{ |
|
ScreenPaintData data; |
|
ScreenPaintData data2; |
|
|
|
data2.setScale(QVector3D(0.5, 2.0, 3.0)); |
|
data2.translate(0.5, 2.0, 3.0); |
|
data2.setRotationAngle(45.0); |
|
data2.setRotationOrigin(QVector3D(1.0, 2.0, 3.0)); |
|
data2.setRotationAxis(QVector3D(1.0, 1.0, 0.0)); |
|
|
|
data = data2; |
|
// data and data2 should be the same |
|
QCOMPARE(data.xScale(), 0.5); |
|
QCOMPARE(data.yScale(), 2.0); |
|
QCOMPARE(data.zScale(), 3.0); |
|
QCOMPARE(data.xTranslation(), 0.5); |
|
QCOMPARE(data.yTranslation(), 2.0); |
|
QCOMPARE(data.zTranslation(), 3.0); |
|
QCOMPARE(data.translation(), QVector3D(0.5, 2.0, 3.0)); |
|
QCOMPARE(data.rotationAngle(), 45.0); |
|
QCOMPARE(data.rotationOrigin(), QVector3D(1.0, 2.0, 3.0)); |
|
QCOMPARE(data.rotationAxis(), QVector3D(1.0, 1.0, 0.0)); |
|
// data 2 |
|
QCOMPARE(data2.xScale(), 0.5); |
|
QCOMPARE(data2.yScale(), 2.0); |
|
QCOMPARE(data2.zScale(), 3.0); |
|
QCOMPARE(data2.xTranslation(), 0.5); |
|
QCOMPARE(data2.yTranslation(), 2.0); |
|
QCOMPARE(data2.zTranslation(), 3.0); |
|
QCOMPARE(data2.translation(), QVector3D(0.5, 2.0, 3.0)); |
|
QCOMPARE(data2.rotationAngle(), 45.0); |
|
QCOMPARE(data2.rotationOrigin(), QVector3D(1.0, 2.0, 3.0)); |
|
QCOMPARE(data2.rotationAxis(), QVector3D(1.0, 1.0, 0.0)); |
|
} |
|
|
|
void TestScreenPaintData::testSetScale() |
|
{ |
|
ScreenPaintData data; |
|
// without anything set, it's 1.0 on all axis |
|
QCOMPARE(data.xScale(), 1.0); |
|
QCOMPARE(data.yScale(), 1.0); |
|
QCOMPARE(data.zScale(), 1.0); |
|
// changing xScale should not affect y and z |
|
data.setXScale(2.0); |
|
QCOMPARE(data.xScale(), 2.0); |
|
QCOMPARE(data.yScale(), 1.0); |
|
QCOMPARE(data.zScale(), 1.0); |
|
// changing yScale should not affect x and z |
|
data.setYScale(3.0); |
|
QCOMPARE(data.xScale(), 2.0); |
|
QCOMPARE(data.yScale(), 3.0); |
|
QCOMPARE(data.zScale(), 1.0); |
|
// changing zScale should not affect x and y |
|
data.setZScale(4.0); |
|
QCOMPARE(data.xScale(), 2.0); |
|
QCOMPARE(data.yScale(), 3.0); |
|
QCOMPARE(data.zScale(), 4.0); |
|
// setting a vector2d should affect x and y components |
|
data.setScale(QVector2D(0.5, 2.0)); |
|
QCOMPARE(data.xScale(), 0.5); |
|
QCOMPARE(data.yScale(), 2.0); |
|
QCOMPARE(data.zScale(), 4.0); |
|
// setting a vector3d should affect all components |
|
data.setScale(QVector3D(1.5, 2.5, 3.5)); |
|
QCOMPARE(data.xScale(), 1.5); |
|
QCOMPARE(data.yScale(), 2.5); |
|
QCOMPARE(data.zScale(), 3.5); |
|
} |
|
|
|
void TestScreenPaintData::testOperatorMultiplyAssign() |
|
{ |
|
ScreenPaintData data; |
|
// without anything set, it's 1.0 on all axis |
|
QCOMPARE(data.xScale(), 1.0); |
|
QCOMPARE(data.yScale(), 1.0); |
|
QCOMPARE(data.zScale(), 1.0); |
|
// multiplying by a factor should set all components |
|
data *= 2.0; |
|
QCOMPARE(data.xScale(), 2.0); |
|
QCOMPARE(data.yScale(), 2.0); |
|
QCOMPARE(data.zScale(), 2.0); |
|
// multiplying by a vector2D should set x and y components |
|
data *= QVector2D(2.0, 3.0); |
|
QCOMPARE(data.xScale(), 4.0); |
|
QCOMPARE(data.yScale(), 6.0); |
|
QCOMPARE(data.zScale(), 2.0); |
|
// multiplying by a vector3d should set all components |
|
data *= QVector3D(0.5, 1.5, 2.0); |
|
QCOMPARE(data.xScale(), 2.0); |
|
QCOMPARE(data.yScale(), 9.0); |
|
QCOMPARE(data.zScale(), 4.0); |
|
} |
|
|
|
void TestScreenPaintData::testSetTranslate() |
|
{ |
|
ScreenPaintData data; |
|
QCOMPARE(data.xTranslation(), 0.0); |
|
QCOMPARE(data.yTranslation(), 0.0); |
|
QCOMPARE(data.zTranslation(), 0.0); |
|
QCOMPARE(data.translation(), QVector3D()); |
|
// set x translate, should not affect y and z |
|
data.setXTranslation(1.0); |
|
QCOMPARE(data.xTranslation(), 1.0); |
|
QCOMPARE(data.yTranslation(), 0.0); |
|
QCOMPARE(data.zTranslation(), 0.0); |
|
QCOMPARE(data.translation(), QVector3D(1.0, 0.0, 0.0)); |
|
// set y translate, should not affect x and z |
|
data.setYTranslation(2.0); |
|
QCOMPARE(data.xTranslation(), 1.0); |
|
QCOMPARE(data.yTranslation(), 2.0); |
|
QCOMPARE(data.zTranslation(), 0.0); |
|
QCOMPARE(data.translation(), QVector3D(1.0, 2.0, 0.0)); |
|
// set z translate, should not affect x and y |
|
data.setZTranslation(3.0); |
|
QCOMPARE(data.xTranslation(), 1.0); |
|
QCOMPARE(data.yTranslation(), 2.0); |
|
QCOMPARE(data.zTranslation(), 3.0); |
|
QCOMPARE(data.translation(), QVector3D(1.0, 2.0, 3.0)); |
|
// translate in x |
|
data.translate(0.5); |
|
QCOMPARE(data.translation(), QVector3D(1.5, 2.0, 3.0)); |
|
// translate in x and y |
|
data.translate(0.5, 0.75); |
|
QCOMPARE(data.translation(), QVector3D(2.0, 2.75, 3.0)); |
|
// translate in x, y and z |
|
data.translate(1.0, 2.0, 3.0); |
|
QCOMPARE(data.translation(), QVector3D(3.0, 4.75, 6.0)); |
|
// translate using vector |
|
data.translate(QVector3D(2.0, 1.0, 0.5)); |
|
QCOMPARE(data.translation(), QVector3D(5.0, 5.75, 6.5)); |
|
} |
|
|
|
void TestScreenPaintData::testOperatorPlus() |
|
{ |
|
ScreenPaintData data; |
|
QCOMPARE(data.xTranslation(), 0.0); |
|
QCOMPARE(data.yTranslation(), 0.0); |
|
QCOMPARE(data.zTranslation(), 0.0); |
|
QCOMPARE(data.translation(), QVector3D()); |
|
// test with point |
|
data += QPoint(1, 2); |
|
QCOMPARE(data.translation(), QVector3D(1.0, 2.0, 0.0)); |
|
// test with pointf |
|
data += QPointF(0.5, 0.75); |
|
QCOMPARE(data.translation(), QVector3D(1.5, 2.75, 0.0)); |
|
// test with QVector2D |
|
data += QVector2D(0.25, 1.5); |
|
QCOMPARE(data.translation(), QVector3D(1.75, 4.25, 0.0)); |
|
// test with QVector3D |
|
data += QVector3D(1.0, 2.0, 3.5); |
|
QCOMPARE(data.translation(), QVector3D(2.75, 6.25, 3.5)); |
|
} |
|
|
|
void TestScreenPaintData::testSetAngle() |
|
{ |
|
ScreenPaintData data; |
|
QCOMPARE(data.rotationAngle(), 0.0); |
|
data.setRotationAngle(20.0); |
|
QCOMPARE(data.rotationAngle(), 20.0); |
|
} |
|
|
|
void TestScreenPaintData::testSetRotationOrigin() |
|
{ |
|
ScreenPaintData data; |
|
QCOMPARE(data.rotationOrigin(), QVector3D()); |
|
data.setRotationOrigin(QVector3D(1.0, 2.0, 3.0)); |
|
QCOMPARE(data.rotationOrigin(), QVector3D(1.0, 2.0, 3.0)); |
|
} |
|
|
|
void TestScreenPaintData::testSetRotationAxis() |
|
{ |
|
ScreenPaintData data; |
|
QCOMPARE(data.rotationAxis(), QVector3D(0.0, 0.0, 1.0)); |
|
data.setRotationAxis(Qt::XAxis); |
|
QCOMPARE(data.rotationAxis(), QVector3D(1.0, 0.0, 0.0)); |
|
data.setRotationAxis(Qt::YAxis); |
|
QCOMPARE(data.rotationAxis(), QVector3D(0.0, 1.0, 0.0)); |
|
data.setRotationAxis(Qt::ZAxis); |
|
QCOMPARE(data.rotationAxis(), QVector3D(0.0, 0.0, 1.0)); |
|
data.setRotationAxis(QVector3D(1.0, 1.0, 0.0)); |
|
QCOMPARE(data.rotationAxis(), QVector3D(1.0, 1.0, 0.0)); |
|
} |
|
|
|
QTEST_MAIN(TestScreenPaintData) |
|
#include "test_screen_paint_data.moc"
|
|
|