UnitTests.cpp (2185B)
1 #include "UnitTests.h" 2 3 //============================================================================== 4 class ConsoleLogger : public Logger 5 { 6 void logMessage (const String& message) override 7 { 8 std::cout << message << std::endl; 9 10 #if JUCE_WINDOWS 11 Logger::outputDebugString (message); 12 #endif 13 } 14 }; 15 16 //============================================================================== 17 class ConsoleUnitTestRunner : public UnitTestRunner 18 { 19 void logMessage (const String& message) override 20 { 21 Logger::writeToLog (message); 22 } 23 }; 24 25 //============================================================================== 26 UnitTests::UnitTests() 27 { 28 this->commandOption = "--unit-tests"; 29 this->argumentDescription = "--unit-tests [--seed=RANDOM_SEED --all] TEST1 TEST2 ..."; 30 this->shortDescription = "Runs unit tests for ChowTapeModel"; 31 this->longDescription = ""; 32 this->command = std::bind (&UnitTests::runUnitTests, this, std::placeholders::_1); 33 } 34 35 void UnitTests::runUnitTests (const ArgumentList& args) 36 { 37 ConsoleLogger logger; 38 Logger::setCurrentLogger (&logger); 39 40 ConsoleUnitTestRunner runner; 41 auto seed = getRandomSeed (args); 42 43 auto tests = getTestsForArgs (args); 44 runner.runTests (tests, seed); 45 46 Logger::setCurrentLogger (nullptr); 47 48 for (int i = 0; i < runner.getNumResults(); ++i) 49 if (runner.getResult (i)->failures > 0) 50 ConsoleApplication::fail ("Unit Tests failed!"); 51 } 52 53 int64 UnitTests::getRandomSeed (const ArgumentList& args) 54 { 55 if (args.containsOption ("--seed")) 56 { 57 auto seedValueString = args.getValueForOption ("--seed"); 58 if (seedValueString.startsWith ("0x")) 59 return seedValueString.getHexValue64(); 60 61 return seedValueString.getLargeIntValue(); 62 } 63 64 return int64 (0); 65 } 66 67 Array<UnitTest*> UnitTests::getTestsForArgs (const ArgumentList& args) 68 { 69 if (args.containsOption ("--all")) 70 return UnitTest::getAllTests(); 71 72 Array<UnitTest*> unitTests; 73 74 for (auto* test : UnitTest::getAllTests()) 75 { 76 if (args.containsOption (test->getName())) 77 unitTests.add (test); 78 } 79 80 return unitTests; 81 }