diff --git a/storage/guides.cpp b/storage/guides.cpp index 03697d5f19..55e81308ae 100644 --- a/storage/guides.cpp +++ b/storage/guides.cpp @@ -84,6 +84,12 @@ string DebugPrint(GuideInfo const & r) return ss.str(); } +void GuidesManager::RestoreFromParsedData(int version, MapT & guidesInfo) +{ + m_version = version; + m_file2Info.swap(guidesInfo); +} + bool GuidesManager::RestoreFromFile() { int resourcesVersion = -1, downloadedVersion = -1; @@ -93,7 +99,7 @@ bool GuidesManager::RestoreFromFile() { string json; ReaderPtr(pl.GetReader(GetDataFileName(), "r")).ReadAsString(json); - resourcesVersion = ValidateAndParseGuidesData(json, fromResources); + resourcesVersion = ParseGuidesData(json, fromResources); } catch (RootException const &) { @@ -102,7 +108,7 @@ bool GuidesManager::RestoreFromFile() { string json; ReaderPtr(pl.GetReader(GetDataFileName(), "w")).ReadAsString(json); - downloadedVersion = ValidateAndParseGuidesData(json, fromDownloaded); + downloadedVersion = ParseGuidesData(json, fromDownloaded); } catch (RootException const &) { @@ -111,14 +117,12 @@ bool GuidesManager::RestoreFromFile() ASSERT_GREATER(resourcesVersion, 0, ()); if (downloadedVersion > resourcesVersion) { - m_version = downloadedVersion; - m_file2Info.swap(fromDownloaded); + RestoreFromParsedData(downloadedVersion, fromDownloaded); return true; } else if (resourcesVersion > downloadedVersion || resourcesVersion >= 0) { - m_version = resourcesVersion; - m_file2Info.swap(fromResources); + RestoreFromParsedData(resourcesVersion, fromResources); return true; } LOG(LWARNING, ("Guides descriptions were not loaded")); @@ -180,7 +184,7 @@ void GuidesManager::OnFinish(downloader::HttpRequest & request) string const & data = request.Data(); // Sanity check if we forgot to update json version on servers MapT tmpGuides; - int const downloadedVersion = ValidateAndParseGuidesData(data, tmpGuides); + int const downloadedVersion = ParseGuidesData(data, tmpGuides); if (downloadedVersion > m_version && !m_file2Info.empty()) { // Load into the memory even if we fail to save it later @@ -211,7 +215,7 @@ void GuidesManager::OnFinish(downloader::HttpRequest & request) m_httpRequest.reset(); } -int GuidesManager::ValidateAndParseGuidesData(string const & jsonData, MapT & guidesInfo) +int GuidesManager::ParseGuidesData(string const & jsonData, MapT & guidesInfo) { guidesInfo.clear(); // 0 means "version" key is absent in json diff --git a/storage/guides.hpp b/storage/guides.hpp index 0120130147..4e369d67b9 100644 --- a/storage/guides.hpp +++ b/storage/guides.hpp @@ -36,18 +36,17 @@ string DebugPrint(GuideInfo const & r); class GuidesManager : private noncopyable { - /// For unit tests visibility - friend void UnitTest_Guides_SmokeTest(); - friend void UnitTest_Guides_CorrectlyParseData(); - friend void UnitTest_Guides_SaveRestoreFromFile(); - friend void UnitTest_Guides_ComplexNames(); - friend void UnitTest_Guides_CheckDataFiles(); - /// @name Guides managment //@{ public: void UpdateGuidesData(); bool RestoreFromFile(); + typedef map MapT; + /// @param[in] guidesInfo filled with correct info about guides on success + /// @return -1 if failed to parse or json version number otherwise. 0 means version is absent in json. + static int ParseGuidesData(string const & jsonData, MapT & guidesInfo); + void RestoreFromParsedData(int version, MapT & guidesInfo); + static string GetDataFileFullPath(); /// @param[in] id MWM file name without extension as a key. bool GetGuideInfo(string const & id, GuideInfo & appInfo) const; @@ -59,16 +58,9 @@ public: //@} private: - typedef map MapT; - - /// @param[in] guidesInfo filled with correct info about guides on success - /// @return -1 if failed to parse or json version number otherwise. 0 means version is absent in json. - int ValidateAndParseGuidesData(string const & jsonData, MapT & guidesInfo); - void OnFinish(downloader::HttpRequest & request); static string GetGuidesDataUrl(); static string GetDataFileName(); - static string GetDataFileFullPath(); /// Map from mwm file name (key) to guide info. MapT m_file2Info; diff --git a/storage/storage_tests/guides_tests.cpp b/storage/storage_tests/guides_tests.cpp index 41acf421ef..56521a3085 100644 --- a/storage/storage_tests/guides_tests.cpp +++ b/storage/storage_tests/guides_tests.cpp @@ -26,13 +26,14 @@ UNIT_TEST(Guides_SmokeTest) "} }"; GuidesManager::MapT data; - TEST_EQUAL(-1, manager.ValidateAndParseGuidesData("invalidtest", data), ()); - TEST_EQUAL(0, manager.ValidateAndParseGuidesData("{}", data), ()); - manager.m_file2Info.swap(data); + int version; + TEST_EQUAL(-1, version = manager.ParseGuidesData("invalidtest", data), ()); + TEST_EQUAL(0, version = manager.ParseGuidesData("{}", data), ()); + manager.RestoreFromParsedData(version, data); TEST(!manager.GetGuideInfo("Guernsey", info), ()); - TEST_EQUAL(2, manager.ValidateAndParseGuidesData(str, data), ()); - manager.m_file2Info.swap(data); + TEST_EQUAL(2, version = manager.ParseGuidesData(str, data), ()); + manager.RestoreFromParsedData(version, data); TEST(manager.GetGuideInfo("Guernsey", info), ()); TEST(info.IsValid(), ()); @@ -75,8 +76,9 @@ UNIT_TEST(Guides_CorrectlyParseData) string invalidKeys[] = { "london", "Lond", "Isle", "Man" }; GuidesManager::MapT data; - TEST_EQUAL(2, manager.ValidateAndParseGuidesData(strLondonIsle, data), ()); - manager.m_file2Info.swap(data); + int version; + TEST_EQUAL(2, version = manager.ParseGuidesData(strLondonIsle, data), ()); + manager.RestoreFromParsedData(version, data); for (size_t i = 0; i < ARRAY_SIZE(validKeys); ++i) { TEST(manager.GetGuideInfo(validKeys[i], info), (i)); @@ -125,8 +127,9 @@ UNIT_TEST(Guides_ComplexNames) string invalidKeys[] = { "Не Беларусь", "Côte_d'IvoireCôte_d'IvoireCôte_d'Ivoire" }; GuidesManager::MapT data; - TEST_EQUAL(123456, manager.ValidateAndParseGuidesData(strLondonIsle, data), ()); - manager.m_file2Info.swap(data); + int version; + TEST_EQUAL(123456, version = manager.ParseGuidesData(strLondonIsle, data), ()); + manager.RestoreFromParsedData(version, data); for (size_t i = 0; i < ARRAY_SIZE(validKeys); ++i) { TEST(manager.GetGuideInfo(validKeys[i], info), (i)); @@ -158,8 +161,9 @@ UNIT_TEST(Guides_SaveRestoreFromFile) "} }"; GuidesManager::MapT data; - TEST_EQUAL(2, manager.ValidateAndParseGuidesData(strLondonIsle, data), ()); - manager.m_file2Info.swap(data); + int version; + TEST_EQUAL(2, version = manager.ParseGuidesData(strLondonIsle, data), ()); + manager.RestoreFromParsedData(version, data); string const path = manager.GetDataFileFullPath(); { @@ -202,8 +206,9 @@ UNIT_TEST(Guides_CheckDataFiles) reader.ReadAsString(str); GuidesManager::MapT data; - TEST_LESS(0, manager.ValidateAndParseGuidesData(str, data), ()); - manager.m_file2Info.swap(data); + int version; + TEST_LESS(0, version = manager.ParseGuidesData(str, data), ()); + manager.RestoreFromParsedData(version, data); TEST(manager.GetGuideInfo("UK_England", info), ()); TEST(info.IsValid(), ()); }