// SPDX-FileCopyrightText: 2026 Tri Vo Khac // SPDX-License-Identifier: GPL-3.0-or-later #include "mediainfo.h" #include #include #include #include using namespace Qt::Literals::StringLiterals; class MediaInfoTest : public QObject { Q_OBJECT private Q_SLOTS: void cleanTitle_data() { QTest::addColumn("fileName"); QTest::addColumn("title"); QTest::newRow("scene episode") << u"VisionQuest.S01E01.No.Strings.DSNP.DV.HDR.WEB-DL.DDP5.1.Atmos.H.265-GRP.mkv"_s << u"S01E01 · No Strings"_s; QTest::newRow("episode without title") << u"The.Show.S02E10.1080p.WEB.h264-GRP.mkv"_s << u"The Show · S02E10"_s; QTest::newRow("lowercase double episode") << u"show.s01e01e02.pilot.720p.hdtv.mkv"_s << u"S01E01E02 · pilot"_s; QTest::newRow("spaced episode") << u"Mr. Robot - S01E01 - eps1.0_hellofriend.mov.mkv"_s << u"S01E01 · eps1.0 hellofriend.mov"_s; QTest::newRow("movie with year") << u"Dune.Part.Two.2024.2160p.UHD.BluRay.x265-GRP.mkv"_s << u"Dune Part Two (2024)"_s; QTest::newRow("anime release") << u"[SubsPlease] Frieren - 05 (1080p) [A1B2C3D4].mkv"_s << u"Frieren - 05"_s; QTest::newRow("plain name") << u"Holiday 2019 at the beach.mp4"_s << u"Holiday 2019 at the beach"_s; QTest::newRow("music") << u"01 - Intro.flac"_s << u"01 - Intro"_s; QTest::newRow("only tags") << u"1080p.mkv"_s << u"1080p"_s; } void cleanTitle() { QFETCH(QString, fileName); QFETCH(QString, title); QCOMPARE(MediaInfo::cleanTitle(fileName), title); } void probeDurationReadsTheLength() { const QString ffmpeg = QStandardPaths::findExecutable(u"ffmpeg"_s); if (ffmpeg.isEmpty()) { QSKIP("ffmpeg is needed to make a sample file"); } QTemporaryDir dir; const QString path = dir.filePath(u"tone.mka"_s); QProcess process; process.start(ffmpeg, {u"-v"_s, u"error"_s, u"-f"_s, u"lavfi"_s, u"-i"_s, u"sine=duration=3"_s, path}); QVERIFY(process.waitForFinished()); QCOMPARE(process.exitCode(), 0); const std::optional seconds = MediaInfo::probeDuration(path); QVERIFY(seconds); QVERIFY2(qAbs(*seconds - 3) < 0.1, qPrintable(QString::number(*seconds))); QVERIFY(!MediaInfo::probeDuration(dir.filePath(u"missing.mkv"_s))); } }; QTEST_GUILESS_MAIN(MediaInfoTest) #include "mediainfotest.moc"