summaryrefslogtreecommitdiff
path: root/test/unit/UnitTests.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit/UnitTests.c')
-rw-r--r--test/unit/UnitTests.c160
1 files changed, 160 insertions, 0 deletions
diff --git a/test/unit/UnitTests.c b/test/unit/UnitTests.c
new file mode 100644
index 0000000..b2bae69
--- /dev/null
+++ b/test/unit/UnitTests.c
@@ -0,0 +1,160 @@
+#include <stdlib.h>
+#include "base/LinkedList.h"
+#include "unit/TestRunner.h"
+
+extern TestSuite addAudioClockTests(void);
+extern TestSuite addAudioSettingsTests(void);
+extern TestSuite addCharStringTests(void);
+extern TestSuite addEndianTests(void);
+extern TestSuite addFileTests(void);
+extern TestSuite addLinkedListTests(void);
+extern TestSuite addMidiSequenceTests(void);
+extern TestSuite addMidiSourceTests(void);
+extern TestSuite addPlatformInfoTests(void);
+extern TestSuite addPluginTests(void);
+extern TestSuite addPluginChainTests(void);
+extern TestSuite addPluginPresetTests(void);
+extern TestSuite addPluginVst2xIdTests(void);
+extern TestSuite addProgramOptionTests(void);
+extern TestSuite addSampleBufferTests(void);
+extern TestSuite addSampleSourceTests(void);
+extern TestSuite addTaskTimerTests(void);
+
+extern TestSuite addAnalysisClippingTests(void);
+extern TestSuite addAnalysisDistortionTests(void);
+extern TestSuite addAnalysisSilenceTests(void);
+
+extern void _printTestSummary(int testsRun, int testsPassed, int testsFailed, int testsSkipped);
+
+static void _sumTestSuiteResults(void *item, void *extraData)
+{
+ TestSuite testSuite = (TestSuite)item;
+ TestSuite result = (TestSuite)extraData;
+ result->numSuccess += testSuite->numSuccess;
+ result->numFail += testSuite->numFail;
+ result->numSkips += testSuite->numSkips;
+}
+
+LinkedList getTestSuites(void);
+LinkedList getTestSuites(void)
+{
+ LinkedList unitTestSuites = newLinkedList();
+ linkedListAppend(unitTestSuites, addAudioClockTests());
+ linkedListAppend(unitTestSuites, addAudioSettingsTests());
+ linkedListAppend(unitTestSuites, addCharStringTests());
+ linkedListAppend(unitTestSuites, addEndianTests());
+ linkedListAppend(unitTestSuites, addFileTests());
+ linkedListAppend(unitTestSuites, addLinkedListTests());
+ linkedListAppend(unitTestSuites, addMidiSequenceTests());
+ linkedListAppend(unitTestSuites, addMidiSourceTests());
+ linkedListAppend(unitTestSuites, addPlatformInfoTests());
+ linkedListAppend(unitTestSuites, addPluginTests());
+ linkedListAppend(unitTestSuites, addPluginChainTests());
+ linkedListAppend(unitTestSuites, addPluginPresetTests());
+ linkedListAppend(unitTestSuites, addPluginVst2xIdTests());
+ linkedListAppend(unitTestSuites, addProgramOptionTests());
+ linkedListAppend(unitTestSuites, addSampleBufferTests());
+ linkedListAppend(unitTestSuites, addSampleSourceTests());
+ linkedListAppend(unitTestSuites, addTaskTimerTests());
+
+ linkedListAppend(unitTestSuites, addAnalysisClippingTests());
+ linkedListAppend(unitTestSuites, addAnalysisDistortionTests());
+ linkedListAppend(unitTestSuites, addAnalysisSilenceTests());
+
+ return unitTestSuites;
+}
+
+static void _setTestSuiteOnlyPrintFailing(void *item, void *userData)
+{
+ TestSuite testSuite = (TestSuite)item;
+ testSuite->onlyPrintFailing = true;
+}
+
+TestSuite runUnitTests(LinkedList testSuites, boolByte onlyPrintFailing);
+TestSuite runUnitTests(LinkedList testSuites, boolByte onlyPrintFailing)
+{
+ TestSuite suiteResults;
+
+ if (onlyPrintFailing) {
+ linkedListForeach(testSuites, _setTestSuiteOnlyPrintFailing, NULL);
+ }
+
+ linkedListForeach(testSuites, runTestSuite, NULL);
+ // Create a new test suite to be used as the userData passed to the foreach loop
+ suiteResults = newTestSuite("Suite results", NULL, NULL);
+ linkedListForeach(testSuites, _sumTestSuiteResults, suiteResults);
+
+ _printTestSummary(suiteResults->numSuccess + suiteResults->numFail + suiteResults->numSkips,
+ suiteResults->numSuccess, suiteResults->numFail, suiteResults->numSkips);
+
+ return suiteResults;
+}
+
+TestCase findTestCase(TestSuite testSuite, char *testName);
+TestCase findTestCase(TestSuite testSuite, char *testName)
+{
+ LinkedList iterator = testSuite->testCases;
+ TestCase currentTestCase = NULL;
+
+ while (iterator != NULL) {
+ if (iterator->item != NULL) {
+ currentTestCase = (TestCase)iterator->item;
+
+ if (!strncasecmp(currentTestCase->name, testName, strlen(currentTestCase->name))) {
+ return currentTestCase;
+ }
+ }
+
+ iterator = iterator->nextItem;
+ }
+
+ return NULL;
+}
+
+TestSuite findTestSuite(LinkedList testSuites, const CharString testSuiteName);
+TestSuite findTestSuite(LinkedList testSuites, const CharString testSuiteName)
+{
+ LinkedList iterator = testSuites;
+ TestSuite testSuite = NULL;
+
+ if (testSuiteName == NULL || charStringIsEmpty(testSuiteName)) {
+ return NULL;
+ }
+
+ while (iterator != NULL) {
+ if (iterator->item != NULL) {
+ testSuite = (TestSuite)iterator->item;
+
+ if (charStringIsEqualToCString(testSuiteName, testSuite->name, true)) {
+ break;
+ } else {
+ testSuite = NULL;
+ }
+ }
+
+ iterator = iterator->nextItem;
+ }
+
+ return testSuite;
+}
+
+static void _printTestCases(void *item, void *userData)
+{
+ TestCase testCase = (TestCase)item;
+ char *testSuiteName = (char *)userData;
+ printf("%s:%s\n", testSuiteName, testCase->name);
+}
+
+static void _printTestsInSuite(void *item, void *userData)
+{
+ TestSuite testSuite = (TestSuite)item;
+ linkedListForeach(testSuite->testCases, _printTestCases, testSuite->name);
+}
+
+void printUnitTestSuites(void);
+void printUnitTestSuites(void)
+{
+ LinkedList unitTestSuites = getTestSuites();
+ linkedListForeach(unitTestSuites, _printTestsInSuite, NULL);
+ freeLinkedListAndItems(unitTestSuites, (LinkedListFreeItemFunc)freeTestSuite);
+}