Directory: | ./ |
---|---|
File: | src/main.cpp |
Date: | 2025-04-25 19:19:43 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 69 | 76 | 90.8% |
Branches: | 137 | 158 | 86.7% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | |||
2 | /*************************************** | ||
3 | Auteur : Pierre Aubert | ||
4 | Mail : pierre.aubert@lapp.in2p3.fr | ||
5 | Licence : CeCILL-C | ||
6 | ****************************************/ | ||
7 | |||
8 | #include <iostream> | ||
9 | |||
10 | #include "OptionParser.h" | ||
11 | |||
12 | #include "project_generator.h" | ||
13 | |||
14 | ///Create the OptionParser of this program | ||
15 | /** @return OptionParser of this program | ||
16 | */ | ||
17 | 10 | OptionParser createOptionParser(){ | |
18 |
2/2✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
|
10 | OptionParser parser(true, __PROGRAM_VERSION__); |
19 |
2/2✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
|
10 | parser.setExampleLongOption("phoenix_filegenerator class --name=some_source"); |
20 |
2/2✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
|
10 | parser.setExampleShortOption("phoenix_filegenerator class -n some_source"); |
21 | |||
22 |
2/2✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
|
10 | parser.addMode("class"); |
23 |
1/1✓ Branch 1 taken 10 times.
|
10 | PString defaultClassName(""); |
24 |
5/5✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
✓ Branch 13 taken 10 times.
|
10 | parser.addOption("name", "n", defaultClassName, "base name of the file to be created"); |
25 |
1/1✓ Branch 1 taken 10 times.
|
10 | PString templateDef(""); |
26 |
5/5✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
✓ Branch 13 taken 10 times.
|
10 | parser.addOption("template", "t", templateDef, "template definition of the class (ex: 'typename T' or 'typename T, typename U', etc)"); |
27 |
4/4✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
|
10 | parser.addOption("config", "c", OptionType::FILENAME, false, "Configuration file to create a class (*.pdata)"); |
28 |
4/4✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
|
10 | parser.addOption("datastream", "s", OptionType::NONE, false, "Enable PhoenixDataStream use to save/load generated class automatically"); |
29 |
4/4✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
|
10 | parser.addOption("typestream", "y", OptionType::NONE, false, "Enable PhoenixTypeStream use to get the class name automatically"); |
30 |
4/4✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
|
10 | parser.addOption("tests", "u", OptionType::NONE, false, "Enable unit tests generation"); |
31 |
1/1✓ Branch 1 taken 10 times.
|
10 | parser.closeMode(); |
32 |
2/2✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
|
10 | parser.addMode("source"); |
33 |
4/4✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
|
10 | parser.addOption("name", "n", OptionType::STRING, true, "base name of the file to be created"); |
34 |
1/1✓ Branch 1 taken 10 times.
|
10 | parser.closeMode(); |
35 | |||
36 |
2/2✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
|
10 | parser.addMode("project"); |
37 |
4/4✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
|
10 | parser.addOption("description", "d", OptionType::FILENAME, false, "description of the full project (*.toml)"); |
38 |
4/4✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
|
10 | parser.addOption("config", "c", OptionType::FILENAME, false, "Configuration file to create a class (*.pdata)"); |
39 | |||
40 |
4/4✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
|
10 | parser.addOption("pythonwrapper", "w", OptionType::NONE, false, "Enable python wrapper generation"); |
41 |
1/1✓ Branch 1 taken 10 times.
|
10 | parser.closeMode(); |
42 | 20 | return parser; | |
43 | 10 | } | |
44 | |||
45 | ///Class creator | ||
46 | /** @param classMode : set of argument passe in the class mode | ||
47 | * @return true on success, false otherwise | ||
48 | */ | ||
49 | 8 | bool createClass(const OptionMode & classMode){ | |
50 |
2/2✓ Branch 1 taken 8 times.
✓ Branch 4 taken 8 times.
|
8 | PString className, templatedef; |
51 |
1/1✓ Branch 1 taken 8 times.
|
8 | PPath classConfig; |
52 | |||
53 |
2/2✓ Branch 1 taken 8 times.
✓ Branch 4 taken 8 times.
|
8 | classMode.getValue(className, "name"); |
54 |
2/2✓ Branch 1 taken 8 times.
✓ Branch 4 taken 8 times.
|
8 | classMode.getValue(classConfig, "config"); |
55 |
2/2✓ Branch 1 taken 8 times.
✓ Branch 4 taken 8 times.
|
8 | classMode.getValue(templatedef, "template"); |
56 | |||
57 |
2/2✓ Branch 1 taken 8 times.
✓ Branch 4 taken 8 times.
|
8 | bool enableDataStream = classMode.isOptionExist("datastream"); |
58 |
2/2✓ Branch 1 taken 8 times.
✓ Branch 4 taken 8 times.
|
8 | bool enableTypeStream = classMode.isOptionExist("typestream"); |
59 |
2/2✓ Branch 1 taken 8 times.
✓ Branch 4 taken 8 times.
|
8 | bool enableUnitTest = classMode.isOptionExist("tests"); |
60 | |||
61 |
3/3✓ Branch 1 taken 8 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 3 times.
|
8 | if(classConfig != ""){ |
62 |
2/2✓ Branch 1 taken 3 times.
✓ Branch 2 taken 2 times.
|
5 | if(className == ""){ |
63 |
3/3✓ Branch 1 taken 3 times.
✓ Branch 4 taken 3 times.
✓ Branch 7 taken 3 times.
|
3 | className = classConfig.getFileName().eraseExtension(); |
64 | } | ||
65 |
7/7✓ Branch 1 taken 5 times.
✓ Branch 4 taken 5 times.
✓ Branch 7 taken 5 times.
✓ Branch 10 taken 5 times.
✓ Branch 13 taken 5 times.
✓ Branch 19 taken 1 times.
✓ Branch 20 taken 4 times.
|
5 | if(!saveParserClassConfig(className, classConfig, enableDataStream, enableTypeStream, enableUnitTest)){ |
66 |
4/4✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 7 taken 1 times.
✓ Branch 10 taken 1 times.
|
1 | std::cerr << "createClass : can't save file '"<<className<<"'[.h or .cpp]" << std::endl; |
67 | 1 | return false; | |
68 | } | ||
69 | }else{ | ||
70 |
1/1✓ Branch 1 taken 3 times.
|
3 | PClassGenerator generator; |
71 |
1/1✓ Branch 1 taken 3 times.
|
3 | generator.setClassName(className); |
72 |
1/1✓ Branch 1 taken 3 times.
|
3 | generator.setTemplateDefVar(templatedef); |
73 | |||
74 |
4/4✓ Branch 1 taken 3 times.
✓ Branch 4 taken 3 times.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 2 times.
|
3 | if(!generator.saveFileImplDef(className)){ |
75 |
4/4✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 7 taken 1 times.
✓ Branch 10 taken 1 times.
|
1 | std::cerr << "createClass : can't save file '"<<className<<"'[.h or .cpp]" << std::endl; |
76 | 1 | return false; | |
77 | } | ||
78 |
2/2✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
|
3 | } |
79 | 6 | return true; | |
80 | 8 | } | |
81 | |||
82 | ///Create header and source file name | ||
83 | /** @param sourceMode : arguments passed in the source mode | ||
84 | * @return true on success, false otherwise | ||
85 | */ | ||
86 | 2 | bool createHeaderSource(const OptionMode & sourceMode){ | |
87 |
2/2✓ Branch 1 taken 2 times.
✓ Branch 4 taken 2 times.
|
2 | PPath headerName("header"); |
88 |
2/2✓ Branch 1 taken 2 times.
✓ Branch 4 taken 2 times.
|
2 | sourceMode.getValue(headerName, "name"); |
89 |
2/2✓ Branch 1 taken 2 times.
✓ Branch 4 taken 2 times.
|
2 | PPath baseHeaderName(headerName.eraseExtension()); |
90 |
7/7✓ Branch 1 taken 2 times.
✓ Branch 4 taken 2 times.
✓ Branch 7 taken 2 times.
✓ Branch 10 taken 2 times.
✓ Branch 13 taken 2 times.
✓ Branch 16 taken 2 times.
✓ Branch 19 taken 2 times.
|
2 | saveHeaderSourceFile(PPath(baseHeaderName + ".h"), PPath(baseHeaderName + ".cpp")); |
91 | 2 | return true; | |
92 | 2 | } | |
93 | |||
94 | ///Create project | ||
95 | /** @param projectMode : arguments passed in the project mode | ||
96 | * @return true on success, false otherwise | ||
97 | */ | ||
98 | ✗ | bool createProjectSource(const OptionMode & projectMode){ | |
99 | ✗ | PPath configFile, descriptionFile; | |
100 | ✗ | projectMode.getValue(configFile, "config"); | |
101 | ✗ | projectMode.getValue(descriptionFile, "description"); | |
102 | ✗ | bool enablePythonWrapper = projectMode.isOptionExist("pythonwrapper"); | |
103 | ✗ | return project_generator(descriptionFile, configFile, enablePythonWrapper); | |
104 | } | ||
105 | |||
106 | 10 | int main(int argc, char** argv){ | |
107 |
1/1✓ Branch 1 taken 10 times.
|
10 | OptionParser parser = createOptionParser(); |
108 |
1/1✓ Branch 1 taken 10 times.
|
10 | parser.parseArgument(argc, argv); |
109 | |||
110 |
2/2✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
|
10 | const OptionMode & classMode = parser.getMode("class"); |
111 |
2/2✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
|
10 | const OptionMode & sourceMode = parser.getMode("source"); |
112 |
2/2✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
|
10 | const OptionMode & projectMode = parser.getMode("project"); |
113 | 10 | bool b(true); | |
114 |
3/3✓ Branch 1 taken 10 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
|
10 | if(classMode.isParsed()){ //We are using the class mode |
115 |
1/1✓ Branch 1 taken 8 times.
|
8 | b &= createClass(classMode); |
116 | } | ||
117 |
3/3✓ Branch 1 taken 10 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 8 times.
|
10 | if(sourceMode.isParsed()){ //We are using the source mode |
118 |
1/1✓ Branch 1 taken 2 times.
|
2 | b &= createHeaderSource(sourceMode); |
119 | } | ||
120 |
2/3✓ Branch 1 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
|
10 | if(projectMode.isParsed()){ //We are using the source mode |
121 | ✗ | b &= createProjectSource(projectMode); | |
122 | } | ||
123 | 10 | return b - 1; | |
124 | 10 | } | |
125 | |||
126 | |||
127 | |||
128 |