As in the past, to avoid rewriting various autotests that contain line-number information, an extra blank line has been inserted at the end of the license text to ensure that this commit does not change the total number of lines in the license header. Change-Id: I20e5215108c6ebd5f8474fed5c3665118e4791e6 Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
807 lines
20 KiB
C++
807 lines
20 KiB
C++
/****************************************************************************
|
|
**
|
|
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
|
** Contact: http://www.qt-project.org/
|
|
**
|
|
** This file is part of the Qt Toolkit.
|
|
**
|
|
** $QT_BEGIN_LICENSE:LGPL$
|
|
** GNU Lesser General Public License Usage
|
|
** This file may be used under the terms of the GNU Lesser General Public
|
|
** License version 2.1 as published by the Free Software Foundation and
|
|
** appearing in the file LICENSE.LGPL included in the packaging of this
|
|
** file. Please review the following information to ensure the GNU Lesser
|
|
** General Public License version 2.1 requirements will be met:
|
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
**
|
|
** In addition, as a special exception, Nokia gives you certain additional
|
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
|
**
|
|
** GNU General Public License Usage
|
|
** Alternatively, this file may be used under the terms of the GNU General
|
|
** Public License version 3.0 as published by the Free Software Foundation
|
|
** and appearing in the file LICENSE.GPL included in the packaging of this
|
|
** file. Please review the following information to ensure the GNU General
|
|
** Public License version 3.0 requirements will be met:
|
|
** http://www.gnu.org/copyleft/gpl.html.
|
|
**
|
|
** Other Usage
|
|
** Alternatively, this file may be used in accordance with the terms and
|
|
** conditions contained in a signed written agreement between you and Nokia.
|
|
**
|
|
**
|
|
**
|
|
**
|
|
**
|
|
**
|
|
** $QT_END_LICENSE$
|
|
**
|
|
****************************************************************************/
|
|
|
|
//TESTED_COMPONENT=src/multimedia
|
|
|
|
#include <QtTest/QtTest>
|
|
#include <QtCore/qdebug.h>
|
|
|
|
#include <qmediatimerange.h>
|
|
#include <qmediatimerange.h>
|
|
|
|
QT_USE_NAMESPACE
|
|
|
|
class tst_QMediaTimeRange: public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public slots:
|
|
|
|
private slots:
|
|
void testCtor();
|
|
void testIntervalCtor();
|
|
void testGetters();
|
|
void testAssignment();
|
|
void testIntervalNormalize();
|
|
void testIntervalTranslate();
|
|
void testIntervalContains();
|
|
void testEarliestLatest();
|
|
void testContains();
|
|
void testAddInterval();
|
|
void testAddTimeRange();
|
|
void testRemoveInterval();
|
|
void testRemoveTimeRange();
|
|
void testClear();
|
|
void testComparisons();
|
|
void testArithmetic();
|
|
};
|
|
|
|
void tst_QMediaTimeRange::testIntervalCtor()
|
|
{
|
|
//Default Ctor for Time Interval
|
|
/* create an instance for the time interval and verify the default cases */
|
|
QMediaTimeInterval tInter;
|
|
QVERIFY(tInter.isNormal());
|
|
QVERIFY(tInter.start() == 0);
|
|
QVERIFY(tInter.end() == 0);
|
|
|
|
// (qint, qint) Ctor time interval
|
|
/* create an instace of QMediaTimeInterval passing start and end times and verify the all possible scenario's*/
|
|
QMediaTimeInterval time(20,50);
|
|
QVERIFY(time.isNormal());
|
|
QVERIFY(time.start() == 20);
|
|
QVERIFY(time.end() == 50);
|
|
|
|
// Copy Ctor Time interval
|
|
QMediaTimeInterval other(time);
|
|
QVERIFY(other.isNormal() == time.isNormal());
|
|
QVERIFY(other.start() == time.start());
|
|
QVERIFY(other.end() == time.end());
|
|
QVERIFY(other.contains(20) == time.contains(20));
|
|
QVERIFY(other == time);
|
|
}
|
|
|
|
void tst_QMediaTimeRange::testIntervalContains()
|
|
{
|
|
QMediaTimeInterval time(20,50);
|
|
|
|
/* start() <= time <= end(). Returns true if the time interval contains the specified time. */
|
|
QVERIFY(!time.contains(10));
|
|
QVERIFY(time.contains(20));
|
|
QVERIFY(time.contains(30));
|
|
QVERIFY(time.contains(50));
|
|
QVERIFY(!time.contains(60));
|
|
|
|
QMediaTimeInterval x(20, 10); // denormal
|
|
|
|
// Check denormal ranges
|
|
QVERIFY(!x.contains(5));
|
|
QVERIFY(x.contains(10));
|
|
QVERIFY(x.contains(15));
|
|
QVERIFY(x.contains(20));
|
|
QVERIFY(!x.contains(25));
|
|
|
|
QMediaTimeInterval y = x.normalized();
|
|
QVERIFY(!y.contains(5));
|
|
QVERIFY(y.contains(10));
|
|
QVERIFY(y.contains(15));
|
|
QVERIFY(y.contains(20));
|
|
QVERIFY(!y.contains(25));
|
|
}
|
|
|
|
void tst_QMediaTimeRange::testCtor()
|
|
{
|
|
// Default Ctor
|
|
QMediaTimeRange a;
|
|
QVERIFY(a.isEmpty());
|
|
|
|
// (qint, qint) Ctor
|
|
QMediaTimeRange b(10, 20);
|
|
|
|
QVERIFY(!b.isEmpty());
|
|
QVERIFY(b.isContinuous());
|
|
QVERIFY(b.earliestTime() == 10);
|
|
QVERIFY(b.latestTime() == 20);
|
|
|
|
// Interval Ctor
|
|
QMediaTimeRange c(QMediaTimeInterval(30, 40));
|
|
|
|
QVERIFY(!c.isEmpty());
|
|
QVERIFY(c.isContinuous());
|
|
QVERIFY(c.earliestTime() == 30);
|
|
QVERIFY(c.latestTime() == 40);
|
|
|
|
// Abnormal Interval Ctor
|
|
QMediaTimeRange d(QMediaTimeInterval(20, 10));
|
|
|
|
QVERIFY(d.isEmpty());
|
|
|
|
// Copy Ctor
|
|
QMediaTimeRange e(b);
|
|
|
|
QVERIFY(!e.isEmpty());
|
|
QVERIFY(e.isContinuous());
|
|
QVERIFY(e.earliestTime() == 10);
|
|
QVERIFY(e.latestTime() == 20);
|
|
|
|
QVERIFY(e == b);
|
|
}
|
|
|
|
void tst_QMediaTimeRange::testGetters()
|
|
{
|
|
QMediaTimeRange x;
|
|
|
|
// isEmpty
|
|
QVERIFY(x.isEmpty());
|
|
|
|
x.addInterval(10, 20);
|
|
|
|
// isEmpty + isContinuous
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(x.isContinuous());
|
|
|
|
x.addInterval(30, 40);
|
|
|
|
// isEmpty + isContinuous + intervals + start + end
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(!x.isContinuous());
|
|
QVERIFY(x.intervals().count() == 2);
|
|
QVERIFY(x.intervals()[0].start() == 10);
|
|
QVERIFY(x.intervals()[0].end() == 20);
|
|
QVERIFY(x.intervals()[1].start() == 30);
|
|
QVERIFY(x.intervals()[1].end() == 40);
|
|
}
|
|
|
|
void tst_QMediaTimeRange::testAssignment()
|
|
{
|
|
QMediaTimeRange x;
|
|
|
|
// Range Assignment
|
|
x = QMediaTimeRange(10, 20);
|
|
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(x.isContinuous());
|
|
QVERIFY(x.earliestTime() == 10);
|
|
QVERIFY(x.latestTime() == 20);
|
|
|
|
// Interval Assignment
|
|
x = QMediaTimeInterval(30, 40);
|
|
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(x.isContinuous());
|
|
QVERIFY(x.earliestTime() == 30);
|
|
QVERIFY(x.latestTime() == 40);
|
|
|
|
// Shared Data Check
|
|
QMediaTimeRange y;
|
|
|
|
y = x;
|
|
y.addInterval(10, 20);
|
|
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(x.isContinuous());
|
|
QVERIFY(x.earliestTime() == 30);
|
|
QVERIFY(x.latestTime() == 40);
|
|
}
|
|
|
|
void tst_QMediaTimeRange::testIntervalNormalize()
|
|
{
|
|
QMediaTimeInterval x(20, 10);
|
|
|
|
QVERIFY(!x.isNormal());
|
|
QVERIFY(x.start() == 20);
|
|
QVERIFY(x.end() == 10);
|
|
|
|
QMediaTimeInterval y = x.normalized();
|
|
|
|
QVERIFY(y.isNormal());
|
|
QVERIFY(y.start() == 10);
|
|
QVERIFY(y.end() == 20);
|
|
QVERIFY(x != y);
|
|
}
|
|
|
|
void tst_QMediaTimeRange::testIntervalTranslate()
|
|
{
|
|
QMediaTimeInterval x(10, 20);
|
|
x = x.translated(10);
|
|
|
|
QVERIFY(x.start() == 20);
|
|
QVERIFY(x.end() == 30);
|
|
|
|
/* verifying the backward through time with a negative offset.*/
|
|
x = x.translated(-10);
|
|
|
|
QVERIFY(x.start() == 10);
|
|
QVERIFY(x.end() == 20);
|
|
}
|
|
|
|
void tst_QMediaTimeRange::testEarliestLatest()
|
|
{
|
|
// Test over a single interval
|
|
QMediaTimeRange x(30, 40);
|
|
|
|
QVERIFY(x.earliestTime() == 30);
|
|
QVERIFY(x.latestTime() == 40);
|
|
|
|
// Test over multiple intervals
|
|
x.addInterval(50, 60);
|
|
|
|
QVERIFY(x.earliestTime() == 30);
|
|
QVERIFY(x.latestTime() == 60);
|
|
}
|
|
|
|
void tst_QMediaTimeRange::testContains()
|
|
{
|
|
// Test over a single interval
|
|
QMediaTimeRange x(10, 20);
|
|
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(x.isContinuous());
|
|
QVERIFY(x.contains(15));
|
|
QVERIFY(x.contains(10));
|
|
QVERIFY(x.contains(20));
|
|
QVERIFY(!x.contains(25));
|
|
|
|
// Test over multiple intervals
|
|
x.addInterval(40, 50);
|
|
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(!x.isContinuous());
|
|
QVERIFY(x.contains(15));
|
|
QVERIFY(x.contains(45));
|
|
QVERIFY(!x.contains(30));
|
|
|
|
// Test over a concrete interval
|
|
QMediaTimeInterval y(10, 20);
|
|
QVERIFY(y.contains(15));
|
|
QVERIFY(y.contains(10));
|
|
QVERIFY(y.contains(20));
|
|
QVERIFY(!y.contains(25));
|
|
}
|
|
|
|
void tst_QMediaTimeRange::testAddInterval()
|
|
{
|
|
// All intervals Overlap
|
|
QMediaTimeRange x;
|
|
x.addInterval(10, 40);
|
|
x.addInterval(30, 50);
|
|
x.addInterval(20, 60);
|
|
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(x.isContinuous());
|
|
QVERIFY(x.earliestTime() == 10);
|
|
QVERIFY(x.latestTime() == 60);
|
|
|
|
// 1 adjacent interval, 1 encompassed interval
|
|
x = QMediaTimeRange();
|
|
x.addInterval(10, 40);
|
|
x.addInterval(20, 30);
|
|
x.addInterval(41, 50);
|
|
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(x.isContinuous());
|
|
QVERIFY(x.earliestTime() == 10);
|
|
QVERIFY(x.latestTime() == 50);
|
|
|
|
// 1 overlapping interval, 1 disjoint interval
|
|
x = QMediaTimeRange();
|
|
x.addInterval(10, 30);
|
|
x.addInterval(20, 40);
|
|
x.addInterval(50, 60);
|
|
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(!x.isContinuous());
|
|
QVERIFY(x.intervals().count() == 2);
|
|
QVERIFY(x.intervals()[0].start() == 10);
|
|
QVERIFY(x.intervals()[0].end() == 40);
|
|
QVERIFY(x.intervals()[1].start() == 50);
|
|
QVERIFY(x.intervals()[1].end() == 60);
|
|
|
|
// Identical Add
|
|
x = QMediaTimeRange();
|
|
x.addInterval(10, 20);
|
|
x.addInterval(10, 20);
|
|
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(x.isContinuous());
|
|
QVERIFY(x.earliestTime() == 10);
|
|
QVERIFY(x.latestTime() == 20);
|
|
|
|
// Multi-Merge
|
|
x = QMediaTimeRange();
|
|
x.addInterval(10, 20);
|
|
x.addInterval(30, 40);
|
|
x.addInterval(50, 60);
|
|
x.addInterval(15, 55);
|
|
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(x.isContinuous());
|
|
QVERIFY(x.earliestTime() == 10);
|
|
QVERIFY(x.latestTime() == 60);
|
|
|
|
// Interval Parameter - All intervals Overlap
|
|
x = QMediaTimeRange();
|
|
x.addInterval(QMediaTimeInterval(10, 40));
|
|
x.addInterval(QMediaTimeInterval(30, 50));
|
|
x.addInterval(QMediaTimeInterval(20, 60));
|
|
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(x.isContinuous());
|
|
QVERIFY(x.earliestTime() == 10);
|
|
QVERIFY(x.latestTime() == 60);
|
|
|
|
// Interval Parameter - Abnormal Interval
|
|
x = QMediaTimeRange();
|
|
x.addInterval(QMediaTimeInterval(20, 10));
|
|
|
|
QVERIFY(x.isEmpty());
|
|
}
|
|
|
|
void tst_QMediaTimeRange::testAddTimeRange()
|
|
{
|
|
// Add Time Range uses Add Interval internally,
|
|
// so in this test the focus is on combinations of number
|
|
// of intervals added, rather than the different types of
|
|
// merges which can occur.
|
|
QMediaTimeRange a, b;
|
|
|
|
// Add Single into Single
|
|
a = QMediaTimeRange(10, 30);
|
|
b = QMediaTimeRange(20, 40);
|
|
|
|
b.addTimeRange(a);
|
|
|
|
QVERIFY(!b.isEmpty());
|
|
QVERIFY(b.isContinuous());
|
|
QVERIFY(b.earliestTime() == 10);
|
|
QVERIFY(b.latestTime() == 40);
|
|
|
|
// Add Multiple into Single
|
|
a = QMediaTimeRange();
|
|
a.addInterval(10, 30);
|
|
a.addInterval(40, 60);
|
|
|
|
b = QMediaTimeRange(20, 50);
|
|
|
|
b.addTimeRange(a);
|
|
|
|
QVERIFY(!b.isEmpty());
|
|
QVERIFY(b.isContinuous());
|
|
QVERIFY(b.earliestTime() == 10);
|
|
QVERIFY(b.latestTime() == 60);
|
|
|
|
// Add Single into Multiple
|
|
a = QMediaTimeRange(20, 50);
|
|
|
|
b = QMediaTimeRange();
|
|
b.addInterval(10, 30);
|
|
b.addInterval(40, 60);
|
|
|
|
b.addTimeRange(a);
|
|
|
|
QVERIFY(!b.isEmpty());
|
|
QVERIFY(b.isContinuous());
|
|
QVERIFY(b.earliestTime() == 10);
|
|
QVERIFY(b.latestTime() == 60);
|
|
|
|
// Add Multiple into Multiple
|
|
a = QMediaTimeRange();
|
|
a.addInterval(10, 30);
|
|
a.addInterval(40, 70);
|
|
a.addInterval(80, 100);
|
|
|
|
b = QMediaTimeRange();
|
|
b.addInterval(20, 50);
|
|
b.addInterval(60, 90);
|
|
|
|
b.addTimeRange(a);
|
|
|
|
QVERIFY(!b.isEmpty());
|
|
QVERIFY(b.isContinuous());
|
|
QVERIFY(b.earliestTime() == 10);
|
|
QVERIFY(b.latestTime() == 100);
|
|
|
|
// Add Nothing to Single
|
|
a = QMediaTimeRange();
|
|
b = QMediaTimeRange(10, 20);
|
|
|
|
b.addTimeRange(a);
|
|
|
|
QVERIFY(!b.isEmpty());
|
|
QVERIFY(b.isContinuous());
|
|
QVERIFY(b.earliestTime() == 10);
|
|
QVERIFY(b.latestTime() == 20);
|
|
|
|
// Add Single to Nothing
|
|
a = QMediaTimeRange(10, 20);
|
|
b = QMediaTimeRange();
|
|
|
|
b.addTimeRange(a);
|
|
|
|
QVERIFY(!b.isEmpty());
|
|
QVERIFY(b.isContinuous());
|
|
QVERIFY(b.earliestTime() == 10);
|
|
QVERIFY(b.latestTime() == 20);
|
|
|
|
// Add Nothing to Nothing
|
|
a = QMediaTimeRange();
|
|
b = QMediaTimeRange();
|
|
|
|
b.addTimeRange(a);
|
|
|
|
QVERIFY(b.isEmpty());
|
|
}
|
|
|
|
void tst_QMediaTimeRange::testRemoveInterval()
|
|
{
|
|
// Removing an interval, causing a split
|
|
QMediaTimeRange x;
|
|
x.addInterval(10, 50);
|
|
x.removeInterval(20, 40);
|
|
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(!x.isContinuous());
|
|
QVERIFY(x.intervals().count() == 2);
|
|
QVERIFY(x.intervals()[0].start() == 10);
|
|
QVERIFY(x.intervals()[0].end() == 19);
|
|
QVERIFY(x.intervals()[1].start() == 41);
|
|
QVERIFY(x.intervals()[1].end() == 50);
|
|
|
|
// Removing an interval, causing a deletion
|
|
x = QMediaTimeRange();
|
|
x.addInterval(20, 30);
|
|
x.removeInterval(10, 40);
|
|
|
|
QVERIFY(x.isEmpty());
|
|
|
|
// Removing an interval, causing a tail trim
|
|
x = QMediaTimeRange();
|
|
x.addInterval(20, 40);
|
|
x.removeInterval(30, 50);
|
|
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(x.isContinuous());
|
|
QVERIFY(x.earliestTime() == 20);
|
|
QVERIFY(x.latestTime() == 29);
|
|
|
|
// Removing an interval, causing a head trim
|
|
x = QMediaTimeRange();
|
|
x.addInterval(20, 40);
|
|
x.removeInterval(10, 30);
|
|
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(x.isContinuous());
|
|
QVERIFY(x.earliestTime() == 31);
|
|
QVERIFY(x.latestTime() == 40);
|
|
|
|
// Identical Remove
|
|
x = QMediaTimeRange();
|
|
x.addInterval(10, 20);
|
|
x.removeInterval(10, 20);
|
|
|
|
QVERIFY(x.isEmpty());
|
|
|
|
// Multi-Trim
|
|
x = QMediaTimeRange();
|
|
x.addInterval(10, 20);
|
|
x.addInterval(30, 40);
|
|
x.removeInterval(15, 35);
|
|
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(!x.isContinuous());
|
|
QVERIFY(x.intervals().count() == 2);
|
|
QVERIFY(x.intervals()[0].start() == 10);
|
|
QVERIFY(x.intervals()[0].end() == 14);
|
|
QVERIFY(x.intervals()[1].start() == 36);
|
|
QVERIFY(x.intervals()[1].end() == 40);
|
|
|
|
// Multi-Delete
|
|
x = QMediaTimeRange();
|
|
x.addInterval(10, 20);
|
|
x.addInterval(30, 40);
|
|
x.addInterval(50, 60);
|
|
x.removeInterval(10, 60);
|
|
|
|
QVERIFY(x.isEmpty());
|
|
|
|
// Interval Parameter - Removing an interval, causing a split
|
|
x = QMediaTimeRange();
|
|
x.addInterval(10, 50);
|
|
x.removeInterval(QMediaTimeInterval(20, 40));
|
|
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(!x.isContinuous());
|
|
QVERIFY(x.intervals().count() == 2);
|
|
QVERIFY(x.intervals()[0].start() == 10);
|
|
QVERIFY(x.intervals()[0].end() == 19);
|
|
QVERIFY(x.intervals()[1].start() == 41);
|
|
QVERIFY(x.intervals()[1].end() == 50);
|
|
|
|
// Interval Parameter - Abnormal Interval
|
|
x = QMediaTimeRange();
|
|
x.addInterval(10, 40);
|
|
x.removeInterval(QMediaTimeInterval(30, 20));
|
|
|
|
QVERIFY(!x.isEmpty());
|
|
QVERIFY(x.isContinuous());
|
|
QVERIFY(x.earliestTime() == 10);
|
|
QVERIFY(x.latestTime() == 40);
|
|
}
|
|
|
|
void tst_QMediaTimeRange::testRemoveTimeRange()
|
|
{
|
|
// Remove Time Range uses Remove Interval internally,
|
|
// so in this test the focus is on combinations of number
|
|
// of intervals removed, rather than the different types of
|
|
// deletions which can occur.
|
|
QMediaTimeRange a, b;
|
|
|
|
// Remove Single from Single
|
|
a = QMediaTimeRange(10, 30);
|
|
b = QMediaTimeRange(20, 40);
|
|
|
|
b.removeTimeRange(a);
|
|
|
|
QVERIFY(!b.isEmpty());
|
|
QVERIFY(b.isContinuous());
|
|
QVERIFY(b.earliestTime() == 31);
|
|
QVERIFY(b.latestTime() == 40);
|
|
|
|
// Remove Multiple from Single
|
|
a = QMediaTimeRange();
|
|
a.addInterval(10, 30);
|
|
a.addInterval(40, 60);
|
|
|
|
b = QMediaTimeRange(20, 50);
|
|
|
|
b.removeTimeRange(a);
|
|
|
|
QVERIFY(!b.isEmpty());
|
|
QVERIFY(b.isContinuous());
|
|
QVERIFY(b.earliestTime() == 31);
|
|
QVERIFY(b.latestTime() == 39);
|
|
|
|
// Remove Single from Multiple
|
|
a = QMediaTimeRange(20, 50);
|
|
|
|
b = QMediaTimeRange();
|
|
b.addInterval(10, 30);
|
|
b.addInterval(40, 60);
|
|
|
|
b.removeTimeRange(a);
|
|
|
|
QVERIFY(!b.isEmpty());
|
|
QVERIFY(!b.isContinuous());
|
|
QVERIFY(b.intervals().count() == 2);
|
|
QVERIFY(b.intervals()[0].start() == 10);
|
|
QVERIFY(b.intervals()[0].end() == 19);
|
|
QVERIFY(b.intervals()[1].start() == 51);
|
|
QVERIFY(b.intervals()[1].end() == 60);
|
|
|
|
// Remove Multiple from Multiple
|
|
a = QMediaTimeRange();
|
|
a.addInterval(20, 50);
|
|
a.addInterval(50, 90);
|
|
|
|
|
|
b = QMediaTimeRange();
|
|
b.addInterval(10, 30);
|
|
b.addInterval(40, 70);
|
|
b.addInterval(80, 100);
|
|
|
|
b.removeTimeRange(a);
|
|
|
|
QVERIFY(!b.isEmpty());
|
|
QVERIFY(!b.isContinuous());
|
|
QVERIFY(b.intervals().count() == 2);
|
|
QVERIFY(b.intervals()[0].start() == 10);
|
|
QVERIFY(b.intervals()[0].end() == 19);
|
|
QVERIFY(b.intervals()[1].start() == 91);
|
|
QVERIFY(b.intervals()[1].end() == 100);
|
|
|
|
// Remove Nothing from Single
|
|
a = QMediaTimeRange();
|
|
b = QMediaTimeRange(10, 20);
|
|
|
|
b.removeTimeRange(a);
|
|
|
|
QVERIFY(!b.isEmpty());
|
|
QVERIFY(b.isContinuous());
|
|
QVERIFY(b.earliestTime() == 10);
|
|
QVERIFY(b.latestTime() == 20);
|
|
|
|
// Remove Single from Nothing
|
|
a = QMediaTimeRange(10, 20);
|
|
b = QMediaTimeRange();
|
|
|
|
b.removeTimeRange(a);
|
|
|
|
QVERIFY(b.isEmpty());
|
|
|
|
// Remove Nothing from Nothing
|
|
a = QMediaTimeRange();
|
|
b = QMediaTimeRange();
|
|
|
|
b.removeTimeRange(a);
|
|
|
|
QVERIFY(b.isEmpty());
|
|
}
|
|
|
|
void tst_QMediaTimeRange::testClear()
|
|
{
|
|
QMediaTimeRange x;
|
|
|
|
// Clear Nothing
|
|
x.clear();
|
|
|
|
QVERIFY(x.isEmpty());
|
|
|
|
// Clear Single
|
|
x = QMediaTimeRange(10, 20);
|
|
x.clear();
|
|
|
|
QVERIFY(x.isEmpty());
|
|
|
|
// Clear Multiple
|
|
x = QMediaTimeRange();
|
|
x.addInterval(10, 20);
|
|
x.addInterval(30, 40);
|
|
x.clear();
|
|
|
|
QVERIFY(x.isEmpty());
|
|
}
|
|
|
|
void tst_QMediaTimeRange::testComparisons()
|
|
{
|
|
// Interval equality
|
|
QVERIFY(QMediaTimeInterval(10, 20) == QMediaTimeInterval(10, 20));
|
|
QVERIFY(QMediaTimeInterval(10, 20) != QMediaTimeInterval(10, 30));
|
|
QVERIFY(!(QMediaTimeInterval(10, 20) != QMediaTimeInterval(10, 20)));
|
|
QVERIFY(!(QMediaTimeInterval(10, 20) == QMediaTimeInterval(10, 30)));
|
|
|
|
// Time range equality - Single Interval
|
|
QMediaTimeRange a(10, 20), b(20, 30), c(10, 20);
|
|
|
|
QVERIFY(a == c);
|
|
QVERIFY(!(a == b));
|
|
QVERIFY(a != b);
|
|
QVERIFY(!(a != c));
|
|
|
|
// Time Range Equality - Multiple Intervals
|
|
QMediaTimeRange x, y, z;
|
|
|
|
x.addInterval(10, 20);
|
|
x.addInterval(30, 40);
|
|
x.addInterval(50, 60);
|
|
|
|
y.addInterval(10, 20);
|
|
y.addInterval(35, 45);
|
|
y.addInterval(50, 60);
|
|
|
|
z.addInterval(10, 20);
|
|
z.addInterval(30, 40);
|
|
z.addInterval(50, 60);
|
|
|
|
QVERIFY(x == z);
|
|
QVERIFY(!(x == y));
|
|
QVERIFY(x != y);
|
|
QVERIFY(!(x != z));
|
|
}
|
|
|
|
void tst_QMediaTimeRange::testArithmetic()
|
|
{
|
|
QMediaTimeRange a(10, 20), b(20, 30);
|
|
|
|
// Test +=
|
|
a += b;
|
|
|
|
QVERIFY(a.isContinuous());
|
|
QVERIFY(a.earliestTime() == 10);
|
|
QVERIFY(a.latestTime() == 30);
|
|
|
|
// Test -=
|
|
a -= b;
|
|
|
|
QVERIFY(a.isContinuous());
|
|
QVERIFY(a.earliestTime() == 10);
|
|
QVERIFY(a.latestTime() == 19);
|
|
|
|
// Test += and -= on intervals
|
|
a -= QMediaTimeInterval(10, 20);
|
|
a += QMediaTimeInterval(40, 50);
|
|
|
|
QVERIFY(a.isContinuous());
|
|
QVERIFY(a.earliestTime() == 40);
|
|
QVERIFY(a.latestTime() == 50);
|
|
|
|
// Test Interval + Interval
|
|
a = QMediaTimeInterval(10, 20) + QMediaTimeInterval(20, 30);
|
|
QVERIFY(a.isContinuous());
|
|
QVERIFY(a.earliestTime() == 10);
|
|
QVERIFY(a.latestTime() == 30);
|
|
|
|
// Test Range + Interval
|
|
a = a + QMediaTimeInterval(30, 40);
|
|
QVERIFY(a.isContinuous());
|
|
QVERIFY(a.earliestTime() == 10);
|
|
QVERIFY(a.latestTime() == 40);
|
|
|
|
// Test Interval + Range
|
|
a = QMediaTimeInterval(40, 50) + a;
|
|
QVERIFY(a.isContinuous());
|
|
QVERIFY(a.earliestTime() == 10);
|
|
QVERIFY(a.latestTime() == 50);
|
|
|
|
// Test Range + Range
|
|
a = a + QMediaTimeRange(50, 60);
|
|
QVERIFY(a.isContinuous());
|
|
QVERIFY(a.earliestTime() == 10);
|
|
QVERIFY(a.latestTime() == 60);
|
|
|
|
// Test Range - Interval
|
|
a = a - QMediaTimeInterval(50, 60);
|
|
QVERIFY(a.isContinuous());
|
|
QVERIFY(a.earliestTime() == 10);
|
|
QVERIFY(a.latestTime() == 49);
|
|
|
|
// Test Range - Range
|
|
a = a - QMediaTimeRange(40, 50);
|
|
QVERIFY(a.isContinuous());
|
|
QVERIFY(a.earliestTime() == 10);
|
|
QVERIFY(a.latestTime() == 39);
|
|
|
|
// Test Interval - Range
|
|
b = QMediaTimeInterval(0, 20) - a;
|
|
QVERIFY(b.isContinuous());
|
|
QVERIFY(b.earliestTime() == 0);
|
|
QVERIFY(b.latestTime() == 9);
|
|
|
|
// Test Interval - Interval
|
|
a = QMediaTimeInterval(10, 20) - QMediaTimeInterval(15, 30);
|
|
QVERIFY(a.isContinuous());
|
|
QVERIFY(a.earliestTime() == 10);
|
|
QVERIFY(a.latestTime() == 14);
|
|
}
|
|
|
|
QTEST_MAIN(tst_QMediaTimeRange)
|
|
|
|
#include "tst_qmediatimerange.moc"
|