From afdf4683ee063716eaf283d17964946a578fdcf3 Mon Sep 17 00:00:00 2001 From: Vladimir Byko-Ianko Date: Fri, 29 Jul 2016 14:11:51 +0300 Subject: [PATCH] Adding test on saving features without altitude. --- generator/generator_tests/altitude_test.cpp | 107 +++++++++++++------- 1 file changed, 72 insertions(+), 35 deletions(-) diff --git a/generator/generator_tests/altitude_test.cpp b/generator/generator_tests/altitude_test.cpp index af95ff2481..6b1d7b2c05 100644 --- a/generator/generator_tests/altitude_test.cpp +++ b/generator/generator_tests/altitude_test.cpp @@ -69,7 +69,24 @@ class MockAltitudeGetter : public AltitudeGetter public: using TMockAltitudes = map; - MockAltitudeGetter(TMockAltitudes && altitudes) : m_altitudes(altitudes) {} + MockAltitudeGetter(vector const & roads) + { + for (TPoint3DList const & geom3D : roads) + { + for (size_t i = 0; i < geom3D.size(); ++i) + { + auto it = m_altitudes.find(geom3D[i].m_point); + if (it != m_altitudes.end()) + { + CHECK_EQUAL(it->second, geom3D[i].m_altitude, + ("Point", it->first, "is set with two different altitudes.")); + continue; + } + m_altitudes[geom3D[i].m_point] = geom3D[i].m_altitude; + } + } + } + // AltitudeGetter overrides: TAltitude GetAltitude(m2::PointD const & p) override { @@ -82,7 +99,17 @@ public: } private: - TMockAltitudes const & m_altitudes; + + TMockAltitudes m_altitudes; +}; + +class MockNoAltitudeGetter : public AltitudeGetter +{ +public: + TAltitude GetAltitude(m2::PointD const &) override + { + return kInvalidAltitude; + } }; vector ExtractPoints(TPoint3DList const & geom3D) @@ -93,25 +120,6 @@ vector ExtractPoints(TPoint3DList const & geom3D) return result; } -void FillAltitudes(vector const & roads, - MockAltitudeGetter::TMockAltitudes & altitudes) -{ - for (TPoint3DList const & geom3D : roads) - { - for (size_t i = 0; i < geom3D.size(); ++i) - { - auto it = altitudes.find(geom3D[i].m_point); - if (it != altitudes.end()) - { - CHECK_EQUAL(it->second, geom3D[i].m_altitude, - ("Point", it->first, "is set with two different altitudes.")); - continue; - } - altitudes[geom3D[i].m_point] = geom3D[i].m_altitude; - } - } -} - void BuildMwmWithoutAltitudes(vector const & roads, LocalCountryFile & country) { generator::tests_support::TestMwmBuilder builder(country, feature::DataHeader::country); @@ -121,7 +129,7 @@ void BuildMwmWithoutAltitudes(vector const & roads, LocalCountryFi } void TestAltitudes(MwmValue const & mwmValue, string const & mwmPath, - MockAltitudeGetter & altitudeGetter) + AltitudeGetter & altitudeGetter) { AltitudeLoader loader(mwmValue); @@ -139,12 +147,16 @@ void TestAltitudes(MwmValue const & mwmValue, string const & mwmPath, TEST_EQUAL(altitudes.size(), pointsCount, ()); for (size_t i = 0; i < pointsCount; ++i) - TEST_EQUAL(altitudeGetter.GetAltitude(f.GetPoint(i)), altitudes[i], ("A wrong altitude")); + { + TAltitude const fromGetter = altitudeGetter.GetAltitude(f.GetPoint(i)); + TAltitude const expected = (fromGetter == kInvalidAltitude ? kDefaultAltitudeMeters : fromGetter); + TEST_EQUAL(expected, altitudes[i], ("A wrong altitude")); + } }; feature::ForEachFromDat(mwmPath, processor); } -void TestAltitudesBuilding(vector const & roads) +void TestAltitudesBuilding(vector const & roads, AltitudeGetter & altitudeGetter) { classificator::Load(); Platform & platform = GetPlatform(); @@ -156,11 +168,6 @@ void TestAltitudesBuilding(vector const & roads) platform::tests_support::ScopedFile testScopedMwm(country.GetPath(MapOptions::Map)); BuildMwmWithoutAltitudes(roads, country); - // Creating MockAltitudeGetter. - MockAltitudeGetter::TMockAltitudes altitudes; - FillAltitudes(roads, altitudes); - MockAltitudeGetter altitudeGetter(move(altitudes)); - // Adding altitude section to mwm. string const mwmPath = my::JoinFoldersToPath(testDirFullPath, kTestMwm + DATA_FILE_EXTENSION); BuildRoadAltitudes(mwmPath, altitudeGetter); @@ -176,39 +183,69 @@ void TestAltitudesBuilding(vector const & roads) TestAltitudes(*mwmHandle.GetValue(), mwmPath, altitudeGetter); } +void TestBuildingAllFeaturesHaveAltitude(vector const & roads) +{ + MockAltitudeGetter altitudeGetter(roads); + TestAltitudesBuilding(roads, altitudeGetter); +} + +void TestBuildingNoFeatureHasAltitude(vector const & roads) +{ + MockNoAltitudeGetter altitudeGetter; + TestAltitudesBuilding(roads, altitudeGetter); +} + UNIT_TEST(AltitudeGenerationTest_ZeroFeatures) { vector const roads = {}; - TestAltitudesBuilding(roads); + TestBuildingAllFeaturesHaveAltitude(roads); } UNIT_TEST(AltitudeGenerationTest_OneRoad) { vector const roads = {kRoad1}; - TestAltitudesBuilding(roads); + TestBuildingAllFeaturesHaveAltitude(roads); } UNIT_TEST(AltitudeGenerationTest_TwoConnectedRoads) { vector const roads = {kRoad1, kRoad2}; - TestAltitudesBuilding(roads); + TestBuildingAllFeaturesHaveAltitude(roads); } UNIT_TEST(AltitudeGenerationTest_TwoDisconnectedRoads) { vector const roads = {kRoad1, kRoad3}; - TestAltitudesBuilding(roads); + TestBuildingAllFeaturesHaveAltitude(roads); } UNIT_TEST(AltitudeGenerationTest_ThreeRoads) { vector const roads = {kRoad1, kRoad2, kRoad3}; - TestAltitudesBuilding(roads); + TestBuildingAllFeaturesHaveAltitude(roads); } UNIT_TEST(AltitudeGenerationTest_FourRoads) { vector const roads = {kRoad1, kRoad2, kRoad3, kRoad4}; - TestAltitudesBuilding(roads); + TestBuildingAllFeaturesHaveAltitude(roads); +} + +UNIT_TEST(AltitudeGenerationTest_ZeroFeaturesWithoutAltitude) +{ + vector const roads = {}; + TestBuildingNoFeatureHasAltitude(roads); +} + +UNIT_TEST(AltitudeGenerationTest_OneRoadWithoutAltitude) +{ + vector const roads = {kRoad1}; + TestBuildingNoFeatureHasAltitude(roads); +} + +UNIT_TEST(AltitudeGenerationTest_FourRoadsWithoutAltitude) +{ + vector const roads = {kRoad1, kRoad2, kRoad3, kRoad4}; + TestBuildingNoFeatureHasAltitude(roads); } } // namespace