qgis-tem-loader

qgis plugin for loading TEM geophysical inversion XYZ files as 3D objects
git clone git://src.adamsgaard.dk/qgis-tem-loader # fast
git clone https://src.adamsgaard.dk/qgis-tem-loader.git # slow
Log | Files | Refs | README | LICENSE Back to index

commit a6ac690fe36b841cd72f4890cf9438a7dec8920e
parent 3628eeb35b61c226acab8c11e98f730378bf3c30
Author: Anders Damsgaard <anders@adamsgaard.dk>
Date:   Fri, 15 May 2026 23:39:59 +0200

test(qgis): add fake raster layer harness

Diffstat:
Mtest/test_core.py | 46++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+), 0 deletions(-)

diff --git a/test/test_core.py b/test/test_core.py @@ -752,6 +752,30 @@ class PluginTests(unittest.TestCase): self.x = x self.y = y + class FakeRasterDataProvider: + def __init__(self, samples=None): + self.samples = dict(samples or {}) + self.calls = [] + + def sample(self, point, band): + self.calls.append((point, band)) + return self.samples.get((point.x, point.y, band), (math.nan, False)) + + class FakeRasterLayer: + def __init__(self, samples=None, name="DEM", crs=None): + self._provider = FakeRasterDataProvider(samples) + self._name = name + self._crs = crs or FakeCoordinateReferenceSystem("EPSG:3857") + + def crs(self): + return self._crs + + def dataProvider(self): + return self._provider + + def name(self): + return self._name + class FakeLayerGroup: def __init__(self, name): self.name = name @@ -827,6 +851,7 @@ class PluginTests(unittest.TestCase): qgis_core.QgsFields = FakeFields qgis_core.QgsGeometry = FakeGeometry qgis_core.QgsVectorFileWriter = FakeVectorFileWriter + qgis_core.QgsRasterLayer = FakeRasterLayer qgis_gui = types.ModuleType("qgis.gui") qgis_gui.QgsMapLayerComboBox = FakeMapLayerComboBox @@ -844,6 +869,9 @@ class PluginTests(unittest.TestCase): sys.modules.pop("tem_loader.tem_loader", None) module = importlib.import_module("tem_loader.tem_loader") + module.FakeRasterLayer = FakeRasterLayer + module.FakeRasterDataProvider = FakeRasterDataProvider + return module, FakeFileDialog, FakeMessageBox def test_run_continues_after_failed_file_and_shows_filename(self): @@ -1088,6 +1116,24 @@ class PluginTests(unittest.TestCase): raster_layer.crs.assert_called_once_with() raster_layer.dataProvider.assert_called_once_with() + def test_sample_dem_elevation_works_with_fake_raster_layer(self): + module, _, _ = self._import_plugin_module() + raster_layer = module.FakeRasterLayer({(1.5, 2.5, 1): (123.5, True)}) + + elevation = module._sample_dem_elevation( + raster_layer, + module.QgsCoordinateReferenceSystem("EPSG:25832"), + module.QgsProject.instance(), + 1.5, + 2.5, + ) + + self.assertEqual(elevation, 123.5) + self.assertEqual(len(raster_layer.dataProvider().calls), 1) + point, band = raster_layer.dataProvider().calls[0] + self.assertEqual((point.x, point.y), (1.5, 2.5)) + self.assertEqual(band, 1) + def test_sample_dem_elevation_warns_for_invalid_sample(self): module, _, _ = self._import_plugin_module() provider = Mock()