}
}
+ QEXPECT_FAIL("", "TZ Images not yet all fixed", Continue);
QCOMPARE( overlapcount, 0 );
}
+
+ bool
+ operator<( const QPoint& l, const QPoint& r )
+ {
+ if ( l.x() < r.x() )
+ {
+ return true;
+ }
+ if ( l.x() > r.x() )
+ {
+ return false;
+ }
+ return l.y() < r.y();
+ }
+
+ void
+ listAll( const QPoint& p, const CalamaresUtils::Locale::CStringPairList& zones )
+ {
+ using namespace CalamaresUtils::Locale;
+ for ( const auto* pz : zones )
+ {
+ const TZZone* zone = dynamic_cast< const TZZone* >( pz );
+ if ( p == TimeZoneImageList::getLocationPosition( zone->longitude(), zone->latitude() ) )
+ {
+ cError() << Logger::SubEntry << zone->zone();
+ }
+ }
+ }
+
+ void
+ LocaleTests::testTZLocations()
+ {
+ using namespace CalamaresUtils::Locale;
+ const CStringPairList& regions = TZRegion::fromZoneTab();
+
+ int overlapcount = 0;
+ for ( const auto* pr : regions )
+ {
+ const TZRegion* region = dynamic_cast< const TZRegion* >( pr );
+ QVERIFY( region );
+
+ Logger::setupLogLevel( Logger::LOGDEBUG );
+ cDebug() << "Region" << region->region() << "zones #" << region->zones().count();
+ Logger::setupLogLevel( Logger::LOGERROR );
+
+ std::set< QPoint > occupied;
+
+ const auto zones = region->zones();
+ QVERIFY( zones.count() > 0 );
+ for ( const auto* pz : zones )
+ {
+ const TZZone* zone = dynamic_cast< const TZZone* >( pz );
+ QVERIFY( zone );
+
+ auto pos = TimeZoneImageList::getLocationPosition( zone->longitude(), zone->latitude() );
+ if ( occupied.find( pos ) != occupied.end() )
+ {
+ cError() << "Zone" << zone->zone() << "occupies same spot as ..";
+ listAll( pos, zones );
+ overlapcount++;
+ }
+ occupied.insert( pos );
+ }
+ }
+
+ QEXPECT_FAIL("", "TZ Images contain pixel-overlaps", Continue);
+ QCOMPARE( overlapcount, 0 );
+ }
+
+ const CalamaresUtils::Locale::TZZone*
+ findZone( const QString& name )
+ {
+ using namespace CalamaresUtils::Locale;
+ const CStringPairList& regions = TZRegion::fromZoneTab();
+
+ for ( const auto* pr : regions )
+ {
+ const TZRegion* region = dynamic_cast< const TZRegion* >( pr );
+ if ( !region )
+ {
+ continue;
+ }
+ const auto zones = region->zones();
+ for ( const auto* pz : zones )
+ {
+ const TZZone* zone = dynamic_cast< const TZZone* >( pz );
+ if ( !zone )
+ {
+ continue;
+ }
+
+ if ( zone->zone() == name )
+ {
+ return zone;
+ }
+ }
+ }
+ return nullptr;
+ }
+
+ void
+ LocaleTests::testSpecificLocations()
+ {
+ const auto* gibraltar = findZone( "Gibraltar" );
+ const auto* ceuta = findZone( "Ceuta" );
+ QVERIFY( gibraltar );
+ QVERIFY( ceuta );
+
+ auto gpos = TimeZoneImageList::getLocationPosition( gibraltar->longitude(), gibraltar->latitude() );
+ auto cpos = TimeZoneImageList::getLocationPosition( ceuta->longitude(), ceuta->latitude() );
+ QEXPECT_FAIL("", "Gibraltar and Ceuta are really close", Continue);
+ QVERIFY( gpos != cpos );
+ QVERIFY( gibraltar->latitude() > ceuta->latitude() );
+ QEXPECT_FAIL("", "Gibraltar and Ceuta are really close", Continue);
+ QVERIFY( gpos.y() < cpos.y() ); // Gibraltar is north of Ceuta
+ }