aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/CMakeLists.txt35
-rw-r--r--test/test_aopacket.cpp89
-rw-r--r--test/test_apng.cpp67
-rw-r--r--test/test_bass.cpp46
-rw-r--r--test/test_caseloading.cpp16
5 files changed, 72 insertions, 181 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index c6b191e4..4c1d0980 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,20 +1,21 @@
-find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Gui Widgets REQUIRED)
-find_package(Catch2 REQUIRED)
+project(tests LANGUAGES CXX C)
-target_include_directories(test PRIVATE ../src)
-target_link_directories(test PRIVATE ../lib)
-target_link_libraries(test PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::Widgets Catch2::Catch2)
+find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Test REQUIRED)
-add_executable(test
- test_aopacket.cpp
- test_caseloading.cpp
- test_apng.cpp
- ../src/aopacket.h
- ../src/aopacket.cpp
-)
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
-if(AO_ENABLE_BASS)
- target_compile_definitions(Attorney_Online PRIVATE AO_ENABLE_BASS)
- target_link_libraries(Attorney_Online PRIVATE bass bassmidi bassopus)
- target_sources(test PRIVATE test_bass.cpp)
-endif()
+enable_testing(true)
+
+set(SKIP_AUTOMOC ON)
+
+function(ao_declare_test test_id)
+ message(STATUS "FOOBAR Adding test: ${test_id}")
+ message(STATUS "FOOBAR Source files: ${ARGN}")
+ add_executable(${test_id} ${ARGN})
+ target_include_directories(${test_id} PRIVATE ../src src)
+ target_link_directories(${test_id} PRIVATE ../lib)
+ target_link_libraries(${test_id} PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Test)
+ add_test(NAME ${test_id} COMMAND ${test_id})
+endfunction()
+
+ao_declare_test(test_aopacket test_aopacket.cpp ../src/aopacket.cpp)
diff --git a/test/test_aopacket.cpp b/test/test_aopacket.cpp
index 42ff778e..4a24dcd3 100644
--- a/test/test_aopacket.cpp
+++ b/test/test_aopacket.cpp
@@ -1,51 +1,70 @@
-#define CATCH_CONFIG_MAIN
-#include <catch2/catch.hpp>
-
#include "aopacket.h"
-TEST_CASE("AOPacket construct", "[aopacket]")
+#include <QString>
+#include <QtTest/QTest>
+
+class test_AOPacket : public QObject
{
- // Parameters
- QString packet_string = "CT#MY_OOC_NAME#/doc https://docs.google.com/document/d/123/edit##%";
+ Q_OBJECT
+
+private:
+ const QMap<QString, QString> SYMBOL_MAP{
+ {"#", "<num>"},
+ {"%", "<percent>"},
+ {"$", "<dollar>"},
+ {"&", "<and>"},
+ };
- SECTION("Packet string")
+private Q_SLOTS:
+ void constructPacket_data()
{
- AOPacket p(packet_string);
- REQUIRE(p.to_string() == packet_string);
+ QTest::addColumn<QString>("header");
+ QTest::addColumn<QStringList>("content");
+ QTest::addColumn<QString>("result");
+
+ QTest::newRow("Basic Packet") << "CT" << QStringList{"MY_OOC_NAME", "/doc https://docs.google.com/document/d/123/edit"} << "CT#MY_OOC_NAME#/doc https://docs.google.com/document/d/123/edit#%";
}
- SECTION("Header and contents")
+
+ void constructPacket()
{
- QStringList contents = {"MY_OOC_NAME", "/doc https://docs.google.com/document/d/123/edit#"};
- AOPacket p("CT", contents);
- REQUIRE(p.to_string() == packet_string);
- }
-}
+ QFETCH(QString, header);
+ QFETCH(QStringList, content);
+ QFETCH(QString, result);
-TEST_CASE("AOPacket encode/decode", "[aopacket]")
-{
- // Parameters
- QString packet_string = "CT#MY_OOC_NAME#/doc https://docs.google.com/document/d/%$&/edit##%";
- QString good_encode = "CT#MY_OOC_NAME#/doc https://docs.google.com/document/d/<percent><dollar><and>/edit<num>#%";
+ AOPacket packet(header, content);
+ QVERIFY(packet.toString(true) == result);
+ }
- SECTION("Bad encode/decode because packet string constructor splits the '#' after 'edit'")
+ void encodeDecodeData_data()
{
- AOPacket p(packet_string);
- p.net_encode();
- REQUIRE(p.to_string() != good_encode);
+ QTest::addColumn<QString>("what");
+ QTest::addColumn<QString>("result");
+ QTest::addColumn<bool>("encode");
- p.net_decode();
- REQUIRE(p.to_string() == packet_string);
+ for (auto it = SYMBOL_MAP.begin(); it != SYMBOL_MAP.end(); ++it)
+ {
+ QTest::newRow(QString("Encode %1").arg(it.key()).toUtf8()) << it.key() << it.value() << true;
+ QTest::newRow(QString("Decode %1").arg(it.value()).toUtf8()) << it.value() << it.key() << false;
+ }
}
- SECTION("Good encode/decode with header and contents constructor")
+ void encodeDecodeData()
{
- QStringList contents = {"MY_OOC_NAME", "/doc https://docs.google.com/document/d/%$&/edit#"};
- AOPacket p("CT", contents);
-
- p.net_encode();
- REQUIRE(p.to_string() == good_encode);
+ QFETCH(QString, what);
+ QFETCH(QString, result);
+ QFETCH(bool, encode);
- p.net_decode();
- REQUIRE(p.to_string() == packet_string);
+ if (encode)
+ {
+ QVERIFY(AOPacket::encode(what) == result);
+ }
+ else
+ {
+ QVERIFY(AOPacket::decode(what) == result);
+ }
}
-}
+};
+
+#include "test/test_aopacket.moc"
+
+QTEST_MAIN(test_AOPacket)
diff --git a/test/test_apng.cpp b/test/test_apng.cpp
deleted file mode 100644
index c092191f..00000000
--- a/test/test_apng.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <catch2/catch.hpp>
-
-#include <QCoreApplication>
-#include <QGuiApplication>
-#include <QImageReader>
-#include <QPixmap>
-#include <QPluginLoader>
-
-TEST_CASE("Support APNG Plugin", "[apng]")
-{
- // Check paths for libs
- QCoreApplication::addLibraryPath(".");
- QCoreApplication::addLibraryPath("lib");
-
- // Either it's loaded from system or we load local
- QPluginLoader apngPlugin("qapng");
- apngPlugin.load();
-
- INFO(QImageReader::supportedImageFormats().join(' ').toStdString());
- REQUIRE(QImageReader::supportedImageFormats().contains("apng"));
-}
-
-TEST_CASE("Detect png animation", "[apng]")
-{
- // Required for QPixmap methods
- int argc = 1;
- char bin[] = "test";
- char *argv[] = {bin};
- QGuiApplication app(argc, argv);
-
- // Instantiate reader
- QImageReader reader;
-
- SECTION("Decide format from content fails on apng")
- {
- reader.setFileName("snackoo.png");
- reader.setDecideFormatFromContent(true);
- REQUIRE(!reader.supportsAnimation());
- REQUIRE(!QPixmap::fromImage(reader.read()).isNull());
- }
-
- SECTION("Auto detect fails on apng")
- {
- reader.setFileName("snackoo.png");
- reader.setAutoDetectImageFormat(true);
- REQUIRE(!reader.supportsAnimation());
- REQUIRE(!QPixmap::fromImage(reader.read()).isNull());
- }
-
- SECTION("Detect apng supports animation")
- {
- reader.setFileName("snackoo.png");
- reader.setFormat("apng");
- REQUIRE(reader.supportsAnimation());
- REQUIRE(!QPixmap::fromImage(reader.read()).isNull());
- }
-
- SECTION("Detect png frame has no animation")
- {
- reader.setFileName("missle.png");
- reader.setFormat("apng");
- REQUIRE(!reader.supportsAnimation());
- reader.setFormat("png");
- REQUIRE(!reader.supportsAnimation());
- REQUIRE(!QPixmap::fromImage(reader.read()).isNull());
- }
-}
diff --git a/test/test_bass.cpp b/test/test_bass.cpp
deleted file mode 100644
index 0e97b6a1..00000000
--- a/test/test_bass.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <cstring>
-#include <iostream>
-
-#include <QString>
-#include <catch2/catch.hpp>
-
-#include "bass.h"
-#include "bassmidi.h"
-#include "bassopus.h"
-
-TEST_CASE("BASS URL streaming", "[bass][noci]")
-{
- // Sample
- QString url = "https://raw.githubusercontent.com/skyedeving/aocharedit/master/Attorney%20Online%20Character%20Editor/Resources/about.mp3";
-
- // initialize
- BASS_Init(-1, 44100, 0, 0, nullptr);
-
- // create stream from url
- HSTREAM stream;
- unsigned int flags = BASS_STREAM_AUTOFREE | BASS_STREAM_STATUS;
- if (url.endsWith(".opus"))
- {
- stream = BASS_OPUS_StreamCreateURL(url.toStdString().c_str(), 0, flags, nullptr, 0);
- }
- else
- {
- stream = BASS_StreamCreateURL(url.toStdString().c_str(), 0, flags, nullptr, 0);
- }
-
- // Log http status
- const char *tags = BASS_ChannelGetTags(stream, BASS_TAG_HTTP);
- if (tags)
- {
- while (*tags)
- {
- UNSCOPED_INFO(tags);
- tags += strlen(tags) + 1;
- }
- }
-
- // Test
- REQUIRE(stream != 0);
- REQUIRE(BASS_ChannelPlay(stream, TRUE) == TRUE);
- // while (BASS_ChannelIsActive(stream) != BASS_ACTIVE_STOPPED); // block test to listen
-}
diff --git a/test/test_caseloading.cpp b/test/test_caseloading.cpp
deleted file mode 100644
index dd82c7e5..00000000
--- a/test/test_caseloading.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <catch2/catch.hpp>
-
-#include <QStringList>
-
-TEST_CASE("Sort case evidence numerically", "[case]")
-{
- // Parameters
- QStringList case_evidence = {"1", "10", "11", "2", "3", "4", "5", "6", "7", "8", "9"};
- QStringList case_evidence_sorted = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"};
-
- // Sort
- std::sort(case_evidence.begin(), case_evidence.end(), [](const QString &a, const QString &b) { return a.toInt() < b.toInt(); });
-
- // Test
- REQUIRE(case_evidence == case_evidence_sorted);
-}