| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- #include "testVisualStudioSlnParser.h"
- #include <iostream>
- #include "cmVisualStudioSlnData.h"
- #include "cmVisualStudioSlnParser.h"
- 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 initialization 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",
- "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;
- }
|