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 |