Skip to content

Commit

Permalink
added test to make sure samples produce the expected output / adjus…
Browse files Browse the repository at this point in the history
…ted `samples` output
  • Loading branch information
firewave committed Mar 24, 2024
1 parent fb2a1f3 commit 74d0397
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 7 deletions.
6 changes: 6 additions & 0 deletions samples/arrayIndexOutOfBounds_2/out.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
samples\arrayIndexOutOfBounds_2\bad.c:6:10: error: Array 'a[2]' accessed at index 2, which is out of bounds. [arrayIndexOutOfBounds]
a[i] = 0;
^
samples\arrayIndexOutOfBounds_2\bad.c:5:19: note: Assuming that condition 'i<3' is not redundant
for (i = 0; i < 3; i++)
^
samples\arrayIndexOutOfBounds_2\bad.c:6:10: note: Array index out of bounds
a[i] = 0;
^
10 changes: 5 additions & 5 deletions samples/invalidContainer/out.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
samples\invalidContainer\bad.cpp:9:32: error: Using iterator to local container 'items' that may be invalid. [invalidContainer]
samples\invalidContainer\bad.cpp:9:32: error: inconclusive: Using iterator to local container 'items' that may be invalid. [invalidContainer]
for (iter = items.begin(); iter != items.end(); ++iter) {
^
samples\invalidContainer\bad.cpp:9:17: note: Iterator to container is created here.
samples\invalidContainer\bad.cpp:9:28: note: Iterator to container is created here.
for (iter = items.begin(); iter != items.end(); ++iter) {
^
^
samples\invalidContainer\bad.cpp:10:19: note: Assuming condition is true.
if (*iter == 2) {
^
Expand All @@ -13,9 +13,9 @@ samples\invalidContainer\bad.cpp:10:19: note: Assuming condition is true.
samples\invalidContainer\bad.cpp:9:37: note: Assuming condition is true.
for (iter = items.begin(); iter != items.end(); ++iter) {
^
samples\invalidContainer\bad.cpp:11:13: note: After calling 'erase', iterators or references to the container's data may be invalid .
samples\invalidContainer\bad.cpp:11:19: note: After calling 'erase', iterators or references to the container's data may be invalid .
items.erase(iter);
^
^
samples\invalidContainer\bad.cpp:4:22: note: Variable created here.
std::vector<int> items;
^
Expand Down
2 changes: 1 addition & 1 deletion samples/memleak/out.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
samples/memleak/bad.c:8:5: error: Memory leak: a [memleak]
samples\memleak\bad.c:8:5: error: Memory leak: a [memleak]
return result;
^
2 changes: 1 addition & 1 deletion samples/resourceLeak/bad.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include <stdio.h>
int main()
{
FILE *a = fopen("good.c", "r");
const FILE *a = fopen("good.c", "r");
if (!a)
return 0;

Expand Down
45 changes: 45 additions & 0 deletions test/cli/samples_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import os
import sys

from testutils import cppcheck

__script_dir = os.path.dirname(os.path.abspath(__file__))
__root_dir = os.path.abspath(os.path.join(__script_dir, '..', '..'))


def test_samples():
failures = {}

samples_dir = os.path.join(__root_dir, 'samples')
for entry in os.listdir(samples_dir):
sample_dir = os.path.join(samples_dir, entry)
if not os.path.isdir(sample_dir):
continue

with open(os.path.join(sample_dir, 'out.txt')) as out_in:
out_txt = out_in.read()
if not sys.platform == 'win32':
out_txt = out_txt.replace('\\', '/')

if not os.path.exists(os.path.join(sample_dir, 'good.c')):
good_src = os.path.join('samples', entry, 'good.cpp')
bad_src = os.path.join('samples', entry, 'bad.cpp')
else:
good_src = os.path.join('samples', entry, 'good.c')
bad_src = os.path.join('samples', entry, 'bad.c')

# check that good input does not produce any warnings
ret, stdout, stderr = cppcheck(['-q', '--enable=all', '--disable=missingInclude', '--inconclusive', '--check-level=exhaustive', '--error-exitcode=1', good_src], cwd=__root_dir)
if not ret == 0:
failures[good_src] = stderr

# check that the bad inout produces a warning
ret, stdout, stderr = cppcheck(['-q', '--enable=all', '--disable=missingInclude', '--inconclusive', '--check-level=exhaustive', '--error-exitcode=1', bad_src], cwd=__root_dir)
if not ret == 1:
failures[bad_src] = stderr

# check that the bad input procudes the expected output
if not stderr == out_txt:
failures[bad_src] = stderr

assert failures == {}

0 comments on commit 74d0397

Please sign in to comment.