123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- #include "testVisualStudioSlnParser.h"
- #include "cmVisualStudioSlnData.h"
- #include "cmVisualStudioSlnParser.h"
- #include <iostream>
- static bool parsedRight(cmVisualStudioSlnParser& parser,
- const std::string& file, cmSlnData& data,
- cmVisualStudioSlnParser::ParseResult expected =
- cmVisualStudioSlnParser::ResultOK)
- {
- if (parser.ParseFile(SOURCE_DIR "/testVisualStudioSlnParser_data/" + file +
- "." SLN_EXTENSION,
- data, cmVisualStudioSlnParser::DataGroupProjects)) {
- if (expected == cmVisualStudioSlnParser::ResultOK) {
- return true;
- }
- } else {
- if (parser.GetParseResult() == expected) {
- return true;
- }
- }
- std::cerr << "cmVisualStudioSlnParser mis-parsed " << file
- << "." SLN_EXTENSION << "; expected result " << expected
- << ", got " << parser.GetParseResult() << std::endl;
- return false;
- }
- int testVisualStudioSlnParser(int, char* [])
- {
- cmVisualStudioSlnParser parser;
- // Test clean parser
- if (parser.GetParseResult() != cmVisualStudioSlnParser::ResultOK) {
- std::cerr << "cmVisualStudioSlnParser initialisation failed" << std::endl;
- return 1;
- }
- // Test parsing valid sln
- {
- cmSlnData data;
- if (!parsedRight(parser, "valid", data)) {
- return 1;
- }
- const std::vector<cmSlnProjectEntry>& projects = data.GetProjects();
- const char* const names[] = {
- "3rdParty", "ALL_BUILD", "CMakeLib", "CMakeLibTests",
- "CMakePredefinedTargets", "CPackLib", "CTestDashboardTargets",
- "CTestLib", "Continuous", "Documentation", "Experimental", "INSTALL",
- "KWSys", "LIBCURL", "Nightly", "NightlyMemoryCheck", "PACKAGE",
- "RUN_TESTS", "Tests", "Utilities", "Win9xCompat", "ZERO_CHECK",
- "cmIML_test", "cmake", "cmbzip2", "cmcldeps", "cmcompress", "cmcurl",
- "cmexpat", "cmlibarchive", "cmsys", "cmsysEncodeExecutable",
- "cmsysProcessFwd9x", "cmsysTestDynload", "cmsysTestProcess",
- "cmsysTestSharedForward", "cmsysTestsC", "cmsysTestsCxx", "cmsys_c",
- "cmw9xcom", "cmzlib", "cpack", "ctest", "documentation", "memcheck_fail",
- "pseudo_BC", "pseudo_purify", "pseudo_valgrind", "test_clean",
- "uninstall"
- /* clang-format needs this comment to break after the opening brace */
- };
- const size_t expectedProjectCount = sizeof(names) / sizeof(*names);
- if (projects.size() != expectedProjectCount) {
- std::cerr << "cmVisualStudioSlnParser returned bad number of "
- << "projects (" << projects.size() << " instead of "
- << expectedProjectCount << ')' << std::endl;
- return 1;
- }
- for (size_t idx = 0; idx < expectedProjectCount; ++idx) {
- if (projects[idx].GetName() != names[idx]) {
- std::cerr << "cmVisualStudioSlnParser returned bad project #" << idx
- << "; expected \"" << names[idx] << "\", got \""
- << projects[idx].GetName() << '"' << std::endl;
- return 1;
- }
- }
- if (projects[0].GetRelativePath() != "Utilities\\3rdParty") {
- std::cerr << "cmVisualStudioSlnParser returned bad relative path of "
- << "project 3rdParty; expected \"Utilities\\3rdParty\", "
- << "got \"" << projects[0].GetRelativePath() << '"'
- << std::endl;
- return 1;
- }
- if (projects[2].GetGUID() != "{59BCCCCD-3AD1-4491-B8F4-C5793AC007E2}") {
- std::cerr << "cmVisualStudioSlnParser returned bad relative path of "
- << "project CMakeLib; expected "
- << "\"{59BCCCCD-3AD1-4491-B8F4-C5793AC007E2}\", "
- << "got \"" << projects[2].GetGUID() << '"' << std::endl;
- return 1;
- }
- }
- // Test BOM parsing
- {
- cmSlnData data;
- if (!parsedRight(parser, "bom", data)) {
- return 1;
- }
- if (!parser.GetParseHadBOM()) {
- std::cerr << "cmVisualStudioSlnParser didn't find BOM in bom."
- << SLN_EXTENSION << std::endl;
- return 1;
- }
- if (!parsedRight(parser, "nobom", data)) {
- return 1;
- }
- if (parser.GetParseHadBOM()) {
- std::cerr << "cmVisualStudioSlnParser found BOM in nobom."
- << SLN_EXTENSION << std::endl;
- return 1;
- }
- }
- // Test invalid sln
- {
- {
- cmSlnData data;
- if (!parsedRight(parser, "err-nonexistent", data,
- cmVisualStudioSlnParser::ResultErrorOpeningInput)) {
- return 1;
- }
- }
- {
- cmSlnData data;
- if (!parsedRight(parser, "err-empty", data,
- cmVisualStudioSlnParser::ResultErrorReadingInput)) {
- return 1;
- }
- }
- const char* const files[] = {
- "header", "projectArgs", "topLevel", "projectContents",
- "projectSection", "global", "unclosed", "strayQuote",
- "strayParen", "strayQuote2"
- /* clang-format needs this comment to break after the opening brace */
- };
- for (size_t idx = 0; idx < sizeof(files) / sizeof(files[0]); ++idx) {
- cmSlnData data;
- if (!parsedRight(parser, std::string("err-structure-") + files[idx],
- data,
- cmVisualStudioSlnParser::ResultErrorInputStructure)) {
- return 1;
- }
- }
- {
- cmSlnData data;
- if (!parsedRight(parser, "err-data", data,
- cmVisualStudioSlnParser::ResultErrorInputData)) {
- return 1;
- }
- }
- }
- // All is well
- return 0;
- }
|