diff --git a/src/core/tiledmesh/qgscesiumtilesdataprovider.cpp b/src/core/tiledmesh/qgscesiumtilesdataprovider.cpp index c84137810de7..01a44e65ed42 100644 --- a/src/core/tiledmesh/qgscesiumtilesdataprovider.cpp +++ b/src/core/tiledmesh/qgscesiumtilesdataprovider.cpp @@ -203,8 +203,7 @@ bool QgsCesiumTilesDataProvider::isValid() const { QGIS_PROTECT_QOBJECT_THREAD_ACCESS - // TODO - return true; + return mIsValid; } QString QgsCesiumTilesDataProvider::name() const diff --git a/tests/src/python/CMakeLists.txt b/tests/src/python/CMakeLists.txt index 1b7d98504151..67c0f7ce3b52 100644 --- a/tests/src/python/CMakeLists.txt +++ b/tests/src/python/CMakeLists.txt @@ -45,6 +45,7 @@ ADD_PYTHON_TEST(PyQgsBookmarkManager test_qgsbookmarkmanager.py) ADD_PYTHON_TEST(PyQgsBookmarkModel test_qgsbookmarkmodel.py) ADD_PYTHON_TEST(PyQgsBox3d test_qgsbox3d.py) ADD_PYTHON_TEST(PyQgsCategorizedSymbolRenderer test_qgscategorizedsymbolrenderer.py) +ADD_PYTHON_TEST(PyQgsCesiumTiledMeshLayer test_qgscesiumtiledmeshlayer.py) ADD_PYTHON_TEST(PyQgsCesiumUtils test_qgscesiumutils.py) ADD_PYTHON_TEST(PyQgsCheckableComboBox test_qgscheckablecombobox.py) ADD_PYTHON_TEST(PyQgsClassificationMethod test_qgsclassificationmethod.py) diff --git a/tests/src/python/test_qgscesiumtiledmeshlayer.py b/tests/src/python/test_qgscesiumtiledmeshlayer.py new file mode 100644 index 000000000000..eeb951038138 --- /dev/null +++ b/tests/src/python/test_qgscesiumtiledmeshlayer.py @@ -0,0 +1,84 @@ +"""QGIS Unit tests for QgsCesiumTiledMeshLayer + +.. note:: This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. +""" +__author__ = 'Nyall Dawson' +__date__ = '27/06/2023' +__copyright__ = 'Copyright 2023, The QGIS Project' + +import os +import tempfile + +import qgis # NOQA +from qgis.core import ( + QgsTiledMeshLayer, + QgsCoordinateReferenceSystem +) +from qgis.testing import start_app, unittest +from utilities import unitTestDataPath + +start_app() + + +class TestQgsCesiumTiledMeshLayer(unittest.TestCase): + + def test_invalid_source(self): + layer = QgsTiledMeshLayer('/nope/tileset.json', 'my layer', + 'cesiumtiles') + self.assertFalse(layer.dataProvider().isValid()) + + def test_valid_source(self): + with tempfile.TemporaryDirectory() as temp_dir: + tmp_file = os.path.join(temp_dir, 'tileset.json') + with open(tmp_file, 'wt', encoding='utf-8') as f: + f.write(""" +{ + "asset": { + "version": "1.1", + "tilesetVersion": "e575c6f1" + }, + "geometricError": 100, + "root": { + "boundingVolume": { + "region": [ + -1.3197209591796106, + 0.6988424218, + -1.3196390408203893, + 0.6989055782, + 1.2, + 67.00999999999999 + ] + }, + "geometricError": 100, + "refine": "ADD", + "children": [] + } +}""") + + layer = QgsTiledMeshLayer(tmp_file, 'my layer', + 'cesiumtiles') + self.assertTrue(layer.dataProvider().isValid()) + + self.assertEqual(layer.dataProvider().crs(), + QgsCoordinateReferenceSystem('EPSG:4979')) + + self.assertAlmostEqual(layer.dataProvider().extent().xMinimum(), + -75.61444109, 3) + self.assertAlmostEqual(layer.dataProvider().extent().xMaximum(), + -75.60974751, 3) + self.assertAlmostEqual(layer.dataProvider().extent().yMinimum(), + 40.04072131, 3) + self.assertAlmostEqual(layer.dataProvider().extent().yMaximum(), + 40.044339909, 3) + + # check that version, tileset version, and z range are in html metadata + self.assertIn('1.1', layer.dataProvider().htmlMetadata()) + self.assertIn('e575c6f1', layer.dataProvider().htmlMetadata()) + self.assertIn('1.2 - 67.01', layer.dataProvider().htmlMetadata()) + + +if __name__ == '__main__': + unittest.main()