diff options
Diffstat (limited to 'test/unit/UnitTests.c')
| -rw-r--r-- | test/unit/UnitTests.c | 160 |
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); +} |
