diff --git a/cli/cmdlineparser.cpp b/cli/cmdlineparser.cpp index 92f4c6cef3b..7c18e428023 100644 --- a/cli/cmdlineparser.cpp +++ b/cli/cmdlineparser.cpp @@ -269,10 +269,10 @@ bool CmdLineParser::fillSettingsFromArgs(int argc, const char* const argv[]) { auto it = filesResolved.begin(); while (it != filesResolved.end()) { - const std::string& name = it->path(); + const std::string& absname = Path::getAbsoluteFilePath(it->spath()); // TODO: log if duplicated files were dropped filesResolved.erase(std::remove_if(std::next(it), filesResolved.end(), [&](const FileWithDetails& entry) { - return entry.path() == name; + return Path::getAbsoluteFilePath(entry.spath()) == absname; }), filesResolved.end()); ++it; } diff --git a/test/cli/more-projects_test.py b/test/cli/more-projects_test.py index 03dc00ed0f3..73d738d9cfb 100644 --- a/test/cli/more-projects_test.py +++ b/test/cli/more-projects_test.py @@ -657,7 +657,7 @@ def test_project_file_duplicate_2(tmpdir): assert stderr == '' -def test_project_file_duplicate_3(tmpdir): +def test_project_file_duplicate_3(tmpdir): # #12834 test_file_a = os.path.join(tmpdir, 'a.c') with open(test_file_a, 'wt'): pass @@ -687,33 +687,18 @@ def test_project_file_duplicate_3(tmpdir): """.format(in_file_a, in_file_b, in_file_c, in_file_d, in_file_e, in_file_f, tmpdir)) args = ['--project={}'.format(project_file)] - args.append('-j1') # TODO: remove when fixed exitcode, stdout, stderr = cppcheck(args, cwd=tmpdir) assert exitcode == 0 lines = stdout.splitlines() - # TODO: only a single file should be checked - if sys.platform == 'win32': - assert lines == [ - 'Checking {} ...'.format(test_file_a), - '1/3 files checked 33% done', - 'Checking {} ...'.format(test_file_a), - '2/3 files checked 66% done', - 'Checking {} ...'.format(test_file_a), - '3/3 files checked 100% done' - ] - else: - assert lines == [ - 'Checking {} ...'.format(test_file_a), - '1/2 files checked 50% done', - 'Checking {} ...'.format(test_file_a), - '2/2 files checked 100% done' - ] + assert lines == [ + 'Checking {} ...'.format(test_file_a) + ] assert stderr == '' @pytest.mark.skipif(sys.platform != 'win32', reason="requires Windows") -def test_project_file_duplicate_4(tmpdir): +def test_project_file_duplicate_4(tmpdir): # #12834 test_file_a = os.path.join(tmpdir, 'a.c') with open(test_file_a, 'wt'): pass @@ -756,19 +741,12 @@ def test_project_file_duplicate_4(tmpdir): args2[0], args2[1], args2[2], args2[3], args2[4], args2[5], args2[6])) args = ['--project={}'.format(project_file)] - args.append('-j1') # TODO: remove when fixed exitcode, stdout, stderr = cppcheck(args, cwd=tmpdir) assert exitcode == 0 lines = stdout.splitlines() - # TODO: only a single file should be checked assert lines == [ - 'Checking {} ...'.format(test_file_a), - '1/3 files checked 33% done', - 'Checking {} ...'.format(test_file_a), - '2/3 files checked 66% done', - 'Checking {} ...'.format(test_file_a), - '3/3 files checked 100% done' + 'Checking {} ...'.format(test_file_a) ] assert stderr == '' diff --git a/test/cli/other_test.py b/test/cli/other_test.py index c4ae2fab5cf..744a68aac60 100644 --- a/test/cli/other_test.py +++ b/test/cli/other_test.py @@ -1216,7 +1216,7 @@ def test_file_duplicate_2(tmpdir): assert stderr == '' -def test_file_duplicate_3(tmpdir): +def test_file_duplicate_3(tmpdir): # #12834 test_file_a = os.path.join(tmpdir, 'a.c') with open(test_file_a, 'wt'): pass @@ -1230,43 +1230,18 @@ def test_file_duplicate_3(tmpdir): in_file_f = os.path.join(tmpdir, 'dummy', '..', 'a.c') args = [in_file_a, in_file_b, in_file_c, in_file_d, in_file_e, in_file_f, str(tmpdir)] - args.append('-j1') # TODO: remove when fixed exitcode, stdout, stderr = cppcheck(args, cwd=tmpdir) assert exitcode == 0, stdout if stdout else stderr lines = stdout.splitlines() - # TODO: only a single file should be checked - if sys.platform == 'win32': - assert lines == [ - 'Checking {} ...'.format('a.c'), - '1/6 files checked 16% done', - 'Checking {} ...'.format('a.c'), - '2/6 files checked 33% done', - 'Checking {} ...'.format('a.c'), - '3/6 files checked 50% done', - 'Checking {} ...'.format(test_file_a), - '4/6 files checked 66% done', - 'Checking {} ...'.format(test_file_a), - '5/6 files checked 83% done', - 'Checking {} ...'.format(test_file_a), - '6/6 files checked 100% done' - ] - else: - assert lines == [ - 'Checking {} ...'.format('a.c'), - '1/4 files checked 25% done', - 'Checking {} ...'.format('a.c'), - '2/4 files checked 50% done', - 'Checking {} ...'.format(test_file_a), - '3/4 files checked 75% done', - 'Checking {} ...'.format(test_file_a), - '4/4 files checked 100% done' - ] + assert lines == [ + 'Checking {} ...'.format('a.c') + ] assert stderr == '' @pytest.mark.skipif(sys.platform != 'win32', reason="requires Windows") -def test_file_duplicate_4(tmpdir): +def test_file_duplicate_4(tmpdir): # #12834 test_file_a = os.path.join(tmpdir, 'a.c') with open(test_file_a, 'wt'): pass @@ -1284,25 +1259,12 @@ def test_file_duplicate_4(tmpdir): for a in args1: args2.append(a.replace('\\', '/')) args = args1 + args2 - args.append('-j1') # TODO: remove when fixed exitcode, stdout, stderr = cppcheck(args, cwd=tmpdir) assert exitcode == 0, stdout if stdout else stderr lines = stdout.splitlines() - # TODO: only a single file should be checked assert lines == [ - 'Checking {} ...'.format('a.c'), - '1/6 files checked 16% done', - 'Checking {} ...'.format('a.c'), - '2/6 files checked 33% done', - 'Checking {} ...'.format('a.c'), - '3/6 files checked 50% done', - 'Checking {} ...'.format(test_file_a), - '4/6 files checked 66% done', - 'Checking {} ...'.format(test_file_a), - '5/6 files checked 83% done', - 'Checking {} ...'.format(test_file_a), - '6/6 files checked 100% done' + 'Checking {} ...'.format('a.c') ] assert stderr == ''