@@ -1912,208 +1912,213 @@ class TestSuppressions : public TestFixture {
19121912 }
19131913 }
19141914
1915- void polyspaceMisraC2012 () const {
1915+ struct PolyspaceComment {
1916+ std::string text;
1917+ int line;
1918+
1919+ PolyspaceComment (const std::string &text, int line)
1920+ : text(text)
1921+ , line(line)
1922+ {
1923+ }
1924+ };
1925+
1926+ struct PolyspaceParseResult {
1927+ std::string errorId;
1928+ int lineNumber;
1929+ SuppressionList::Type type = SuppressionList::Type::unique;
1930+ int lineBegin = SuppressionList::Suppression::NO_LINE;
1931+ int lineEnd = SuppressionList::Suppression::NO_LINE;
1932+
1933+ PolyspaceParseResult (const std::string &errorId,
1934+ int lineNumber,
1935+ SuppressionList::Type type = SuppressionList::Type::unique,
1936+ int lineBegin = SuppressionList::Suppression::NO_LINE,
1937+ int lineEnd = SuppressionList::Suppression::NO_LINE)
1938+ : errorId(errorId)
1939+ , lineNumber(lineNumber)
1940+ , type(type)
1941+ , lineBegin(lineBegin)
1942+ , lineEnd(lineEnd)
1943+ {
1944+ }
1945+ };
1946+
1947+ void testPolyspaceSuppression (const Settings &settings,
1948+ std::initializer_list<PolyspaceComment> comments,
1949+ std::initializer_list<PolyspaceParseResult> results) const
1950+ {
19161951 SuppressionList list;
1917- Settings settings;
1918- settings.addons .emplace (" misra" );
19191952 polyspace::Parser parser (settings);
1920- parser.parse (" /* polyspace MISRA2012 : 2.7 */" , 1 , " file.c" );
1953+
1954+ const std::string fileName = " file.c" ;
1955+ for (const auto &comment : comments)
1956+ parser.parse (comment.text , comment.line , fileName);
1957+
19211958 parser.collect (list);
19221959 const auto &supprs = list.getSuppressions ();
1923- ASSERT_EQUALS (1 , supprs.size ());
1924- const auto s = supprs.cbegin ();
1925- ASSERT (s->isInline );
1926- ASSERT (s->isPolyspace );
1927- ASSERT_EQUALS (" misra-c2012-2.7" , s->errorId );
1928- ASSERT_EQUALS (1 , s->lineNumber );
1929- ASSERT_EQUALS_ENUM (SuppressionList::Type::unique, s->type );
1930- ASSERT_EQUALS (SuppressionList::Suppression::NO_LINE, s->lineBegin );
1931- ASSERT_EQUALS (SuppressionList::Suppression::NO_LINE, s->lineEnd );
1960+
1961+ ASSERT_EQUALS (results.size (), supprs.size ());
1962+
1963+ auto supprIt = supprs.cbegin ();
1964+ auto resultIt = results.begin ();
1965+
1966+ for (; supprIt != supprs.cend (); supprIt++, resultIt++) {
1967+ ASSERT (supprIt->isPolyspace );
1968+ ASSERT (supprIt->isInline );
1969+ ASSERT_EQUALS (fileName, supprIt->fileName );
1970+ ASSERT_EQUALS (resultIt->errorId , supprIt->errorId );
1971+ ASSERT_EQUALS_ENUM (resultIt->type , supprIt->type );
1972+ ASSERT_EQUALS (resultIt->lineNumber , supprIt->lineNumber );
1973+ ASSERT_EQUALS (resultIt->lineBegin , supprIt->lineBegin );
1974+ ASSERT_EQUALS (resultIt->lineEnd , supprIt->lineEnd );
1975+ }
1976+ }
1977+
1978+ void polyspaceMisraC2012 () const {
1979+ Settings settings;
1980+ AddonInfo info;
1981+ info.name = " misra" ;
1982+ settings.addonInfos .push_back (info);
1983+
1984+ testPolyspaceSuppression (
1985+ settings,
1986+ { { " /* polyspace MISRA2012 : 2.7 */" , 1 } },
1987+ { { " misra-c2012-2.7" , 1 } }
1988+ );
19321989 }
19331990
19341991 void polyspacePremiumMisraC2012 () const {
1935- SuppressionList list;
19361992 Settings settings;
19371993 settings.premiumArgs = " --misra-c-2012" ;
1938- polyspace::Parser parser (settings);
1939- parser.parse (" /* polyspace MISRA2012 : 2.7 */" , 1 , " file.c" );
1940- parser.collect (list);
1941- const auto &supprs = list.getSuppressions ();
1942- ASSERT_EQUALS (1 , supprs.size ());
1943- const auto s = supprs.cbegin ();
1944- ASSERT_EQUALS (" premium-misra-c-2012-2.7" , s->errorId );
1994+ testPolyspaceSuppression (
1995+ settings,
1996+ { { " /* polyspace MISRA2012 : 2.7 */" , 1 } },
1997+ { { " premium-misra-c-2012-2.7" , 1 } }
1998+ );
19451999 }
19462000
19472001 void polyspaceMisraC2023 () const {
1948- SuppressionList list;
19492002 Settings settings;
19502003 settings.premiumArgs = " --misra-c-2023" ;
1951- polyspace::Parser parser (settings);
1952- parser.parse (" // polyspace MISRA-C-2023 : *" , 2 , " file.c" );
1953- parser.collect (list);
1954- const auto &supprs = list.getSuppressions ();
1955- ASSERT_EQUALS (1 , supprs.size ());
1956- const auto s = supprs.cbegin ();
1957- ASSERT_EQUALS (" premium-misra-c-2023-*" , s->errorId );
1958- ASSERT_EQUALS (2 , s->lineNumber );
1959- ASSERT_EQUALS (SuppressionList::Suppression::NO_LINE, s->lineBegin );
1960- ASSERT_EQUALS (SuppressionList::Suppression::NO_LINE, s->lineEnd );
2004+ testPolyspaceSuppression (
2005+ settings,
2006+ { { " // polyspace MISRA-C-2023 : *" , 2 } },
2007+ { { " premium-misra-c-2023-*" , 2 } }
2008+ );
19612009 }
19622010
19632011 void polyspaceMisraCpp2008 () const {
1964- SuppressionList list;
19652012 Settings settings;
19662013 settings.premiumArgs = " --misra-cpp-2008" ;
1967- polyspace::Parser parser (settings);
1968- parser.parse (" // polyspace MISRA-CPP : 7-1-1" , 1 , " file.c" );
1969- parser.collect (list);
1970- const auto &supprs = list.getSuppressions ();
1971- ASSERT_EQUALS (1 , supprs.size ());
1972- const auto s = supprs.cbegin ();
1973- ASSERT_EQUALS (" premium-misra-cpp-2008-7-1-1" , s->errorId );
2014+ testPolyspaceSuppression (
2015+ settings,
2016+ { { " // polyspace MISRA-CPP : 7-1-1" , 1 } },
2017+ { { " premium-misra-cpp-2008-7-1-1" , 1 } }
2018+ );
19742019 }
19752020
19762021 void polyspaceMisraCpp2023 () const {
1977- SuppressionList list;
19782022 Settings settings;
19792023 settings.premiumArgs = " --misra-cpp-2023" ;
1980- polyspace::Parser parser (settings);
1981- parser.parse (" // polyspace MISRA-CPP-2023 : 4.6.1" , 1 , " file.c" );
1982- parser.collect (list);
1983- const auto &supprs = list.getSuppressions ();
1984- ASSERT_EQUALS (1 , supprs.size ());
1985- const auto s = supprs.cbegin ();
1986- ASSERT_EQUALS (" premium-misra-cpp-2023-4.6.1" , s->errorId );
2024+ testPolyspaceSuppression (
2025+ settings,
2026+ { { " // polyspace MISRA-CPP-2023 : 4.6.1" , 1 } },
2027+ { { " premium-misra-cpp-2023-4.6.1" , 1 } }
2028+ );
19872029 }
19882030
19892031 void polyspaceCertC () const {
1990- SuppressionList list;
19912032 Settings settings;
19922033 settings.premiumArgs = " --cert-c" ;
1993- polyspace::Parser parser (settings);
1994- parser.parse (" // polyspace CERT-C : PRE30" , 1 , " file.c" );
1995- parser.collect (list);
1996- const auto &supprs = list.getSuppressions ();
1997- ASSERT_EQUALS (1 , supprs.size ());
1998- const auto s = supprs.cbegin ();
1999- ASSERT_EQUALS (" premium-cert-c-PRE30" , s->errorId );
2034+ testPolyspaceSuppression (
2035+ settings,
2036+ { { " // polyspace CERT-C : PRE30" , 1 } },
2037+ { { " premium-cert-c-PRE30" , 1 } }
2038+ );
20002039 }
20012040
20022041 void polyspaceCertCpp () const {
2003- SuppressionList list;
20042042 Settings settings;
20052043 settings.premiumArgs = " --cert-cpp" ;
2006- polyspace::Parser parser (settings);
2007- parser.parse (" // polyspace CERT-CPP : CTR51" , 1 , " file.c" );
2008- parser.collect (list);
2009- const auto &supprs = list.getSuppressions ();
2010- ASSERT_EQUALS (1 , supprs.size ());
2011- const auto s = supprs.cbegin ();
2012- ASSERT_EQUALS (" premium-cert-cpp-CTR51" , s->errorId );
2044+ testPolyspaceSuppression (
2045+ settings,
2046+ { { " // polyspace CERT-CPP : CTR51" , 1 } },
2047+ { { " premium-cert-cpp-CTR51" , 1 } }
2048+ );
20132049 }
20142050
20152051 void polyspaceAutosar () const {
2016- SuppressionList list;
20172052 Settings settings;
20182053 settings.premiumArgs = " --autosar" ;
2019- polyspace::Parser parser (settings);
2020- parser.parse (" // polyspace AUTOSAR-CPP14 : a2-10-1" , 1 , " file.c" );
2021- parser.collect (list);
2022- const auto &supprs = list.getSuppressions ();
2023- ASSERT_EQUALS (1 , supprs.size ());
2024- const auto s = supprs.cbegin ();
2025- ASSERT_EQUALS (" premium-autosar-a2-10-1" , s->errorId );
2054+ testPolyspaceSuppression (
2055+ settings,
2056+ { { " // polyspace AUTOSAR-CPP14 : a2-10-1" , 1 } },
2057+ { { " premium-autosar-a2-10-1" , 1 } }
2058+ );
20262059 }
20272060
20282061 void polyspaceIgnored () const {
2029- SuppressionList list ;
2030- const Settings settings;
2031- polyspace::Parser parser ( settings);
2032- parser. parse ( " // polyspace DEFECT : INT_OVFL" , 1 , " file.c " );
2033- parser. collect (list);
2034- ASSERT (list. getSuppressions (). empty () );
2062+ Settings settings ;
2063+ testPolyspaceSuppression (
2064+ settings,
2065+ { { " // polyspace DEFECT : INT_OVFL AUTOSAR-CPP14 : a2-10-1 " , 1 } },
2066+ {}
2067+ );
20352068 }
20362069
20372070 void polyspaceMultiple1 () const {
2038- SuppressionList list;
20392071 Settings settings;
20402072 settings.premiumArgs = " --misra-c-2012" ;
2041- polyspace::Parser parser (settings);
2042- parser.parse (" /* polyspace MISRA2012 : 2.7, 9.1 */" , 1 , " file.c" );
2043- parser.collect (list);
2044- const auto &supprs = list.getSuppressions ();
2045- ASSERT_EQUALS (2 , supprs.size ());
2046- auto s = supprs.cbegin ();
2047- ASSERT_EQUALS (" premium-misra-c-2012-2.7" , s->errorId );
2048- s++;
2049- ASSERT_EQUALS (" premium-misra-c-2012-9.1" , s->errorId );
2073+ testPolyspaceSuppression (
2074+ settings,
2075+ { { " /* polyspace MISRA2012 : 2.7, 9.1 */" , 1 } },
2076+ { { " premium-misra-c-2012-2.7" , 1 },
2077+ { " premium-misra-c-2012-9.1" , 1 } }
2078+ );
20502079 }
20512080
20522081 void polyspaceMultiple2 () const {
2053- SuppressionList list;
20542082 Settings settings;
20552083 settings.premiumArgs = " --misra-c-2012 --misra-cpp-2008" ;
2056- polyspace::Parser parser (settings);
2057- parser.parse (" /* polyspace MISRA2012 : 2.7 MISRA-CPP : 7-1-1 */" , 1 , " file.c" );
2058- parser.collect (list);
2059- const auto &supprs = list.getSuppressions ();
2060- ASSERT_EQUALS (2 , supprs.size ());
2061- auto s = supprs.cbegin ();
2062- ASSERT_EQUALS (" premium-misra-c-2012-2.7" , s->errorId );
2063- s++;
2064- ASSERT_EQUALS (" premium-misra-cpp-2008-7-1-1" , s->errorId );
2084+ testPolyspaceSuppression (
2085+ settings,
2086+ { { " /* polyspace MISRA2012 : 2.7 MISRA-CPP : 7-1-1 */" , 1 } },
2087+ { { " premium-misra-c-2012-2.7" , 1 },
2088+ { " premium-misra-cpp-2008-7-1-1" , 1 } }
2089+ );
20652090 }
20662091
20672092 void polyspaceMultiple3 () const {
2068- SuppressionList list;
20692093 Settings settings;
20702094 settings.premiumArgs = " --misra-c-2012 --misra-cpp-2008" ;
2071- polyspace::Parser parser (settings);
2072- parser.parse (" /* polyspace MISRA2012 : 2.7 [Justified:Low] \" comment 1\" polyspace MISRA-CPP : 7-1-1 \" comment 2\" */" , 1 , " file.c" );
2073- parser.collect (list);
2074- const auto &supprs = list.getSuppressions ();
2075- ASSERT_EQUALS (2 , supprs.size ());
2076- auto s = supprs.cbegin ();
2077- ASSERT_EQUALS (" premium-misra-c-2012-2.7" , s->errorId );
2078- s++;
2079- ASSERT_EQUALS (" premium-misra-cpp-2008-7-1-1" , s->errorId );
2095+ testPolyspaceSuppression (
2096+ settings,
2097+ { { " /* polyspace MISRA2012 : 2.7 [Justified:Low] \" comment 1\" polyspace MISRA-CPP : 7-1-1 \" comment 2\" */" , 1 } },
2098+ { { " premium-misra-c-2012-2.7" , 1 },
2099+ { " premium-misra-cpp-2008-7-1-1" , 1 }, }
2100+ );
20802101 }
20812102
20822103 void polyspaceRange () const {
2083- SuppressionList list;
20842104 Settings settings;
20852105 settings.premiumArgs = " --misra-c-2012" ;
2086- polyspace::Parser parser (settings);
2087- parser.parse (" /* polyspace +3 MISRA2012 : 2.7 */" , 1 , " file.c" );
2088- parser.collect (list);
2089- const auto &supprs = list.getSuppressions ();
2090- ASSERT_EQUALS (1 , supprs.size ());
2091- const auto s = supprs.cbegin ();
2092- ASSERT (s->isInline );
2093- ASSERT_EQUALS (" premium-misra-c-2012-2.7" , s->errorId );
2094- ASSERT_EQUALS (1 , s->lineNumber );
2095- ASSERT_EQUALS_ENUM (SuppressionList::Type::block, s->type );
2096- ASSERT_EQUALS (1 , s->lineBegin );
2097- ASSERT_EQUALS (4 , s->lineEnd );
2106+ testPolyspaceSuppression (
2107+ settings,
2108+ { { " /* polyspace +3 MISRA2012 : 2.7 */" , 1 } },
2109+ { { " premium-misra-c-2012-2.7" , 1 , SuppressionList::Type::block, 1 , 4 } }
2110+ );
20982111 }
20992112
21002113 void polyspaceBlock () const {
2101- SuppressionList list;
21022114 Settings settings;
21032115 settings.premiumArgs = " --misra-c-2012" ;
2104- polyspace::Parser parser (settings);
2105- parser.parse (" /* polyspace-begin MISRA2012 : 2.7 */" , 1 , " file.c" );
2106- parser.parse (" /* polyspace-end MISRA2012 : 2.7 */" , 5 , " file.c" );
2107- parser.collect (list);
2108- const auto &supprs = list.getSuppressions ();
2109- ASSERT_EQUALS (1 , supprs.size ());
2110- const auto s = supprs.cbegin ();
2111- ASSERT (s->isInline );
2112- ASSERT_EQUALS (" premium-misra-c-2012-2.7" , s->errorId );
2113- ASSERT_EQUALS (1 , s->lineNumber );
2114- ASSERT_EQUALS_ENUM (SuppressionList::Type::block, s->type );
2115- ASSERT_EQUALS (1 , s->lineBegin );
2116- ASSERT_EQUALS (5 , s->lineEnd );
2116+ testPolyspaceSuppression (
2117+ settings,
2118+ { { " /* polyspace-begin MISRA2012 : 2.7 */" , 1 },
2119+ { " /* polyspace-end MISRA2012 : 2.7 */" , 5 } },
2120+ { { " premium-misra-c-2012-2.7" , 1 , SuppressionList::Type::block, 1 , 5 } }
2121+ );
21172122 }
21182123};
21192124
0 commit comments