tests/auto/qmediatimerange/tst_qmediatimerange.cpp
changeset 0 876b1a06bc25
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/qmediatimerange/tst_qmediatimerange.cpp	Wed Aug 25 15:49:42 2010 +0300
@@ -0,0 +1,737 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** 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 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/QtTest>
+#include <QtCore/qdebug.h>
+
+#include <qmediatimerange.h>
+
+QT_USE_NAMESPACE
+
+class tst_QMediaTimeRange: public QObject
+{
+    Q_OBJECT
+
+public slots:
+
+private slots:
+    void testCtor();
+    void testGetters();
+    void testAssignment();
+    void testNormalize();
+    void testTranslated();
+    void testEarliestLatest();
+    void testContains();
+    void testAddInterval();
+    void testAddTimeRange();
+    void testRemoveInterval();
+    void testRemoveTimeRange();
+    void testClear();
+    void testComparisons();
+    void testArithmetic();
+};
+
+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);
+}
+
+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::testNormalize()
+{
+    QMediaTimeInterval x(20, 10);
+
+    QVERIFY(!x.isNormal());
+
+    x = x.normalized();
+
+    QVERIFY(x.isNormal());
+    QVERIFY(x.start() == 10);
+    QVERIFY(x.end() == 20);
+}
+
+void tst_QMediaTimeRange::testTranslated()
+{
+    QMediaTimeInterval x(10, 20);
+    x = x.translated(10);
+
+    QVERIFY(x.start() == 20);
+    QVERIFY(x.end() == 30);
+}
+
+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"