|
29 | 29 | #include <stdexcept> |
30 | 30 | // IWYU pragma: no_include <type_traits> |
31 | 31 | #include <utility> |
| 32 | +#include <vector> |
32 | 33 |
|
33 | 34 | #include <Qt> |
34 | 35 | #include <QtGlobal> |
|
54 | 55 | #include <QSize> |
55 | 56 | #include <QSizeF> |
56 | 57 | #include <QString> |
| 58 | +#include <QStringList> |
57 | 59 | #include <QStringRef> |
58 | 60 | #include <QTemporaryDir> |
59 | 61 | #include <QVariant> |
@@ -1885,6 +1887,168 @@ void FileFormatTest::ocdTextSymbolTest() |
1885 | 1887 | } |
1886 | 1888 |
|
1887 | 1889 |
|
| 1890 | +void FileFormatTest::dxfExportTest_data() |
| 1891 | +{ |
| 1892 | + QTest::addColumn<QString>("map_filepath"); |
| 1893 | + QTest::addColumn<QByteArray>("ogr_format_id"); |
| 1894 | + QTest::addColumn<QString>("ogr_extension"); |
| 1895 | + QTest::addColumn<bool>("export_one_layer_per_symbol"); |
| 1896 | + |
| 1897 | + QTest::newRow("export_one_layer_per_symbol = false") << QString::fromLatin1("data:helper-hidden-symbols.omap") |
| 1898 | + << QByteArray("OGR-export-DXF") << QString::fromLatin1("dxf") |
| 1899 | + << false; |
| 1900 | + QTest::newRow("export_one_layer_per_symbol = true") << QString::fromLatin1("data:helper-hidden-symbols.omap") |
| 1901 | + << QByteArray("OGR-export-DXF") << QString::fromLatin1("dxf") |
| 1902 | + << true; |
| 1903 | +} |
| 1904 | + |
| 1905 | +void FileFormatTest::dxfExportTest() |
| 1906 | +{ |
| 1907 | +#ifdef MAPPER_USE_GDAL |
| 1908 | + QFETCH(QString, map_filepath); |
| 1909 | + QFETCH(QByteArray, ogr_format_id); |
| 1910 | + QFETCH(QString, ogr_extension); |
| 1911 | + QFETCH(bool, export_one_layer_per_symbol); |
| 1912 | + |
| 1913 | + QTemporaryDir dir; |
| 1914 | + QVERIFY(dir.isValid()); |
| 1915 | + auto const ogr_filepath = QString {dir.path() + QLatin1String("/dxfexport.") + ogr_extension}; |
| 1916 | + |
| 1917 | + GdalManager manager; |
| 1918 | + auto prev_export_one_layer_per_symbol = manager.isExportOptionEnabled(GdalManager::OneLayerPerSymbol); |
| 1919 | + if (prev_export_one_layer_per_symbol != export_one_layer_per_symbol) |
| 1920 | + manager.setExportOptionEnabled(GdalManager::OneLayerPerSymbol, export_one_layer_per_symbol); |
| 1921 | + |
| 1922 | + Map map; |
| 1923 | + { |
| 1924 | + QVERIFY(map.loadFrom(map_filepath)); |
| 1925 | + |
| 1926 | + auto const* format = FileFormats.findFormat(ogr_format_id); |
| 1927 | + QVERIFY(format); |
| 1928 | + |
| 1929 | + auto exporter = format->makeExporter(ogr_filepath, &map, nullptr); |
| 1930 | + QVERIFY(bool(exporter)); |
| 1931 | + QVERIFY(exporter->doExport()); |
| 1932 | + } |
| 1933 | + |
| 1934 | + if (prev_export_one_layer_per_symbol != export_one_layer_per_symbol) |
| 1935 | + manager.setExportOptionEnabled(GdalManager::OneLayerPerSymbol, prev_export_one_layer_per_symbol); |
| 1936 | + |
| 1937 | + Map imported_map; |
| 1938 | + { |
| 1939 | + auto const* format = FileFormats.findFormat("OGR"); |
| 1940 | + QVERIFY(format); |
| 1941 | + |
| 1942 | + auto importer = format->makeImporter(ogr_filepath, &imported_map, nullptr); |
| 1943 | + QVERIFY(bool(importer)); |
| 1944 | + QVERIFY(importer->doImport()); |
| 1945 | + } |
| 1946 | + |
| 1947 | + // Symbols |
| 1948 | + QCOMPARE(imported_map.getNumSymbols(), 8); // 4 default symbols and 4 symbols for the imported objects |
| 1949 | + |
| 1950 | + // Objects |
| 1951 | + const auto& actual_part = *map.getPart(0); |
| 1952 | + const auto& imported_part = *imported_map.getPart(0); |
| 1953 | + QCOMPARE(actual_part.getNumObjects(), 12); |
| 1954 | + QCOMPARE(imported_part.getNumObjects(), 4); |
| 1955 | + |
| 1956 | +#endif // MAPPER_USE_GDAL |
| 1957 | +} |
| 1958 | + |
| 1959 | + |
| 1960 | +void FileFormatTest::shpExportTest_data() |
| 1961 | +{ |
| 1962 | + QTest::addColumn<QString>("map_filepath"); |
| 1963 | + QTest::addColumn<QByteArray>("ogr_format_id"); |
| 1964 | + QTest::addColumn<QString>("ogr_extension"); |
| 1965 | + QTest::addColumn<bool>("export_one_layer_per_symbol"); |
| 1966 | + QTest::addColumn<QString>("name_extensions"); |
| 1967 | + QTest::addColumn<std::vector<int>>("number_symbols"); |
| 1968 | + QTest::addColumn<std::vector<int>>("number_objects"); |
| 1969 | + |
| 1970 | + |
| 1971 | + QTest::newRow("export_one_layer_per_symbol = false") << QString::fromLatin1("data:helper-hidden-symbols.omap") |
| 1972 | + << QByteArray("OGR-export-ESRI Shapefile") << QString::fromLatin1("shp") |
| 1973 | + << false |
| 1974 | + << QString::fromLatin1("areas lines") |
| 1975 | + << std::vector<int>{4, 4} |
| 1976 | + << std::vector<int>{1, 2}; // the single line is exported as two lines |
| 1977 | + QTest::newRow("export_one_layer_per_symbol = true") << QString::fromLatin1("data:helper-hidden-symbols.omap") |
| 1978 | + << QByteArray("OGR-export-ESRI Shapefile") << QString::fromLatin1("shp") |
| 1979 | + << true |
| 1980 | + << QString::fromLatin1("Area Line Text") |
| 1981 | + << std::vector<int>{4, 4, 4} |
| 1982 | + << std::vector<int>{1, 2, 0}; // the single line is exported as two lines |
| 1983 | +} |
| 1984 | + |
| 1985 | +void FileFormatTest::shpExportTest() |
| 1986 | +{ |
| 1987 | +#ifdef MAPPER_USE_GDAL |
| 1988 | + QFETCH(QString, map_filepath); |
| 1989 | + QFETCH(QByteArray, ogr_format_id); |
| 1990 | + QFETCH(QString, ogr_extension); |
| 1991 | + QFETCH(bool, export_one_layer_per_symbol); |
| 1992 | + QFETCH(QString, name_extensions); |
| 1993 | + QFETCH(std::vector<int>, number_symbols); |
| 1994 | + QFETCH(std::vector<int>, number_objects); |
| 1995 | + |
| 1996 | + const auto name_extension_list = name_extensions.split(QLatin1String(" ")); |
| 1997 | + QVERIFY(name_extension_list.size() == (int)number_symbols.size()); |
| 1998 | + QVERIFY(number_objects.size() == number_symbols.size()); |
| 1999 | + |
| 2000 | + QTemporaryDir dir; |
| 2001 | + QVERIFY(dir.isValid()); |
| 2002 | + auto const ogr_filepath = QString {dir.path() + QLatin1String("/shpexport.") + ogr_extension}; |
| 2003 | + |
| 2004 | + GdalManager manager; |
| 2005 | + auto prev_export_one_layer_per_symbol = manager.isExportOptionEnabled(GdalManager::OneLayerPerSymbol); |
| 2006 | + if (prev_export_one_layer_per_symbol != export_one_layer_per_symbol) |
| 2007 | + manager.setExportOptionEnabled(GdalManager::OneLayerPerSymbol, export_one_layer_per_symbol); |
| 2008 | + |
| 2009 | + Map map; |
| 2010 | + { |
| 2011 | + QVERIFY(map.loadFrom(map_filepath)); |
| 2012 | + |
| 2013 | + auto const* format = FileFormats.findFormat(ogr_format_id); |
| 2014 | + QVERIFY(format); |
| 2015 | + |
| 2016 | + auto exporter = format->makeExporter(ogr_filepath, &map, nullptr); |
| 2017 | + QVERIFY(bool(exporter)); |
| 2018 | + QVERIFY(exporter->doExport()); |
| 2019 | + } |
| 2020 | + |
| 2021 | + if (prev_export_one_layer_per_symbol != export_one_layer_per_symbol) |
| 2022 | + manager.setExportOptionEnabled(GdalManager::OneLayerPerSymbol, prev_export_one_layer_per_symbol); |
| 2023 | + |
| 2024 | + int i = 0; |
| 2025 | + for (const auto& name_extension : name_extension_list) |
| 2026 | + { |
| 2027 | + Map imported_map; |
| 2028 | + { |
| 2029 | + auto const* format = FileFormats.findFormat("OGR"); |
| 2030 | + QVERIFY(format); |
| 2031 | + |
| 2032 | + auto const ogr_filepath = QString {dir.path() + QLatin1String("/shpexport_") + name_extension + QLatin1String(".") + ogr_extension}; |
| 2033 | + auto importer = format->makeImporter(ogr_filepath, &imported_map, nullptr); |
| 2034 | + QVERIFY(bool(importer)); |
| 2035 | + QVERIFY(importer->doImport()); |
| 2036 | + } |
| 2037 | + |
| 2038 | + // Symbols |
| 2039 | + QCOMPARE(imported_map.getNumSymbols(), number_symbols.at(i)); // 4 default symbols and 4 symbols for the imported objects |
| 2040 | + |
| 2041 | + // Objects |
| 2042 | + const auto& actual_part = *map.getPart(0); |
| 2043 | + const auto& imported_part = *imported_map.getPart(0); |
| 2044 | + QCOMPARE(actual_part.getNumObjects(), 12); |
| 2045 | + QCOMPARE(imported_part.getNumObjects(), number_objects.at(i)); |
| 2046 | + ++i; |
| 2047 | + } |
| 2048 | + |
| 2049 | +#endif // MAPPER_USE_GDAL |
| 2050 | +} |
| 2051 | + |
1888 | 2052 | /* |
1889 | 2053 | * We don't need a real GUI window. |
1890 | 2054 | * |
|
0 commit comments