@@ -1911,208 +1911,211 @@ class TestSuppressions : public TestFixture {
19111911 }
19121912 }
19131913
1914- void polyspaceMisraC2012 () const {
1914+ struct PolyspaceComment {
1915+ std::string text;
1916+ int line;
1917+
1918+ PolyspaceComment (const std::string &&text, int line)
1919+ : text(text)
1920+ , line(line)
1921+ {}
1922+ };
1923+
1924+ struct PolyspaceParseResult {
1925+ std::string errorId;
1926+ int lineNumber;
1927+ SuppressionList::Type type = SuppressionList::Type::unique;
1928+ int lineBegin = SuppressionList::Suppression::NO_LINE;
1929+ int lineEnd = SuppressionList::Suppression::NO_LINE;
1930+
1931+ PolyspaceParseResult (const std::string &&errorId,
1932+ int lineNumber,
1933+ SuppressionList::Type type = SuppressionList::Type::unique,
1934+ int lineBegin = SuppressionList::Suppression::NO_LINE,
1935+ int lineEnd = SuppressionList::Suppression::NO_LINE)
1936+ : errorId(errorId)
1937+ , lineNumber(lineNumber)
1938+ , type(type)
1939+ , lineBegin(lineBegin)
1940+ , lineEnd(lineEnd)
1941+ {}
1942+ };
1943+
1944+ void testPolyspaceSuppression (const Settings &settings,
1945+ std::initializer_list<PolyspaceComment> comments,
1946+ std::initializer_list<PolyspaceParseResult> results) const
1947+ {
19151948 SuppressionList list;
1916- Settings settings;
1917- settings.addons .emplace (" misra" );
19181949 polyspace::Parser parser (settings);
1919- parser.parse (" /* polyspace MISRA2012 : 2.7 */" , 1 , " file.c" );
1950+
1951+ const std::string fileName = " file.c" ;
1952+ for (const auto &comment : comments)
1953+ parser.parse (comment.text , comment.line , fileName);
1954+
19201955 parser.collect (list);
19211956 const auto &supprs = list.getSuppressions ();
1922- ASSERT_EQUALS (1 , supprs.size ());
1923- const auto s = supprs.cbegin ();
1924- ASSERT (s->isInline );
1925- ASSERT (s->isPolyspace );
1926- ASSERT_EQUALS (" misra-c2012-2.7" , s->errorId );
1927- ASSERT_EQUALS (1 , s->lineNumber );
1928- ASSERT_EQUALS_ENUM (SuppressionList::Type::unique, s->type );
1929- ASSERT_EQUALS (SuppressionList::Suppression::NO_LINE, s->lineBegin );
1930- ASSERT_EQUALS (SuppressionList::Suppression::NO_LINE, s->lineEnd );
1957+
1958+ ASSERT_EQUALS (results.size (), supprs.size ());
1959+
1960+ auto supprIt = supprs.cbegin ();
1961+ const auto *resultIt = results.begin ();
1962+
1963+ for (; supprIt != supprs.cend (); supprIt++, resultIt++) {
1964+ ASSERT (supprIt->isPolyspace );
1965+ ASSERT (supprIt->isInline );
1966+ ASSERT_EQUALS (fileName, supprIt->fileName );
1967+ ASSERT_EQUALS (resultIt->errorId , supprIt->errorId );
1968+ ASSERT_EQUALS_ENUM (resultIt->type , supprIt->type );
1969+ ASSERT_EQUALS (resultIt->lineNumber , supprIt->lineNumber );
1970+ ASSERT_EQUALS (resultIt->lineBegin , supprIt->lineBegin );
1971+ ASSERT_EQUALS (resultIt->lineEnd , supprIt->lineEnd );
1972+ }
1973+ }
1974+
1975+ void polyspaceMisraC2012 () const {
1976+ Settings settings;
1977+ AddonInfo info;
1978+ info.name = " misra" ;
1979+ settings.addonInfos .push_back (info);
1980+
1981+ testPolyspaceSuppression (
1982+ settings,
1983+ { { " /* polyspace MISRA2012 : 2.7 */" , 1 } },
1984+ { { " misra-c2012-2.7" , 1 } }
1985+ );
19311986 }
19321987
19331988 void polyspacePremiumMisraC2012 () const {
1934- SuppressionList list;
19351989 Settings settings;
19361990 settings.premiumArgs = " --misra-c-2012" ;
1937- polyspace::Parser parser (settings);
1938- parser.parse (" /* polyspace MISRA2012 : 2.7 */" , 1 , " file.c" );
1939- parser.collect (list);
1940- const auto &supprs = list.getSuppressions ();
1941- ASSERT_EQUALS (1 , supprs.size ());
1942- const auto s = supprs.cbegin ();
1943- ASSERT_EQUALS (" premium-misra-c-2012-2.7" , s->errorId );
1991+ testPolyspaceSuppression (
1992+ settings,
1993+ { { " /* polyspace MISRA2012 : 2.7 */" , 1 } },
1994+ { { " premium-misra-c-2012-2.7" , 1 } }
1995+ );
19441996 }
19451997
19461998 void polyspaceMisraC2023 () const {
1947- SuppressionList list;
19481999 Settings settings;
19492000 settings.premiumArgs = " --misra-c-2023" ;
1950- polyspace::Parser parser (settings);
1951- parser.parse (" // polyspace MISRA-C-2023 : *" , 2 , " file.c" );
1952- parser.collect (list);
1953- const auto &supprs = list.getSuppressions ();
1954- ASSERT_EQUALS (1 , supprs.size ());
1955- const auto s = supprs.cbegin ();
1956- ASSERT_EQUALS (" premium-misra-c-2023-*" , s->errorId );
1957- ASSERT_EQUALS (2 , s->lineNumber );
1958- ASSERT_EQUALS (SuppressionList::Suppression::NO_LINE, s->lineBegin );
1959- ASSERT_EQUALS (SuppressionList::Suppression::NO_LINE, s->lineEnd );
2001+ testPolyspaceSuppression (
2002+ settings,
2003+ { { " // polyspace MISRA-C-2023 : *" , 2 } },
2004+ { { " premium-misra-c-2023-*" , 2 } }
2005+ );
19602006 }
19612007
19622008 void polyspaceMisraCpp2008 () const {
1963- SuppressionList list;
19642009 Settings settings;
19652010 settings.premiumArgs = " --misra-cpp-2008" ;
1966- polyspace::Parser parser (settings);
1967- parser.parse (" // polyspace MISRA-CPP : 7-1-1" , 1 , " file.c" );
1968- parser.collect (list);
1969- const auto &supprs = list.getSuppressions ();
1970- ASSERT_EQUALS (1 , supprs.size ());
1971- const auto s = supprs.cbegin ();
1972- ASSERT_EQUALS (" premium-misra-cpp-2008-7-1-1" , s->errorId );
2011+ testPolyspaceSuppression (
2012+ settings,
2013+ { { " // polyspace MISRA-CPP : 7-1-1" , 1 } },
2014+ { { " premium-misra-cpp-2008-7-1-1" , 1 } }
2015+ );
19732016 }
19742017
19752018 void polyspaceMisraCpp2023 () const {
1976- SuppressionList list;
19772019 Settings settings;
19782020 settings.premiumArgs = " --misra-cpp-2023" ;
1979- polyspace::Parser parser (settings);
1980- parser.parse (" // polyspace MISRA-CPP-2023 : 4.6.1" , 1 , " file.c" );
1981- parser.collect (list);
1982- const auto &supprs = list.getSuppressions ();
1983- ASSERT_EQUALS (1 , supprs.size ());
1984- const auto s = supprs.cbegin ();
1985- ASSERT_EQUALS (" premium-misra-cpp-2023-4.6.1" , s->errorId );
2021+ testPolyspaceSuppression (
2022+ settings,
2023+ { { " // polyspace MISRA-CPP-2023 : 4.6.1" , 1 } },
2024+ { { " premium-misra-cpp-2023-4.6.1" , 1 } }
2025+ );
19862026 }
19872027
19882028 void polyspaceCertC () const {
1989- SuppressionList list;
19902029 Settings settings;
19912030 settings.premiumArgs = " --cert-c" ;
1992- polyspace::Parser parser (settings);
1993- parser.parse (" // polyspace CERT-C : PRE30" , 1 , " file.c" );
1994- parser.collect (list);
1995- const auto &supprs = list.getSuppressions ();
1996- ASSERT_EQUALS (1 , supprs.size ());
1997- const auto s = supprs.cbegin ();
1998- ASSERT_EQUALS (" premium-cert-c-PRE30" , s->errorId );
2031+ testPolyspaceSuppression (
2032+ settings,
2033+ { { " // polyspace CERT-C : PRE30" , 1 } },
2034+ { { " premium-cert-c-PRE30" , 1 } }
2035+ );
19992036 }
20002037
20012038 void polyspaceCertCpp () const {
2002- SuppressionList list;
20032039 Settings settings;
20042040 settings.premiumArgs = " --cert-cpp" ;
2005- polyspace::Parser parser (settings);
2006- parser.parse (" // polyspace CERT-CPP : CTR51" , 1 , " file.c" );
2007- parser.collect (list);
2008- const auto &supprs = list.getSuppressions ();
2009- ASSERT_EQUALS (1 , supprs.size ());
2010- const auto s = supprs.cbegin ();
2011- ASSERT_EQUALS (" premium-cert-cpp-CTR51" , s->errorId );
2041+ testPolyspaceSuppression (
2042+ settings,
2043+ { { " // polyspace CERT-CPP : CTR51" , 1 } },
2044+ { { " premium-cert-cpp-CTR51" , 1 } }
2045+ );
20122046 }
20132047
20142048 void polyspaceAutosar () const {
2015- SuppressionList list;
20162049 Settings settings;
20172050 settings.premiumArgs = " --autosar" ;
2018- polyspace::Parser parser (settings);
2019- parser.parse (" // polyspace AUTOSAR-CPP14 : a2-10-1" , 1 , " file.c" );
2020- parser.collect (list);
2021- const auto &supprs = list.getSuppressions ();
2022- ASSERT_EQUALS (1 , supprs.size ());
2023- const auto s = supprs.cbegin ();
2024- ASSERT_EQUALS (" premium-autosar-a2-10-1" , s->errorId );
2051+ testPolyspaceSuppression (
2052+ settings,
2053+ { { " // polyspace AUTOSAR-CPP14 : a2-10-1" , 1 } },
2054+ { { " premium-autosar-a2-10-1" , 1 } }
2055+ );
20252056 }
20262057
20272058 void polyspaceIgnored () const {
2028- SuppressionList list ;
2029- const Settings settings;
2030- polyspace::Parser parser ( settings);
2031- parser. parse ( " // polyspace DEFECT : INT_OVFL" , 1 , " file.c " );
2032- parser. collect (list);
2033- ASSERT (list. getSuppressions (). empty () );
2059+ Settings settings ;
2060+ testPolyspaceSuppression (
2061+ settings,
2062+ { { " // polyspace DEFECT : INT_OVFL AUTOSAR-CPP14 : a2-10-1 " , 1 } },
2063+ {}
2064+ );
20342065 }
20352066
20362067 void polyspaceMultiple1 () const {
2037- SuppressionList list;
20382068 Settings settings;
20392069 settings.premiumArgs = " --misra-c-2012" ;
2040- polyspace::Parser parser (settings);
2041- parser.parse (" /* polyspace MISRA2012 : 2.7, 9.1 */" , 1 , " file.c" );
2042- parser.collect (list);
2043- const auto &supprs = list.getSuppressions ();
2044- ASSERT_EQUALS (2 , supprs.size ());
2045- auto s = supprs.cbegin ();
2046- ASSERT_EQUALS (" premium-misra-c-2012-2.7" , s->errorId );
2047- s++;
2048- ASSERT_EQUALS (" premium-misra-c-2012-9.1" , s->errorId );
2070+ testPolyspaceSuppression (
2071+ settings,
2072+ { { " /* polyspace MISRA2012 : 2.7, 9.1 */" , 1 } },
2073+ { { " premium-misra-c-2012-2.7" , 1 },
2074+ { " premium-misra-c-2012-9.1" , 1 } }
2075+ );
20492076 }
20502077
20512078 void polyspaceMultiple2 () const {
2052- SuppressionList list;
20532079 Settings settings;
20542080 settings.premiumArgs = " --misra-c-2012 --misra-cpp-2008" ;
2055- polyspace::Parser parser (settings);
2056- parser.parse (" /* polyspace MISRA2012 : 2.7 MISRA-CPP : 7-1-1 */" , 1 , " file.c" );
2057- parser.collect (list);
2058- const auto &supprs = list.getSuppressions ();
2059- ASSERT_EQUALS (2 , supprs.size ());
2060- auto s = supprs.cbegin ();
2061- ASSERT_EQUALS (" premium-misra-c-2012-2.7" , s->errorId );
2062- s++;
2063- ASSERT_EQUALS (" premium-misra-cpp-2008-7-1-1" , s->errorId );
2081+ testPolyspaceSuppression (
2082+ settings,
2083+ { { " /* polyspace MISRA2012 : 2.7 MISRA-CPP : 7-1-1 */" , 1 } },
2084+ { { " premium-misra-c-2012-2.7" , 1 },
2085+ { " premium-misra-cpp-2008-7-1-1" , 1 } }
2086+ );
20642087 }
20652088
20662089 void polyspaceMultiple3 () const {
2067- SuppressionList list;
20682090 Settings settings;
20692091 settings.premiumArgs = " --misra-c-2012 --misra-cpp-2008" ;
2070- polyspace::Parser parser (settings);
2071- parser.parse (" /* polyspace MISRA2012 : 2.7 [Justified:Low] \" comment 1\" polyspace MISRA-CPP : 7-1-1 \" comment 2\" */" , 1 , " file.c" );
2072- parser.collect (list);
2073- const auto &supprs = list.getSuppressions ();
2074- ASSERT_EQUALS (2 , supprs.size ());
2075- auto s = supprs.cbegin ();
2076- ASSERT_EQUALS (" premium-misra-c-2012-2.7" , s->errorId );
2077- s++;
2078- ASSERT_EQUALS (" premium-misra-cpp-2008-7-1-1" , s->errorId );
2092+ testPolyspaceSuppression (
2093+ settings,
2094+ { { " /* polyspace MISRA2012 : 2.7 [Justified:Low] \" comment 1\" polyspace MISRA-CPP : 7-1-1 \" comment 2\" */" , 1 } },
2095+ { { " premium-misra-c-2012-2.7" , 1 },
2096+ { " premium-misra-cpp-2008-7-1-1" , 1 }, }
2097+ );
20792098 }
20802099
20812100 void polyspaceRange () const {
2082- SuppressionList list;
20832101 Settings settings;
20842102 settings.premiumArgs = " --misra-c-2012" ;
2085- polyspace::Parser parser (settings);
2086- parser.parse (" /* polyspace +3 MISRA2012 : 2.7 */" , 1 , " file.c" );
2087- parser.collect (list);
2088- const auto &supprs = list.getSuppressions ();
2089- ASSERT_EQUALS (1 , supprs.size ());
2090- const auto s = supprs.cbegin ();
2091- ASSERT (s->isInline );
2092- ASSERT_EQUALS (" premium-misra-c-2012-2.7" , s->errorId );
2093- ASSERT_EQUALS (1 , s->lineNumber );
2094- ASSERT_EQUALS_ENUM (SuppressionList::Type::block, s->type );
2095- ASSERT_EQUALS (1 , s->lineBegin );
2096- ASSERT_EQUALS (4 , s->lineEnd );
2103+ testPolyspaceSuppression (
2104+ settings,
2105+ { { " /* polyspace +3 MISRA2012 : 2.7 */" , 1 } },
2106+ { { " premium-misra-c-2012-2.7" , 1 , SuppressionList::Type::block, 1 , 4 } }
2107+ );
20972108 }
20982109
20992110 void polyspaceBlock () const {
2100- SuppressionList list;
21012111 Settings settings;
21022112 settings.premiumArgs = " --misra-c-2012" ;
2103- polyspace::Parser parser (settings);
2104- parser.parse (" /* polyspace-begin MISRA2012 : 2.7 */" , 1 , " file.c" );
2105- parser.parse (" /* polyspace-end MISRA2012 : 2.7 */" , 5 , " file.c" );
2106- parser.collect (list);
2107- const auto &supprs = list.getSuppressions ();
2108- ASSERT_EQUALS (1 , supprs.size ());
2109- const auto s = supprs.cbegin ();
2110- ASSERT (s->isInline );
2111- ASSERT_EQUALS (" premium-misra-c-2012-2.7" , s->errorId );
2112- ASSERT_EQUALS (1 , s->lineNumber );
2113- ASSERT_EQUALS_ENUM (SuppressionList::Type::block, s->type );
2114- ASSERT_EQUALS (1 , s->lineBegin );
2115- ASSERT_EQUALS (5 , s->lineEnd );
2113+ testPolyspaceSuppression (
2114+ settings,
2115+ { { " /* polyspace-begin MISRA2012 : 2.7 */" , 1 },
2116+ { " /* polyspace-end MISRA2012 : 2.7 */" , 5 } },
2117+ { { " premium-misra-c-2012-2.7" , 1 , SuppressionList::Type::block, 1 , 5 } }
2118+ );
21162119 }
21172120};
21182121
0 commit comments