Remove redundant Qt6 migration comments that restate obvious API changes: - QtConcurrent::run parameter order explanations (preserved where lambda wrapping needed) - QStringRef/QStringView API changes (shortened to essential info) - QComboBox::activated signal signature change - QMap::unite() removal semantics - QAction include path change - QMouseEvent/QWheelEvent position() API - QList/QVector equivalence in Qt6 - QFuture continuation API - Code generation comments Preserved comments explaining non-obvious Qt6 behavior or necessary API migration details. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
199 lines
5.7 KiB
C++
199 lines
5.7 KiB
C++
/**
|
|
* @RDE_HEADER@
|
|
* Unit Tests for MapImpl Module - Qt6 Migration
|
|
* $Id$
|
|
* $HeadURL$
|
|
* $Author$
|
|
*/
|
|
|
|
#include <gtest/gtest.h>
|
|
#include <QCoreApplication>
|
|
#include <QString>
|
|
#include <QList>
|
|
#include <QPointF>
|
|
#include <QVariantMap>
|
|
|
|
namespace
|
|
{
|
|
// Mock class to simulate location display behavior
|
|
class MockLocationDisplay
|
|
{
|
|
public:
|
|
MockLocationDisplay() : m_enabled(false), m_accuracy(0.0) {}
|
|
|
|
void setEnabled(bool enabled) { m_enabled = enabled; }
|
|
bool isEnabled() const { return m_enabled; }
|
|
|
|
void setAccuracy(double accuracy) { m_accuracy = accuracy; }
|
|
double accuracy() const { return m_accuracy; }
|
|
|
|
void setPosition(const QPointF& position) { m_position = position; }
|
|
QPointF position() const { return m_position; }
|
|
|
|
private:
|
|
bool m_enabled;
|
|
double m_accuracy;
|
|
QPointF m_position;
|
|
};
|
|
}
|
|
|
|
// Test MapImpl location display basic operations
|
|
TEST(MapImplTest, LocationDisplay_BasicOperations)
|
|
{
|
|
MockLocationDisplay locationDisplay;
|
|
|
|
EXPECT_FALSE(locationDisplay.isEnabled());
|
|
EXPECT_EQ(locationDisplay.accuracy(), 0.0);
|
|
|
|
locationDisplay.setEnabled(true);
|
|
EXPECT_TRUE(locationDisplay.isEnabled());
|
|
|
|
locationDisplay.setAccuracy(10.0);
|
|
EXPECT_DOUBLE_EQ(locationDisplay.accuracy(), 10.0);
|
|
|
|
locationDisplay.setPosition(QPointF(45.5, -122.3));
|
|
EXPECT_DOUBLE_EQ(locationDisplay.position().x(), 45.5);
|
|
EXPECT_DOUBLE_EQ(locationDisplay.position().y(), -122.3);
|
|
}
|
|
|
|
// Test MapImpl Qt6 API compatibility
|
|
TEST(MapImplTest, Qt6_API_Compatibility)
|
|
{
|
|
// Test QString operations (Qt6)
|
|
QString mapName = QStringLiteral("SituationMap");
|
|
EXPECT_EQ(mapName, QStringLiteral("SituationMap"));
|
|
|
|
// Test QVariantMap operations (Qt6)
|
|
QVariantMap properties;
|
|
properties.insert(QStringLiteral("zoom"), 10);
|
|
properties.insert(QStringLiteral("center"), QPointF(45.5, -122.3));
|
|
|
|
EXPECT_EQ(properties[QStringLiteral("zoom")].toInt(), 10);
|
|
EXPECT_EQ(properties[QStringLiteral("center")].toPointF().x(), 45.5);
|
|
|
|
// QMap::unite() removed in Qt6
|
|
QVariantMap properties2;
|
|
for (auto it = properties.begin(); it != properties.end(); ++it)
|
|
{
|
|
properties2.insert(it.key(), it.value());
|
|
}
|
|
|
|
EXPECT_EQ(properties.size(), properties2.size());
|
|
}
|
|
|
|
// Test MapImpl container operations
|
|
TEST(MapImplTest, Container_Operations)
|
|
{
|
|
QList<QString> layerNames;
|
|
layerNames << QStringLiteral("BaseMap")
|
|
<< QStringLiteral("Overlay1")
|
|
<< QStringLiteral("Overlay2");
|
|
|
|
EXPECT_EQ(layerNames.size(), 3);
|
|
EXPECT_EQ(layerNames[0], QStringLiteral("BaseMap"));
|
|
EXPECT_EQ(layerNames[1], QStringLiteral("Overlay1"));
|
|
EXPECT_EQ(layerNames[2], QStringLiteral("Overlay2"));
|
|
|
|
// Test iteration
|
|
int count = 0;
|
|
for (const auto& name : layerNames)
|
|
{
|
|
EXPECT_FALSE(name.isEmpty());
|
|
++count;
|
|
}
|
|
EXPECT_EQ(count, 3);
|
|
}
|
|
|
|
// Test MapImpl coordinate operations
|
|
TEST(MapImplTest, Coordinate_Operations)
|
|
{
|
|
// Test coordinate list
|
|
QList<QPointF> coordinates;
|
|
coordinates << QPointF(45.0, -122.0)
|
|
<< QPointF(46.0, -123.0)
|
|
<< QPointF(47.0, -124.0);
|
|
|
|
EXPECT_EQ(coordinates.size(), 3);
|
|
|
|
// Calculate bounding box
|
|
double minX = coordinates[0].x();
|
|
double maxX = coordinates[0].x();
|
|
double minY = coordinates[0].y();
|
|
double maxY = coordinates[0].y();
|
|
|
|
for (const auto& coord : coordinates)
|
|
{
|
|
if (coord.x() < minX) minX = coord.x();
|
|
if (coord.x() > maxX) maxX = coord.x();
|
|
if (coord.y() < minY) minY = coord.y();
|
|
if (coord.y() > maxY) maxY = coord.y();
|
|
}
|
|
|
|
EXPECT_DOUBLE_EQ(minX, 45.0);
|
|
EXPECT_DOUBLE_EQ(maxX, 47.0);
|
|
EXPECT_DOUBLE_EQ(minY, -124.0);
|
|
EXPECT_DOUBLE_EQ(maxY, -122.0);
|
|
}
|
|
|
|
// Test MapImpl ArcGIS integration points
|
|
TEST(MapImplTest, ArcGIS_Integration_Points)
|
|
{
|
|
// These tests verify the integration points for ArcGIS SDK v300
|
|
// The actual ArcGIS objects require full SDK initialization
|
|
|
|
// Test include path verification (compile-time check)
|
|
// In actual code: #include <ArcGISRuntime/Map.h> (no arcgis/ prefix)
|
|
|
|
// Verify string operations used in ArcGIS integration
|
|
QString arcgisUrl = QStringLiteral("https://services.arcgis.com/...");
|
|
EXPECT_TRUE(arcgisUrl.startsWith(QStringLiteral("https://")));
|
|
|
|
// Test map properties
|
|
QVariantMap mapProperties;
|
|
mapProperties.insert(QStringLiteral("baseUrl"), arcgisUrl);
|
|
mapProperties.insert(QStringLiteral("version"), 300);
|
|
|
|
EXPECT_EQ(mapProperties[QStringLiteral("version")].toInt(), 300);
|
|
}
|
|
|
|
// Test MapImpl error handling
|
|
TEST(MapImplTest, Error_Handling)
|
|
{
|
|
// Test error state handling
|
|
bool hasError = false;
|
|
QString errorMessage;
|
|
|
|
// Simulate error condition
|
|
hasError = true;
|
|
errorMessage = QStringLiteral("Map initialization failed");
|
|
|
|
EXPECT_TRUE(hasError);
|
|
EXPECT_FALSE(errorMessage.isEmpty());
|
|
EXPECT_EQ(errorMessage, QStringLiteral("Map initialization failed"));
|
|
|
|
// Clear error
|
|
hasError = false;
|
|
errorMessage.clear();
|
|
|
|
EXPECT_FALSE(hasError);
|
|
EXPECT_TRUE(errorMessage.isEmpty());
|
|
}
|
|
|
|
// Test MapImpl async operation simulation
|
|
TEST(MapImplTest, Async_Operation_Simulation)
|
|
{
|
|
// Simulate async map loading operation
|
|
bool loadComplete = false;
|
|
QString loadedMapName;
|
|
|
|
// In real code, this would be a QFuture or callback
|
|
auto simulateLoad = [&loadComplete, &loadedMapName]() {
|
|
loadedMapName = QStringLiteral("TestMap");
|
|
loadComplete = true;
|
|
};
|
|
|
|
simulateLoad();
|
|
|
|
EXPECT_TRUE(loadComplete);
|
|
EXPECT_EQ(loadedMapName, QStringLiteral("TestMap"));
|
|
} |