Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 48 additions & 11 deletions test/cli/qml_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,64 @@
# python3 -m pytest test-qml.py

import os
import pytest
from testutils import cppcheck

PROJECT_DIR = 'QML-Samples-TableView'
__script_dir = os.path.dirname(os.path.abspath(__file__))

# there are unused functions. But fillSampleData is not unused because that is referenced from main.qml
__project_dir = os.path.join(__script_dir, 'QML-Samples-TableView')
__project_dir_sep = __project_dir + os.path.sep


def test_unused_functions():
ret, stdout, stderr = cppcheck(['--library=qt', '--enable=unusedFunction', PROJECT_DIR])
ret, stdout, stderr = cppcheck(['-q', '--template=simple', '--library=qt', '--enable=unusedFunction', __project_dir])
# there are unused functions. But fillSampleData is not unused because that is referenced from main.qml
assert '[unusedFunction]' in stderr
assert 'fillSampleData' not in stderr
assert stdout.splitlines() == []
assert stderr.splitlines() == [
"{}samplemodel.cpp:9:0: style: The function 'rowCount' is never used. [unusedFunction]".format(__project_dir_sep),
"{}samplemodel.cpp:15:0: style: The function 'data' is never used. [unusedFunction]".format(__project_dir_sep),
"{}samplemodel.cpp:38:0: style: The function 'roleNames' is never used. [unusedFunction]".format(__project_dir_sep)
]
assert ret == 0, stdout


def test_unused_functions_j():
ret, stdout, stderr = cppcheck(['-q', '--template=simple', '--library=qt', '--enable=unusedFunction', '-j2', __project_dir])
assert stdout.splitlines() == [
"cppcheck: unusedFunction check can't be used with '-j' option. Disabling unusedFunction check."
]
assert stderr.splitlines() == []
assert ret == 0, stdout # TODO: abil out on this

@pytest.mark.xfail
def test_unused_functions_j(tmpdir):

# TODO: fillSampleData is not unused
def test_unused_functions_builddir(tmpdir):
build_dir = os.path.join(tmpdir, 'b1')
os.mkdir(build_dir)
ret, stdout, stderr = cppcheck(['--library=qt', '--enable=unusedFunction', '-j2', '--cppcheck-build-dir={}'.format(build_dir), PROJECT_DIR])
# there are unused functions. But fillSampleData is not unused because that is referenced from main.qml
assert '[unusedFunction]' in stderr
assert 'fillSampleData' not in stderr
ret, stdout, stderr = cppcheck(['-q', '--template=simple', '--library=qt', '--enable=unusedFunction', '--cppcheck-build-dir={}'.format(build_dir), __project_dir])
assert stdout.splitlines() == []
assert stderr.splitlines() == [
"{}samplemodel.cpp:15:0: style: The function 'data' is never used. [unusedFunction]".format(__project_dir_sep),
"{}samplemodel.cpp:47:0: style: The function 'fillSampleData' is never used. [unusedFunction]".format(__project_dir_sep),
"{}samplemodel.cpp:38:0: style: The function 'roleNames' is never used. [unusedFunction]".format(__project_dir_sep),
"{}samplemodel.cpp:9:0: style: The function 'rowCount' is never used. [unusedFunction]".format(__project_dir_sep),
]
assert ret == 0, stdout


# TODO: fillSampleData is not unused
def test_unused_functions_builddir_j(tmpdir):
build_dir = os.path.join(tmpdir, 'b1')
os.mkdir(build_dir)
ret, stdout, stderr = cppcheck(['-q', '--template=simple', '--library=qt', '--enable=unusedFunction', '-j2', '--cppcheck-build-dir={}'.format(build_dir), __project_dir])
assert stdout.splitlines() == []
assert stderr.splitlines() == [
"{}samplemodel.cpp:15:0: style: The function 'data' is never used. [unusedFunction]".format(__project_dir_sep),
"{}samplemodel.cpp:47:0: style: The function 'fillSampleData' is never used. [unusedFunction]".format(__project_dir_sep),
"{}samplemodel.cpp:38:0: style: The function 'roleNames' is never used. [unusedFunction]".format(__project_dir_sep),
"{}samplemodel.cpp:9:0: style: The function 'rowCount' is never used. [unusedFunction]".format(__project_dir_sep),
]
assert ret == 0, stdout

# TODO: test with project file
# TODO: test with FileSettings
7 changes: 7 additions & 0 deletions test/cli/unusedFunction/1.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#include "3.h"

// cppcheck-suppress unusedFunction
void f1()
{
f3_1();
}
7 changes: 7 additions & 0 deletions test/cli/unusedFunction/2.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#include "3.h"

// cppcheck-suppress unusedFunction
void f2()
{
f3_2();
}
3 changes: 3 additions & 0 deletions test/cli/unusedFunction/3.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
void f3_1() {}
void f3_2() {}
void f3_3() {}
3 changes: 3 additions & 0 deletions test/cli/unusedFunction/3.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
void f3_1();
void f3_2();
void f3_3();
8 changes: 8 additions & 0 deletions test/cli/unusedFunction/unusedFunction.cppcheck
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="1">
<paths>
<dir name="1.c"/>
<dir name="2.c"/>
<dir name="3.c"/>
</paths>
</project>
213 changes: 213 additions & 0 deletions test/cli/unused_function_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@

# python3 -m pytest test-unused_function_test.py

import os
import json
from testutils import cppcheck

__script_dir = os.path.dirname(os.path.abspath(__file__))

__project_dir = os.path.join(__script_dir, 'unusedFunction')
__project_dir_sep = __project_dir + os.path.sep


# TODO: make this a generic helper function
def __create_compdb(tmpdir, projpath):
compile_commands = os.path.join(tmpdir, 'compile_commands.json')
j = [
{
'directory': projpath,
'file': os.path.join(projpath, '1.c'),
'command': 'gcc -c 1.c'
},
{
'directory': projpath,
'file': os.path.join(projpath, '2.c'),
'command': 'gcc -c 2.c'
},
{
'directory': projpath,
'file': os.path.join(projpath, '3.c'),
'command': 'gcc -c 3.c'
}
]
with open(compile_commands, 'wt') as f:
f.write(json.dumps(j, indent=4))
return compile_commands


def test_unused_functions():
ret, stdout, stderr = cppcheck(['-q', '--template=simple', '--enable=unusedFunction', '--inline-suppr', __project_dir])
assert stdout.splitlines() == []
assert stderr.splitlines() == [
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep)
]
assert ret == 0, stdout


def test_unused_functions_j():
ret, stdout, stderr = cppcheck(['-q', '--template=simple', '--enable=unusedFunction', '--inline-suppr', '-j2', __project_dir])
assert stdout.splitlines() == [
"cppcheck: unusedFunction check can't be used with '-j' option. Disabling unusedFunction check."
]
assert stderr.splitlines() == []
assert ret == 0, stdout


def test_unused_functions_project():
ret, stdout, stderr = cppcheck(['-q',
'--template=simple',
'--enable=unusedFunction',
'--inline-suppr',
'--project={}'.format(os.path.join(__project_dir, 'unusedFunction.cppcheck'))])
assert stdout.splitlines() == []
assert [
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep)
] == stderr.splitlines()
assert ret == 0, stdout


def test_unused_functions_project_j():
ret, stdout, stderr = cppcheck(['-q',
'--template=simple',
'--enable=unusedFunction',
'--inline-suppr',
'--project={}'.format(os.path.join(__project_dir, 'unusedFunction.cppcheck')),
'-j2'])
assert stdout.splitlines() == [
"cppcheck: unusedFunction check can't be used with '-j' option. Disabling unusedFunction check."
]
assert [] == stderr.splitlines()
assert ret == 0, stdout


def test_unused_functions_compdb(tmpdir):
compdb_file = __create_compdb(tmpdir, __project_dir)
ret, stdout, stderr = cppcheck(['-q',
'--template=simple',
'--enable=unusedFunction',
'--inline-suppr',
'--project={}'.format(compdb_file)
])
assert stdout.splitlines() == []
assert stderr.splitlines() == [
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep)
]
assert ret == 0, stdout


def test_unused_functions_compdb_j(tmpdir):
compdb_file = __create_compdb(tmpdir, __project_dir)
ret, stdout, stderr = cppcheck(['-q',
'--template=simple',
'--enable=unusedFunction',
'--inline-suppr',
'--project={}'.format(compdb_file),
'-j2'
])
assert stdout.splitlines() == [
"cppcheck: unusedFunction check can't be used with '-j' option. Disabling unusedFunction check."
]
assert stderr.splitlines() == []
assert ret == 0, stdout


def test_unused_functions_builddir(tmpdir):
build_dir = os.path.join(tmpdir, 'b1')
os.mkdir(build_dir)
ret, stdout, stderr = cppcheck(['-q', '--template=simple', '--enable=unusedFunction', '--inline-suppr', '--cppcheck-build-dir={}'.format(build_dir), __project_dir])
assert stdout.splitlines() == []
assert stderr.splitlines() == [
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep)
]
assert ret == 0, stdout


# TODO: only f3_3 is unused
def test_unused_functions_builddir_j(tmpdir):
build_dir = os.path.join(tmpdir, 'b1')
os.mkdir(build_dir)
ret, stdout, stderr = cppcheck(['-q', '--template=simple', '--enable=unusedFunction', '--inline-suppr', '-j2', '--cppcheck-build-dir={}'.format(build_dir), __project_dir])
assert stdout.splitlines() == []
assert stderr.splitlines() == [
"{}1.c:4:0: style: The function 'f1' is never used. [unusedFunction]".format(__project_dir_sep),
"{}2.c:4:0: style: The function 'f2' is never used. [unusedFunction]".format(__project_dir_sep),
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep)
]
assert ret == 0, stdout


def test_unused_functions_builddir_project(tmpdir):
build_dir = os.path.join(tmpdir, 'b1')
os.mkdir(build_dir)
ret, stdout, stderr = cppcheck(['-q',
'--template=simple',
'--enable=unusedFunction',
'--inline-suppr',
'--project={}'.format(os.path.join(__project_dir, 'unusedFunction.cppcheck')),
'--cppcheck-build-dir={}'.format(build_dir)])
assert stdout.splitlines() == []
assert stderr.splitlines() == [
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep)
]
assert ret == 0, stdout


# TODO: only f3_3 is unused
def test_unused_functions_builddir_project_j(tmpdir):
build_dir = os.path.join(tmpdir, 'b1')
os.mkdir(build_dir)
ret, stdout, stderr = cppcheck(['-q',
'--template=simple',
'--enable=unusedFunction',
'--inline-suppr',
'--project={}'.format(os.path.join(__project_dir, 'unusedFunction.cppcheck')),
'--cppcheck-build-dir={}'.format(build_dir),
'-j2'])
assert stdout.splitlines() == []
assert stderr.splitlines() == [
"{}1.c:4:0: style: The function 'f1' is never used. [unusedFunction]".format(__project_dir_sep),
"{}2.c:4:0: style: The function 'f2' is never used. [unusedFunction]".format(__project_dir_sep),
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep)
]
assert ret == 0, stdout


def test_unused_functions_builddir_compdb(tmpdir):
compdb_file = __create_compdb(tmpdir, __project_dir)
build_dir = os.path.join(tmpdir, 'b1')
os.mkdir(build_dir)
ret, stdout, stderr = cppcheck(['-q',
'--template=simple',
'--enable=unusedFunction',
'--inline-suppr',
'--project={}'.format(compdb_file),
'--cppcheck-build-dir={}'.format(build_dir)
])
assert stdout.splitlines() == []
assert stderr.splitlines() == [
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep)
]
assert ret == 0, stdout


# TODO: only f3_3 is unused
def test_unused_functions_builddir_compdb_j(tmpdir):
compdb_file = __create_compdb(tmpdir, __project_dir)
build_dir = os.path.join(tmpdir, 'b1')
os.mkdir(build_dir)
ret, stdout, stderr = cppcheck(['-q',
'--template=simple',
'--enable=unusedFunction',
'--inline-suppr',
'--project={}'.format(compdb_file),
'--cppcheck-build-dir={}'.format(build_dir),
'-j2'
])
assert stdout.splitlines() == []
assert stderr.splitlines() == [
"{}1.c:4:0: style: The function 'f1' is never used. [unusedFunction]".format(__project_dir_sep),
"{}2.c:4:0: style: The function 'f2' is never used. [unusedFunction]".format(__project_dir_sep),
"{}3.c:3:0: style: The function 'f3_3' is never used. [unusedFunction]".format(__project_dir_sep)
]
assert ret == 0, stdout