summaryrefslogtreecommitdiffstats
path: root/tests/auto/unit/multimedia/qsamplecache
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/unit/multimedia/qsamplecache')
-rw-r--r--tests/auto/unit/multimedia/qsamplecache/CMakeLists.txt23
-rw-r--r--tests/auto/unit/multimedia/qsamplecache/testdata/test.wavbin0 -> 88232 bytes
-rw-r--r--tests/auto/unit/multimedia/qsamplecache/testdata/test2.wavbin0 -> 88232 bytes
-rw-r--r--tests/auto/unit/multimedia/qsamplecache/tst_qsamplecache.cpp144
4 files changed, 167 insertions, 0 deletions
diff --git a/tests/auto/unit/multimedia/qsamplecache/CMakeLists.txt b/tests/auto/unit/multimedia/qsamplecache/CMakeLists.txt
new file mode 100644
index 000000000..2f58c1f6e
--- /dev/null
+++ b/tests/auto/unit/multimedia/qsamplecache/CMakeLists.txt
@@ -0,0 +1,23 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+# Generated from qsamplecache.pro.
+
+#####################################################################
+## tst_qsamplecache Test:
+#####################################################################
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ testdata/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qsamplecache
+ SOURCES
+ tst_qsamplecache.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::MultimediaPrivate
+ TESTDATA ${test_data}
+)
diff --git a/tests/auto/unit/multimedia/qsamplecache/testdata/test.wav b/tests/auto/unit/multimedia/qsamplecache/testdata/test.wav
new file mode 100644
index 000000000..4dd022661
--- /dev/null
+++ b/tests/auto/unit/multimedia/qsamplecache/testdata/test.wav
Binary files differ
diff --git a/tests/auto/unit/multimedia/qsamplecache/testdata/test2.wav b/tests/auto/unit/multimedia/qsamplecache/testdata/test2.wav
new file mode 100644
index 000000000..4dd022661
--- /dev/null
+++ b/tests/auto/unit/multimedia/qsamplecache/testdata/test2.wav
Binary files differ
diff --git a/tests/auto/unit/multimedia/qsamplecache/tst_qsamplecache.cpp b/tests/auto/unit/multimedia/qsamplecache/tst_qsamplecache.cpp
new file mode 100644
index 000000000..311d05a5a
--- /dev/null
+++ b/tests/auto/unit/multimedia/qsamplecache/tst_qsamplecache.cpp
@@ -0,0 +1,144 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtTest/QtTest>
+#include <private/qsamplecache_p.h>
+
+class tst_QSampleCache : public QObject
+{
+ Q_OBJECT
+public:
+
+public slots:
+
+private slots:
+ void testCachedSample();
+ void testNotCachedSample();
+ void testEnoughCapacity();
+ void testNotEnoughCapacity();
+ void testInvalidFile();
+
+private:
+
+};
+
+void tst_QSampleCache::testCachedSample()
+{
+ QSampleCache cache;
+
+ QSample* sample = cache.requestSample(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test.wav")));
+ QVERIFY(sample);
+ QTRY_VERIFY(!cache.isLoading());
+
+ QSample* sampleCached = cache.requestSample(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test.wav")));
+ QCOMPARE(sample, sampleCached); // sample is cached
+ QVERIFY(cache.isCached(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test.wav"))));
+ // loading thread still starts, but does nothing in this case
+ QTRY_VERIFY(!cache.isLoading());
+
+ sample->release();
+ sampleCached->release();
+}
+
+void tst_QSampleCache::testNotCachedSample()
+{
+ QSampleCache cache;
+
+ QSample* sample = cache.requestSample(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test.wav")));
+ QVERIFY(sample);
+ QVERIFY(cache.isLoading());
+ QTRY_VERIFY(!cache.isLoading());
+ sample->release();
+
+ QVERIFY(!cache.isCached(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test.wav"))));
+}
+
+void tst_QSampleCache::testEnoughCapacity()
+{
+ QSampleCache cache;
+
+ QSample* sample = cache.requestSample(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test.wav")));
+ QVERIFY(sample);
+ QVERIFY(cache.isLoading());
+ QTRY_VERIFY(!cache.isLoading());
+ int sampleSize = sample->data().size();
+ sample->release();
+ cache.setCapacity(sampleSize * 2);
+
+ QVERIFY(!cache.isCached(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test.wav"))));
+
+ sample = cache.requestSample(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test.wav")));
+ QVERIFY(sample);
+ QVERIFY(cache.isLoading());
+ QTRY_VERIFY(!cache.isLoading());
+ sample->release();
+
+ QVERIFY(cache.isCached(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test.wav"))));
+
+ // load another sample and make sure first sample is not destroyed
+ QSample* sampleOther = cache.requestSample(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test2.wav")));
+ QVERIFY(sampleOther);
+ QVERIFY(cache.isLoading());
+ QTRY_VERIFY(!cache.isLoading());
+ sampleOther->release();
+
+ QVERIFY(cache.isCached(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test.wav"))));
+ QVERIFY(cache.isCached(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test2.wav"))));
+
+ QSample* sampleCached = cache.requestSample(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test.wav")));
+ QCOMPARE(sample, sampleCached); // sample is cached
+ QVERIFY(cache.isCached(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test.wav"))));
+ QVERIFY(cache.isCached(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test2.wav"))));
+ QVERIFY(!cache.isLoading());
+
+ sampleCached->release();
+}
+
+void tst_QSampleCache::testNotEnoughCapacity()
+{
+ QSampleCache cache;
+
+ QSample* sample = cache.requestSample(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test.wav")));
+ QVERIFY(sample);
+ QVERIFY(cache.isLoading());
+ QTRY_VERIFY(!cache.isLoading());
+ int sampleSize = sample->data().size();
+ sample->release();
+ cache.setCapacity(sampleSize / 2); // unloads all samples
+
+ QVERIFY(!cache.isCached(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test.wav"))));
+
+ sample = cache.requestSample(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test.wav")));
+ QVERIFY(sample);
+ QVERIFY(cache.isLoading());
+ QTRY_VERIFY(!cache.isLoading());
+ sample->release();
+
+ QVERIFY(cache.isCached(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test.wav"))));
+
+ // load another sample to force sample cache to destroy first sample
+ QSample* sampleOther = cache.requestSample(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test2.wav")));
+ QVERIFY(sampleOther);
+ QVERIFY(cache.isLoading());
+ QTRY_VERIFY(!cache.isLoading());
+ sampleOther->release();
+
+ QVERIFY(!cache.isCached(QUrl::fromLocalFile(QFINDTESTDATA("testdata/test.wav"))));
+}
+
+void tst_QSampleCache::testInvalidFile()
+{
+ QSampleCache cache;
+
+ QSample* sample = cache.requestSample(QUrl::fromLocalFile("invalid"));
+ QVERIFY(sample);
+ QTRY_COMPARE(sample->state(), QSample::Error);
+ QVERIFY(!cache.isLoading());
+ sample->release();
+
+ QVERIFY(!cache.isCached(QUrl::fromLocalFile("invalid")));
+}
+
+QTEST_MAIN(tst_QSampleCache)
+
+#include "tst_qsamplecache.moc"