Qt copyrights are now in The Qt Company, so we could update the source code headers accordingly. In the same go we should also fix the links to point to qt.io. Change-Id: I1c6faa4f59f8eca54f01ef20941fa60161dd7872 Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
799 lines
20 KiB
C++
799 lines
20 KiB
C++
/****************************************************************************
|
|
**
|
|
** Copyright (C) 2015 The Qt Company Ltd.
|
|
** Contact: http://www.qt.io/licensing/
|
|
**
|
|
** This file is part of the Qt Toolkit.
|
|
**
|
|
** $QT_BEGIN_LICENSE:LGPL21$
|
|
** Commercial License Usage
|
|
** Licensees holding valid commercial Qt licenses may use this file in
|
|
** accordance with the commercial license agreement provided with the
|
|
** Software or, alternatively, in accordance with the terms contained in
|
|
** a written agreement between you and The Qt Company. For licensing terms
|
|
** and conditions see http://www.qt.io/terms-conditions. For further
|
|
** information use the contact form at http://www.qt.io/contact-us.
|
|
**
|
|
** GNU Lesser General Public License Usage
|
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
|
** General Public License version 2.1 or version 3 as published by the Free
|
|
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
|
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
|
** following information to ensure the GNU Lesser General Public License
|
|
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
**
|
|
** As a special exception, The Qt Company gives you certain additional
|
|
** rights. These rights are described in The Qt Company LGPL Exception
|
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
|
**
|
|
** $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"
|