@@ -88,6 +88,15 @@ class TestCmdlineParser : public TestFixture {
8888 TEST_CASE (enabledInternal);
8989#endif
9090 TEST_CASE (enabledMultiple);
91+ TEST_CASE (enabledInvalid);
92+ TEST_CASE (enabledError);
93+ TEST_CASE (enabledEmpty);
94+ TEST_CASE (disableAll);
95+ TEST_CASE (disableMultiple);
96+ TEST_CASE (disableStylePartial);
97+ TEST_CASE (disableInvalid);
98+ TEST_CASE (disableError);
99+ TEST_CASE (disableEmpty);
91100 TEST_CASE (inconclusive);
92101 TEST_CASE (errorExitcode);
93102 TEST_CASE (errorExitcodeMissing);
@@ -654,6 +663,109 @@ class TestCmdlineParser : public TestFixture {
654663 ASSERT_EQUALS (" " , GET_REDIRECT_OUTPUT);
655664 }
656665
666+ void enabledInvalid () {
667+ REDIRECT;
668+ const char * const argv[] = {" cppcheck" , " --enable=warning,missingIncludeSystem,style" , " file.cpp" };
669+ settings = Settings ();
670+ ASSERT (!defParser.parseFromArgs (3 , argv));
671+ ASSERT_EQUALS (" cppcheck: error: --enable parameter with the unknown name 'missingIncludeSystem'\n " , GET_REDIRECT_OUTPUT);
672+ }
673+
674+ void enabledError () {
675+ REDIRECT;
676+ const char * const argv[] = {" cppcheck" , " --enable=error" , " file.cpp" };
677+ settings = Settings ();
678+ ASSERT (!defParser.parseFromArgs (3 , argv));
679+ ASSERT_EQUALS (" cppcheck: error: --enable parameter with the unknown name 'error'\n " , GET_REDIRECT_OUTPUT);
680+ }
681+
682+ void enabledEmpty () {
683+ REDIRECT;
684+ const char * const argv[] = {" cppcheck" , " --enable=" , " file.cpp" };
685+ settings = Settings ();
686+ ASSERT (!defParser.parseFromArgs (3 , argv));
687+ ASSERT_EQUALS (" cppcheck: error: --enable parameter is empty\n " , GET_REDIRECT_OUTPUT);
688+ }
689+
690+ void disableAll () {
691+ REDIRECT;
692+ const char * const argv[] = {" cppcheck" , " --enable=all" , " --disable=all" };
693+ settings.severity .clear ();
694+ settings.checks .clear ();
695+ ASSERT (defParser.parseFromArgs (3 , argv));
696+ ASSERT_EQUALS (true , settings.severity .isEnabled (Severity::error));
697+ ASSERT_EQUALS (false , settings.severity .isEnabled (Severity::warning));
698+ ASSERT_EQUALS (false , settings.severity .isEnabled (Severity::style));
699+ ASSERT_EQUALS (false , settings.severity .isEnabled (Severity::performance));
700+ ASSERT_EQUALS (false , settings.severity .isEnabled (Severity::portability));
701+ ASSERT_EQUALS (false , settings.severity .isEnabled (Severity::debug));
702+ ASSERT_EQUALS (false , settings.checks .isEnabled (Checks::unusedFunction));
703+ ASSERT_EQUALS (false , settings.checks .isEnabled (Checks::missingInclude));
704+ ASSERT_EQUALS (false , settings.checks .isEnabled (Checks::internalCheck));
705+ ASSERT_EQUALS (" " , GET_REDIRECT_OUTPUT);
706+ }
707+
708+ void disableMultiple () {
709+ REDIRECT;
710+ const char * const argv[] = {" cppcheck" , " --enable=all" , " --disable=style" , " --disable=unusedFunction" };
711+ settings.severity .clear ();
712+ settings.checks .clear ();
713+ ASSERT (defParser.parseFromArgs (4 , argv));
714+ ASSERT_EQUALS (true , settings.severity .isEnabled (Severity::error));
715+ ASSERT_EQUALS (true , settings.severity .isEnabled (Severity::warning));
716+ ASSERT_EQUALS (false , settings.severity .isEnabled (Severity::style));
717+ ASSERT_EQUALS (true , settings.severity .isEnabled (Severity::performance));
718+ ASSERT_EQUALS (true , settings.severity .isEnabled (Severity::portability));
719+ ASSERT_EQUALS (true , settings.severity .isEnabled (Severity::debug));
720+ ASSERT_EQUALS (false , settings.checks .isEnabled (Checks::unusedFunction));
721+ ASSERT_EQUALS (true , settings.checks .isEnabled (Checks::missingInclude));
722+ ASSERT_EQUALS (false , settings.checks .isEnabled (Checks::internalCheck));
723+ ASSERT_EQUALS (" " , GET_REDIRECT_OUTPUT);
724+ }
725+
726+ // make sure the implied "style" checks are not added when "--enable=style" is specified
727+ void disableStylePartial () {
728+ REDIRECT;
729+ const char * const argv[] = {" cppcheck" , " --enable=style" , " --disable=performance" , " --enable=unusedFunction" };
730+ settings.severity .clear ();
731+ settings.checks .clear ();
732+ ASSERT (defParser.parseFromArgs (4 , argv));
733+ ASSERT_EQUALS (true , settings.severity .isEnabled (Severity::error));
734+ ASSERT_EQUALS (true , settings.severity .isEnabled (Severity::warning));
735+ ASSERT_EQUALS (true , settings.severity .isEnabled (Severity::style));
736+ ASSERT_EQUALS (false , settings.severity .isEnabled (Severity::performance));
737+ ASSERT_EQUALS (true , settings.severity .isEnabled (Severity::portability));
738+ ASSERT_EQUALS (false , settings.severity .isEnabled (Severity::debug));
739+ ASSERT_EQUALS (true , settings.checks .isEnabled (Checks::unusedFunction));
740+ ASSERT_EQUALS (false , settings.checks .isEnabled (Checks::missingInclude));
741+ ASSERT_EQUALS (false , settings.checks .isEnabled (Checks::internalCheck));
742+ ASSERT_EQUALS (" " , GET_REDIRECT_OUTPUT);
743+ }
744+
745+ void disableInvalid () {
746+ REDIRECT;
747+ const char * const argv[] = {" cppcheck" , " --disable=leaks" , " file.cpp" };
748+ settings = Settings ();
749+ ASSERT (!defParser.parseFromArgs (3 , argv));
750+ ASSERT_EQUALS (" cppcheck: error: --disable parameter with the unknown name 'leaks'\n " , GET_REDIRECT_OUTPUT);
751+ }
752+
753+ void disableError () {
754+ REDIRECT;
755+ const char * const argv[] = {" cppcheck" , " --disable=error" , " file.cpp" };
756+ settings = Settings ();
757+ ASSERT (!defParser.parseFromArgs (3 , argv));
758+ ASSERT_EQUALS (" cppcheck: error: --disable parameter with the unknown name 'error'\n " , GET_REDIRECT_OUTPUT);
759+ }
760+
761+ void disableEmpty () {
762+ REDIRECT;
763+ const char * const argv[] = {" cppcheck" , " --disable=" , " file.cpp" };
764+ settings = Settings ();
765+ ASSERT (!defParser.parseFromArgs (3 , argv));
766+ ASSERT_EQUALS (" cppcheck: error: --disable parameter is empty\n " , GET_REDIRECT_OUTPUT);
767+ }
768+
657769 void inconclusive () {
658770 REDIRECT;
659771 const char * const argv[] = {" cppcheck" , " --inconclusive" };
0 commit comments