@@ -1912,208 +1912,211 @@ 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+ struct PolyspaceParseResult {
1926+ std::string errorId;
1927+ int lineNumber;
1928+ SuppressionList::Type type = SuppressionList::Type::unique;
1929+ int lineBegin = SuppressionList::Suppression::NO_LINE;
1930+ int lineEnd = SuppressionList::Suppression::NO_LINE;
1931+
1932+ PolyspaceParseResult (const std::string &errorId,
1933+ int lineNumber,
1934+ SuppressionList::Type type = SuppressionList::Type::unique,
1935+ int lineBegin = SuppressionList::Suppression::NO_LINE,
1936+ int lineEnd = SuppressionList::Suppression::NO_LINE)
1937+ : errorId(errorId)
1938+ , lineNumber(lineNumber)
1939+ , type(type)
1940+ , lineBegin(lineBegin)
1941+ , lineEnd(lineEnd)
1942+ {}
1943+ };
1944+
1945+ void testPolyspaceSuppression (const Settings &settings,
1946+ std::initializer_list<PolyspaceComment> comments,
1947+ std::initializer_list<PolyspaceParseResult> results) const
1948+ {
19161949 SuppressionList list;
1917- Settings settings;
1918- settings.addons .emplace (" misra" );
19191950 polyspace::Parser parser (settings);
1920- parser.parse (" /* polyspace MISRA2012 : 2.7 */" , 1 , " file.c" );
1951+
1952+ const std::string fileName = " file.c" ;
1953+ for (const auto &comment : comments)
1954+ parser.parse (comment.text , comment.line , fileName);
1955+
19211956 parser.collect (list);
19221957 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 );
1958+
1959+ ASSERT_EQUALS (results.size (), supprs.size ());
1960+
1961+ auto supprIt = supprs.cbegin ();
1962+ auto resultIt = results.begin ();
1963+
1964+ for (; supprIt != supprs.cend (); supprIt++, resultIt++) {
1965+ ASSERT (supprIt->isPolyspace );
1966+ ASSERT (supprIt->isInline );
1967+ ASSERT_EQUALS (fileName, supprIt->fileName );
1968+ ASSERT_EQUALS (resultIt->errorId , supprIt->errorId );
1969+ ASSERT_EQUALS_ENUM (resultIt->type , supprIt->type );
1970+ ASSERT_EQUALS (resultIt->lineNumber , supprIt->lineNumber );
1971+ ASSERT_EQUALS (resultIt->lineBegin , supprIt->lineBegin );
1972+ ASSERT_EQUALS (resultIt->lineEnd , supprIt->lineEnd );
1973+ }
1974+ }
1975+
1976+ void polyspaceMisraC2012 () const {
1977+ Settings settings;
1978+ AddonInfo info;
1979+ info.name = " misra" ;
1980+ settings.addonInfos .push_back (info);
1981+
1982+ testPolyspaceSuppression (
1983+ settings,
1984+ { { " /* polyspace MISRA2012 : 2.7 */" , 1 } },
1985+ { { " misra-c2012-2.7" , 1 } }
1986+ );
19321987 }
19331988
19341989 void polyspacePremiumMisraC2012 () const {
1935- SuppressionList list;
19361990 Settings settings;
19371991 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 );
1992+ testPolyspaceSuppression (
1993+ settings,
1994+ { { " /* polyspace MISRA2012 : 2.7 */" , 1 } },
1995+ { { " premium-misra-c-2012-2.7" , 1 } }
1996+ );
19451997 }
19461998
19471999 void polyspaceMisraC2023 () const {
1948- SuppressionList list;
19492000 Settings settings;
19502001 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 );
2002+ testPolyspaceSuppression (
2003+ settings,
2004+ { { " // polyspace MISRA-C-2023 : *" , 2 } },
2005+ { { " premium-misra-c-2023-*" , 2 } }
2006+ );
19612007 }
19622008
19632009 void polyspaceMisraCpp2008 () const {
1964- SuppressionList list;
19652010 Settings settings;
19662011 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 );
2012+ testPolyspaceSuppression (
2013+ settings,
2014+ { { " // polyspace MISRA-CPP : 7-1-1" , 1 } },
2015+ { { " premium-misra-cpp-2008-7-1-1" , 1 } }
2016+ );
19742017 }
19752018
19762019 void polyspaceMisraCpp2023 () const {
1977- SuppressionList list;
19782020 Settings settings;
19792021 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 );
2022+ testPolyspaceSuppression (
2023+ settings,
2024+ { { " // polyspace MISRA-CPP-2023 : 4.6.1" , 1 } },
2025+ { { " premium-misra-cpp-2023-4.6.1" , 1 } }
2026+ );
19872027 }
19882028
19892029 void polyspaceCertC () const {
1990- SuppressionList list;
19912030 Settings settings;
19922031 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 );
2032+ testPolyspaceSuppression (
2033+ settings,
2034+ { { " // polyspace CERT-C : PRE30" , 1 } },
2035+ { { " premium-cert-c-PRE30" , 1 } }
2036+ );
20002037 }
20012038
20022039 void polyspaceCertCpp () const {
2003- SuppressionList list;
20042040 Settings settings;
20052041 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 );
2042+ testPolyspaceSuppression (
2043+ settings,
2044+ { { " // polyspace CERT-CPP : CTR51" , 1 } },
2045+ { { " premium-cert-cpp-CTR51" , 1 } }
2046+ );
20132047 }
20142048
20152049 void polyspaceAutosar () const {
2016- SuppressionList list;
20172050 Settings settings;
20182051 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 );
2052+ testPolyspaceSuppression (
2053+ settings,
2054+ { { " // polyspace AUTOSAR-CPP14 : a2-10-1" , 1 } },
2055+ { { " premium-autosar-a2-10-1" , 1 } }
2056+ );
20262057 }
20272058
20282059 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 () );
2060+ Settings settings ;
2061+ testPolyspaceSuppression (
2062+ settings,
2063+ { { " // polyspace DEFECT : INT_OVFL AUTOSAR-CPP14 : a2-10-1 " , 1 } },
2064+ {}
2065+ );
20352066 }
20362067
20372068 void polyspaceMultiple1 () const {
2038- SuppressionList list;
20392069 Settings settings;
20402070 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 );
2071+ testPolyspaceSuppression (
2072+ settings,
2073+ { { " /* polyspace MISRA2012 : 2.7, 9.1 */" , 1 } },
2074+ { { " premium-misra-c-2012-2.7" , 1 },
2075+ { " premium-misra-c-2012-9.1" , 1 } }
2076+ );
20502077 }
20512078
20522079 void polyspaceMultiple2 () const {
2053- SuppressionList list;
20542080 Settings settings;
20552081 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 );
2082+ testPolyspaceSuppression (
2083+ settings,
2084+ { { " /* polyspace MISRA2012 : 2.7 MISRA-CPP : 7-1-1 */" , 1 } },
2085+ { { " premium-misra-c-2012-2.7" , 1 },
2086+ { " premium-misra-cpp-2008-7-1-1" , 1 } }
2087+ );
20652088 }
20662089
20672090 void polyspaceMultiple3 () const {
2068- SuppressionList list;
20692091 Settings settings;
20702092 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 );
2093+ testPolyspaceSuppression (
2094+ settings,
2095+ { { " /* polyspace MISRA2012 : 2.7 [Justified:Low] \" comment 1\" polyspace MISRA-CPP : 7-1-1 \" comment 2\" */" , 1 } },
2096+ { { " premium-misra-c-2012-2.7" , 1 },
2097+ { " premium-misra-cpp-2008-7-1-1" , 1 }, }
2098+ );
20802099 }
20812100
20822101 void polyspaceRange () const {
2083- SuppressionList list;
20842102 Settings settings;
20852103 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 );
2104+ testPolyspaceSuppression (
2105+ settings,
2106+ { { " /* polyspace +3 MISRA2012 : 2.7 */" , 1 } },
2107+ { { " premium-misra-c-2012-2.7" , 1 , SuppressionList::Type::block, 1 , 4 } }
2108+ );
20982109 }
20992110
21002111 void polyspaceBlock () const {
2101- SuppressionList list;
21022112 Settings settings;
21032113 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 );
2114+ testPolyspaceSuppression (
2115+ settings,
2116+ { { " /* polyspace-begin MISRA2012 : 2.7 */" , 1 },
2117+ { " /* polyspace-end MISRA2012 : 2.7 */" , 5 } },
2118+ { { " premium-misra-c-2012-2.7" , 1 , SuppressionList::Type::block, 1 , 5 } }
2119+ );
21172120 }
21182121};
21192122
0 commit comments