cppcheck 1.73
update cppcheck from 1.72 to 1.73 add a test for the "out of bounds" check add a test for the python addons functionality Closes #366. Signed-off-by: Andrew Janke <andrew@apjanke.net>
This commit is contained in:
parent
c28ce8a228
commit
bef1bfb821
1 changed files with 74 additions and 4 deletions
|
@ -1,8 +1,8 @@
|
|||
class Cppcheck < Formula
|
||||
desc "Static analysis of C and C++ code"
|
||||
homepage "https://sourceforge.net/projects/cppcheck/"
|
||||
url "https://github.com/danmar/cppcheck/archive/1.72.tar.gz"
|
||||
sha256 "c718949e1ec22a8a0dca7e2953a55c502ef65e53ff9922fb91759388618faa7f"
|
||||
url "https://github.com/danmar/cppcheck/archive/1.73.tar.gz"
|
||||
sha256 "938d792c9399233b551bd9991d6842f353fa8dad973d5e457b78be66646c8b8f"
|
||||
head "https://github.com/danmar/cppcheck.git"
|
||||
|
||||
bottle do
|
||||
|
@ -36,6 +36,9 @@ class Cppcheck < Formula
|
|||
# CFGDIR is relative to the prefix for install, don't add #{prefix}.
|
||||
system "make", "DESTDIR=#{prefix}", "BIN=#{bin}", "CFGDIR=/cfg", "install"
|
||||
|
||||
# Move the python addons to the cppcheck pkgshare folder
|
||||
(pkgshare/"addons").install Dir.glob(bin/"*.py")
|
||||
|
||||
if build.with? "gui"
|
||||
cd "gui" do
|
||||
if build.with? "rules"
|
||||
|
@ -51,7 +54,9 @@ class Cppcheck < Formula
|
|||
end
|
||||
|
||||
test do
|
||||
(testpath/"test.cpp").write <<-EOS.undent
|
||||
# Execution test with an input .cpp file
|
||||
test_cpp_file = testpath/"test.cpp"
|
||||
test_cpp_file.write <<-EOS.undent
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
|
@ -60,7 +65,72 @@ class Cppcheck < Formula
|
|||
cout << "Hello World!" << endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
class Example
|
||||
{
|
||||
public:
|
||||
int GetNumber() const;
|
||||
explicit Example(int initialNumber);
|
||||
private:
|
||||
int number;
|
||||
};
|
||||
|
||||
Example::Example(int initialNumber)
|
||||
{
|
||||
number = initialNumber;
|
||||
}
|
||||
EOS
|
||||
system "#{bin}/cppcheck", "test.cpp"
|
||||
system "#{bin}/cppcheck", test_cpp_file
|
||||
|
||||
# Test the "out of bounds" check
|
||||
test_cpp_file_check = testpath/"testcheck.cpp"
|
||||
test_cpp_file_check.write <<-EOS.undent
|
||||
int main()
|
||||
{
|
||||
char a[10];
|
||||
a[10] = 0;
|
||||
return 0;
|
||||
}
|
||||
EOS
|
||||
output = shell_output("#{bin}/cppcheck #{test_cpp_file_check} 2>&1")
|
||||
assert_match "out of bounds", output
|
||||
|
||||
# Test the addon functionality: sampleaddon.py imports the cppcheckdata python
|
||||
# module and uses it to parse a cppcheck dump into an OOP structure. We then
|
||||
# check the correct number of detected tokens and function names.
|
||||
addons_dir = pkgshare/"addons"
|
||||
cppcheck_module = "#{name}data"
|
||||
expect_token_count = 55
|
||||
expect_function_names = "main,GetNumber,Example"
|
||||
assert_parse_message = "Error: sampleaddon.py: failed: can't parse the #{name} dump."
|
||||
|
||||
sample_addon_file = testpath/"sampleaddon.py"
|
||||
sample_addon_file.write <<-EOS.undent
|
||||
#!/usr/bin/env python
|
||||
"""A simple test addon for #{name}, prints function names and token count"""
|
||||
import sys
|
||||
import imp
|
||||
# Manually import the '#{cppcheck_module}' module
|
||||
CFILE, FNAME, CDATA = imp.find_module("#{cppcheck_module}", ["#{addons_dir}"])
|
||||
CPPCHECKDATA = imp.load_module("#{cppcheck_module}", CFILE, FNAME, CDATA)
|
||||
|
||||
for arg in sys.argv[1:]:
|
||||
# Parse the dump file generated by #{name}
|
||||
configKlass = CPPCHECKDATA.parsedump(arg)
|
||||
if len(configKlass.configurations) == 0:
|
||||
sys.exit("#{assert_parse_message}") # Parse failure
|
||||
fConfig = configKlass.configurations[0]
|
||||
# Pick and join the function names in a string, separated by ','
|
||||
detected_functions = ','.join(fn.name for fn in fConfig.functions)
|
||||
detected_token_count = len(fConfig.tokenlist)
|
||||
# Print the function names on the first line and the token count on the second
|
||||
print "%s\\n%s" %(detected_functions, detected_token_count)
|
||||
EOS
|
||||
|
||||
system "#{bin}/cppcheck", "--dump", test_cpp_file
|
||||
test_cpp_file_dump = "#{test_cpp_file}.dump"
|
||||
assert File.exist? test_cpp_file_dump
|
||||
python_addon_output = shell_output "python #{sample_addon_file} #{test_cpp_file_dump}"
|
||||
assert_match "#{expect_function_names}\n#{expect_token_count}", python_addon_output
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue