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