GCC Code Coverage Report


Directory: ./
File: src/saveClassConfigTest.cpp
Date: 2025-04-25 19:10:50
Exec Total Coverage
Lines: 115 115 100.0%
Branches: 226 239 94.6%

Line Branch Exec Source
1 /***************************************
2 Auteur : Pierre Aubert
3 Mail : pierre.aubert@lapp.in2p3.fr
4 Licence : CeCILL-C
5 ****************************************/
6
7 #include "header_generator.h"
8 #include "cmakelist_generator.h"
9 #include "saveClassConfig.h"
10 #include "saveClassConfigTest.h"
11
12 ///Get the default value of a type in C++
13 /** @param type : type to be converted
14 * @return default value of the type in C++
15 */
16 59 PString getTestDefaultValueTypeInCpp(const PString & type){
17
2/2
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 58 times.
59 if(type == "PString"){
18 1 return "\"Some string\"";
19
2/2
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 57 times.
58 }else if(type == "char"){
20 1 return "8";
21
2/2
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 56 times.
57 }else if(type == "unsigned char"){
22 1 return "32";
23
8/8
✓ Branch 1 taken 45 times.
✓ Branch 2 taken 11 times.
✓ Branch 4 taken 44 times.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 42 times.
✓ Branch 9 taken 14 times.
✓ Branch 10 taken 42 times.
56 }else if(type == "int" || type == "short" || type == "unsigned short"){
24 14 return "42";
25
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 40 times.
42 }else if(type == "unsigned int"){
26 2 return "32u";
27
6/8
✓ Branch 1 taken 40 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 39 times.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 39 times.
✓ Branch 9 taken 1 times.
✓ Branch 10 taken 39 times.
40 }else if(type == "long int" || type == "long" || type == "ssize_t"){
28 1 return "328l";
29
6/6
✓ Branch 1 taken 38 times.
✓ Branch 2 taken 1 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 36 times.
✓ Branch 6 taken 3 times.
✓ Branch 7 taken 36 times.
39 }else if(type == "size_t" || type == "long unsigned int"){
30 3 return "3423420lu";
31
2/2
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 33 times.
36 }else if(type == "bool"){
32 3 return "true";
33 }else{
34 33 return "";
35 }
36 }
37
38 ///Create the class check
39 /** @param classConfig : class configuration to be used
40 * @param isConst : true if the generated check has to use const classes
41 * @return code of the generated function
42 */
43 36 PString createCheckClassEquality(const PClassConfig & classConfig, bool isConst){
44
4/4
✓ Branch 1 taken 36 times.
✓ Branch 4 taken 36 times.
✓ Branch 7 taken 36 times.
✓ Branch 10 taken 36 times.
36 PString body(""), name(classConfig.getName()), strConst("");
45
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 18 times.
36 if(isConst){
46
1/1
✓ Branch 1 taken 18 times.
18 strConst = "const ";
47 }
48
3/3
✓ Branch 1 taken 36 times.
✓ Branch 4 taken 36 times.
✓ Branch 7 taken 36 times.
36 body += "///Check the equality between two "+name+" classes\n";
49
1/1
✓ Branch 1 taken 36 times.
36 body += "/**\t@param var : variable to be checked\n";
50
1/1
✓ Branch 1 taken 36 times.
36 body += " * \t@param reference : reference\n";
51
1/1
✓ Branch 1 taken 36 times.
36 body += " * \t@return true on success, false otherwise\n";
52
1/1
✓ Branch 1 taken 36 times.
36 body += "*/\n";
53
3/3
✓ Branch 1 taken 36 times.
✓ Branch 4 taken 36 times.
✓ Branch 7 taken 36 times.
36 body += "bool check"+name+"Equality";
54
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 18 times.
36 if(isConst){
55
1/1
✓ Branch 1 taken 18 times.
18 body += "Const";
56 }
57
7/7
✓ Branch 1 taken 36 times.
✓ Branch 4 taken 36 times.
✓ Branch 7 taken 36 times.
✓ Branch 10 taken 36 times.
✓ Branch 13 taken 36 times.
✓ Branch 16 taken 36 times.
✓ Branch 19 taken 36 times.
36 body += "(" + strConst + name + " & var, " + strConst + name + " & reference){\n";
58
1/1
✓ Branch 1 taken 36 times.
36 body += "\tbool b(true);\n";
59
60
1/1
✓ Branch 1 taken 36 times.
36 const std::vector<PClassAttribute> & listAttr = classConfig.getListAttribute();
61
2/2
✓ Branch 4 taken 118 times.
✓ Branch 5 taken 36 times.
154 for(std::vector<PClassAttribute>::const_iterator it(listAttr.begin()); it != listAttr.end(); ++it){
62
2/2
✓ Branch 2 taken 118 times.
✓ Branch 5 taken 118 times.
118 PString attrName(it->getName().firstToUpper());
63
2/2
✓ Branch 2 taken 118 times.
✓ Branch 5 taken 118 times.
118 bool isSimpleType = getIsSimpleType(it->getType());
64
11/11
✓ Branch 1 taken 118 times.
✓ Branch 4 taken 118 times.
✓ Branch 7 taken 118 times.
✓ Branch 10 taken 118 times.
✓ Branch 13 taken 118 times.
✓ Branch 17 taken 118 times.
✓ Branch 20 taken 118 times.
✓ Branch 23 taken 118 times.
✓ Branch 27 taken 118 times.
✓ Branch 30 taken 118 times.
✓ Branch 33 taken 118 times.
118 std::cout << "createCheckClassEquality : attrName = '"<<attrName<<"', isSimpleType = " << isSimpleType << ", it->getIsPointer() = " << it->getIsPointer() << ", it->getIsReference() = " << it->getIsReference() << std::endl;
65
9/10
✓ Branch 0 taken 42 times.
✓ Branch 1 taken 76 times.
✓ Branch 4 taken 42 times.
✓ Branch 6 taken 42 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 42 times.
✓ Branch 13 taken 2 times.
✓ Branch 14 taken 40 times.
✓ Branch 15 taken 78 times.
✓ Branch 16 taken 40 times.
118 if(isSimpleType || it->getIsPointer() || it->getType() == "PString"){
66
5/5
✓ Branch 1 taken 78 times.
✓ Branch 4 taken 78 times.
✓ Branch 7 taken 78 times.
✓ Branch 10 taken 78 times.
✓ Branch 13 taken 78 times.
78 body += "\tb &= var.get"+attrName+"() == reference.get"+attrName+"();\n";
67 }
68 118 }
69
70
1/1
✓ Branch 1 taken 36 times.
36 body += "\treturn b;\n";
71
1/1
✓ Branch 1 taken 36 times.
36 body += "}\n\n";
72 72 return body;
73 36 }
74
75 ///Create the class check
76 /** @param classConfig : class configuration to be used
77 * @param enableTypeStream : true to test phoenix_getTypeName function
78 * @return code of the generated function
79 */
80 18 PString createTestClassCopy(const PClassConfig & classConfig, bool enableTypeStream){
81
3/3
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
18 PString body (""), name(classConfig.getName());
82
83
3/3
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
18 body += "///Check copy of class "+name+"\n";
84
3/3
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
18 body += "bool check"+name+"Copy(){\n";
85
86
3/3
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
18 body += "\t"+name+" reference;\n";
87
1/1
✓ Branch 1 taken 18 times.
18 body += "\t//Let's use the setters\n";
88
1/1
✓ Branch 1 taken 18 times.
18 const std::vector<PClassAttribute> & listAttr = classConfig.getListAttribute();
89
2/2
✓ Branch 4 taken 59 times.
✓ Branch 5 taken 18 times.
77 for(std::vector<PClassAttribute>::const_iterator it(listAttr.begin()); it != listAttr.end(); ++it){
90
4/4
✓ Branch 2 taken 59 times.
✓ Branch 5 taken 59 times.
✓ Branch 9 taken 59 times.
✓ Branch 12 taken 59 times.
59 PString defaultValue(getTestDefaultValueTypeInCpp(it->getType())), attrName(it->getName().firstToUpper());;
91
2/2
✓ Branch 1 taken 26 times.
✓ Branch 2 taken 33 times.
59 if(defaultValue != ""){
92
5/5
✓ Branch 1 taken 26 times.
✓ Branch 4 taken 26 times.
✓ Branch 7 taken 26 times.
✓ Branch 10 taken 26 times.
✓ Branch 13 taken 26 times.
26 body += "\treference.set"+attrName+"("+defaultValue+");\n";
93 }
94 59 }
95
96
3/3
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
18 body += "\t"+name+" varCopy(reference);\n";
97
3/3
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
18 body += "\t"+name+" varEqual;\n";
98
1/1
✓ Branch 1 taken 18 times.
18 body += "\tvarEqual = reference;\n";
99
1/1
✓ Branch 1 taken 18 times.
18 body += "\tbool b(true);\n";
100
3/3
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
18 body += "\tb &= check"+name+"Equality(varCopy, reference);\n";
101
3/3
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
18 body += "\tb &= check"+name+"EqualityConst(varCopy, reference);\n";
102
103
3/3
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
18 body += "\tb &= check"+name+"Equality(varEqual, reference);\n";
104
3/3
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
18 body += "\tb &= check"+name+"EqualityConst(varEqual, reference);\n";
105
5/5
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
✓ Branch 10 taken 18 times.
✓ Branch 13 taken 18 times.
18 body += "\tb &= phoenix_getTypeToStr<"+name+">() == \""+name+"\";\n";
106
107
1/1
✓ Branch 1 taken 18 times.
18 body += "\treturn b;\n";
108
1/1
✓ Branch 1 taken 18 times.
18 body += "}\n\n";
109
110 36 return body;
111 18 }
112
113
114 ///Save the CMakeLists to be used to compile the unit test
115 /** @param outputCurrentTestDir : current test directoru in which to create the CMakeLists.txt
116 * @param classConfig : class configuration to be used
117 * @param baseFileName : base of output file name of the generated sources
118 * @param enableDataStream : true to enable the data stream test
119 * @param enableTypeStream : true to test phoenix_getTypeName function
120 * @return true on success, false oterhwise
121 */
122 18 bool saveClassTestMain(const PPath & outputCurrentTestDir, const PClassConfig & classConfig, const PPath & baseFileName, bool enableDataStream, bool enableTypeStream){
123
3/3
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
18 PString body(""), name(classConfig.getName());
124
3/3
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
18 body += licenceSaveStr() + "\n";
125
126
3/3
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
18 body += "#include \"" + (baseFileName + ".h\"\n\n");
127
128
2/2
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
18 body += createCheckClassEquality(classConfig, false);
129
2/2
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
18 body += createCheckClassEquality(classConfig, true);
130
131
2/2
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
18 body += createTestClassCopy(classConfig, enableTypeStream);
132
133
1/1
✓ Branch 1 taken 18 times.
18 body += "int main(int argc, char ** argv){\n";
134
3/3
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
18 body += "\tbool b(check"+name+"Copy());\n";
135
136 //Do other test if the enableDataStream is true
137
138
1/1
✓ Branch 1 taken 18 times.
18 body += "\treturn b - 1;\n";
139
1/1
✓ Branch 1 taken 18 times.
18 body += "}\n";
140
141
5/5
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
✓ Branch 10 taken 18 times.
✓ Branch 13 taken 18 times.
36 return PPath(outputCurrentTestDir + PString("/main.cpp")).saveFileContent(body);
142 18 }
143
144 ///Save the CMakeLists to be used to compile the unit test
145 /** @param outputCurrentTestDir : current test directoru in which to create the CMakeLists.txt
146 * @param libName : name of the generated library to link with
147 * @param classConfig : class configuration to be used
148 * @param enableDataStream : true to enable the data stream test
149 * @param enableTypeStream : true to test phoenix_getTypeName function
150 * @return true on success, false oterhwise
151 */
152 18 bool saveClassTestCMakeLists(const PPath & outputCurrentTestDir, const PString & libName, const PClassConfig & classConfig, bool enableDataStream, bool enableTypeStream){
153
5/5
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
✓ Branch 10 taken 18 times.
✓ Branch 13 taken 18 times.
36 PString body(""), testName("test_class_" + classConfig.getName().toLowerUnderscore());
154
2/2
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
18 body += getCMakeListsHeader();
155
3/3
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
18 body += "add_executable("+testName+" main.cpp)\n";
156
1/1
✓ Branch 1 taken 18 times.
18 PString extraLib;
157
2/2
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
18 extraLib += " " + libName;
158
2/2
✓ Branch 0 taken 11 times.
✓ Branch 1 taken 7 times.
18 if(enableTypeStream){
159
1/1
✓ Branch 1 taken 11 times.
11 extraLib += " phoenix_type_stream";
160 }
161
2/2
✓ Branch 0 taken 12 times.
✓ Branch 1 taken 6 times.
18 if(enableDataStream){
162
1/1
✓ Branch 1 taken 12 times.
12 extraLib += " phoenix_data_stream";
163 }
164
1/2
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
18 if(extraLib.size() != 0lu){
165
4/4
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
✓ Branch 10 taken 18 times.
18 body += "target_link_libraries("+testName+extraLib+")\n";
166 }
167
1/1
✓ Branch 1 taken 18 times.
18 body += "\n";
168
4/4
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
✓ Branch 10 taken 18 times.
18 body += "add_test(NAME "+testName.firstToUpper()+"\n";
169
3/3
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
18 body += "\tCOMMAND ${CMAKE_CURRENT_BINARY_DIR}/"+testName+"\n";
170
1/1
✓ Branch 1 taken 18 times.
18 body += "\tWORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}\n";
171
1/1
✓ Branch 1 taken 18 times.
18 body += ")\n\n\n";
172
173
5/5
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
✓ Branch 10 taken 18 times.
✓ Branch 13 taken 18 times.
36 return PPath(outputCurrentTestDir + PString("/CMakeLists.txt")).saveFileContent(body);
174 18 }
175
176 ///Save the unit test of the generated PClassConfig
177 /** @param outputTestDir : output directory where to put the genreated test (typically ../TESTS if the program is called from ./src)
178 * @param libName : name of the generated library to link with
179 * @param classConfig : class configuration to be used
180 * @param baseFileName : base of output file name of the generated sources
181 * @param enableDataStream : true to enable the data stream test
182 * @param enableTypeStream : true to test phoenix_getTypeName function
183 * @return true on success, false oterhwise
184 */
185 18 bool saveClassTest(const PPath & outputTestDir, const PString & libName, const PClassConfig & classConfig, const PPath & baseFileName, bool enableDataStream, bool enableTypeStream){
186
2/2
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
18 PString name(classConfig.getName());
187
6/6
✓ Branch 1 taken 18 times.
✓ Branch 4 taken 18 times.
✓ Branch 7 taken 18 times.
✓ Branch 10 taken 18 times.
✓ Branch 13 taken 18 times.
✓ Branch 16 taken 18 times.
36 PPath outputCurrentTestDir(outputTestDir + PString("/TEST_") + name.toUpper());
188
2/11
✓ Branch 1 taken 18 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 18 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
18 if(!outputCurrentTestDir.createDirectory()){std::cerr << "saveClassTest : cannot create TEST directory '"<<outputCurrentTestDir<<"'" << std::endl;return false;}
189
190 18 bool b(true);
191
1/1
✓ Branch 1 taken 18 times.
18 b &= saveClassTestCMakeLists(outputCurrentTestDir, libName, classConfig, enableDataStream, enableTypeStream);
192
1/1
✓ Branch 1 taken 18 times.
18 b &= saveClassTestMain(outputCurrentTestDir, classConfig, baseFileName, enableDataStream, enableTypeStream);
193
194 18 return b;
195 18 }
196
197
198 ///Save the unit test of the generated PClassConfig
199 /** @param outputTestDir : output directory where to put the genreated test (typically ../TESTS if the program is called from ./src)
200 * @param libName : name of the generated library to link with
201 * @param classConfig : class configuration to be used
202 * @param baseFileName : base of output file name of the generated sources
203 * @param enableDataStream : true to enable the data stream test
204 * @param enableTypeStream : true to test phoenix_getTypeName function
205 * @return true on success, false oterhwise
206 */
207 14 bool saveClassTest(const PPath & outputTestDir, const PString & libName, const std::vector<PClassConfig> & classConfig, const PPath & baseFileName, bool enableDataStream, bool enableTypeStream){
208 14 bool b(true);
209
2/2
✓ Branch 3 taken 18 times.
✓ Branch 4 taken 14 times.
32 for(std::vector<PClassConfig>::const_iterator it(classConfig.begin()); it != classConfig.end(); ++it){
210
1/1
✓ Branch 2 taken 18 times.
18 b &= saveClassTest(outputTestDir, libName, *it, baseFileName, enableDataStream, enableTypeStream);
211 }
212 14 return b;
213 }
214
215
216