Skip to content

Commit 61b9a3b

Browse files
committed
Add tests for this case
1 parent 0fdc5a3 commit 61b9a3b

File tree

4 files changed

+64
-0
lines changed

4 files changed

+64
-0
lines changed

server/test/framework/Server_Tests.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2070,4 +2070,42 @@ namespace {
20702070
StatusCountMap expectedStatusCountMap{ { testsgen::TEST_PASSED, 9 } };
20712071
testUtils::checkStatuses(resultsMap, tests);
20722072
}
2073+
2074+
TEST_F(Server_Test, Run_Tests_For_Structs_With_Pointers) {
2075+
fs::path structs_with_pointers_c = getTestFilePath("structs_with_pointers.c");
2076+
auto request = testUtils::createFileRequest(projectName, suitePath, buildDirRelativePath,
2077+
srcPaths, structs_with_pointers_c,
2078+
GrpcUtils::UTBOT_AUTO_TARGET_PATH, true, false);
2079+
auto testGen = FileTestGen(*request, writer.get(), TESTMODE);
2080+
Status status = Server::TestsGenServiceImpl::ProcessBaseTestRequest(testGen, writer.get());
2081+
ASSERT_TRUE(status.ok()) << status.error_message();
2082+
EXPECT_GE(testUtils::getNumberOfTests(testGen.tests), 3);
2083+
2084+
fs::path testsDirPath = getTestFilePath("tests");
2085+
2086+
fs::path structs_with_pointers_test_cpp = Paths::sourcePathToTestPath(
2087+
utbot::ProjectContext(projectName, suitePath, testsDirPath, buildDirRelativePath, clientProjectPath),
2088+
structs_with_pointers_c);
2089+
auto testFilter = GrpcUtils::createTestFilterForFile(structs_with_pointers_test_cpp);
2090+
auto runRequest = testUtils::createCoverageAndResultsRequest(
2091+
projectName, suitePath, testsDirPath, buildDirRelativePath, std::move(testFilter));
2092+
2093+
static auto coverageAndResultsWriter =
2094+
std::make_unique<ServerCoverageAndResultsWriter>(nullptr);
2095+
CoverageAndResultsGenerator coverageGenerator{ runRequest.get(),
2096+
coverageAndResultsWriter.get() };
2097+
utbot::SettingsContext settingsContext{
2098+
true, false, 45, 0, false, false, ErrorMode::FAILING, false
2099+
};
2100+
coverageGenerator.generate(false, settingsContext);
2101+
2102+
EXPECT_FALSE(coverageGenerator.hasExceptions());
2103+
ASSERT_TRUE(coverageGenerator.getCoverageMap().empty());
2104+
2105+
auto resultsMap = coverageGenerator.getTestResultMap();
2106+
auto tests = coverageGenerator.getTestsToLaunch();
2107+
2108+
StatusCountMap expectedStatusCountMap{ { testsgen::TEST_PASSED, 3 } };
2109+
testUtils::checkStatuses(resultsMap, tests);
2110+
}
20732111
}

server/test/suites/server/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ add_executable(server
2424
pointer_return.c
2525
simple_structs.c
2626
simple_unions.c
27+
structs_with_pointers.c
2728
complex_structs.c
2829
typedefs.c
2930
types.c
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#include "structs_with_pointers.h"
2+
3+
int process_struct_with_func_pointer(struct MainStruct* str) {
4+
if (str && str->inner && str->inner->func_id != 0) {
5+
return 1;
6+
}
7+
return 0;
8+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#ifndef UNITTESTBOT_STRUCTS_WITH_POINTERS_H
2+
#define UNITTESTBOT_STRUCTS_WITH_POINTERS_H
3+
4+
typedef int (*some_func)();
5+
6+
struct InnerStruct {
7+
some_func func;
8+
int func_id;
9+
};
10+
11+
struct MainStruct {
12+
struct InnerStruct* inner;
13+
};
14+
15+
int process_struct_with_func_pointer(struct MainStruct* str);
16+
17+
#endif // UNITTESTBOT_STRUCTS_WITH_POINTERS_H

0 commit comments

Comments
 (0)