| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- #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;
- }
|