diff --git a/.gitignore b/.gitignore index b4026267..04053a60 100644 --- a/.gitignore +++ b/.gitignore @@ -7,11 +7,9 @@ __pycache__/ /node_modules latest_logs build -/src/tests/tests_output/ *.egg-info .coverage* .mypy_cache *.db -tests/data - +tests/tests_output/ opengeodeweb_viewer_schemas.json \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 28124d6d..065674ac 100644 --- a/requirements.txt +++ b/requirements.txt @@ -61,4 +61,3 @@ wslink==1.12.4 yarl>=1 # via aiohttp -opengeodeweb-microservice==1.*,>=1.0.5 diff --git a/src/opengeodeweb_viewer/vtk_override_protocols.py b/src/opengeodeweb_viewer/vtk_override_protocols.py deleted file mode 100644 index 09a8205a..00000000 --- a/src/opengeodeweb_viewer/vtk_override_protocols.py +++ /dev/null @@ -1,349 +0,0 @@ -import base64, time - -from vtk.web import protocols as vtk_protocols - -# import Twisted reactor for later callback -from twisted.internet import reactor - -# from autobahn.wamp import register as exportRpc -from wslink import register as exportRpc - -# ============================================================================= -# -# Provide publish-based Image delivery mechanism -# -# ============================================================================= - - -class vtkWebPublishImageDelivery(vtk_protocols.vtkWebProtocol): - def __init__(self, decode=True): - super(vtkWebPublishImageDelivery, self).__init__() - self.trackingViews = {} - self.lastStaleTime = 0 - self.staleHandlerCount = 0 - self.deltaStaleTimeBeforeRender = 0.5 # 0.5s - self.decode = decode - self.viewsInAnimations = [] - self.targetFrameRate = 30.0 - self.minFrameRate = 12.0 - self.maxFrameRate = 30.0 - - def pushRender(self, vId, ignoreAnimation=False): - if vId not in self.trackingViews: - return - - if not self.trackingViews[vId]["enabled"]: - return - - if not ignoreAnimation and len(self.viewsInAnimations) > 0: - return - - if "originalSize" not in self.trackingViews[vId]: - view = self.getView(vId) - self.trackingViews[vId]["originalSize"] = list(view.GetSize()) - - if "ratio" not in self.trackingViews[vId]: - self.trackingViews[vId]["ratio"] = 1 - - ratio = self.trackingViews[vId]["ratio"] - mtime = self.trackingViews[vId]["mtime"] - quality = self.trackingViews[vId]["quality"] - size = [int(s * ratio) for s in self.trackingViews[vId]["originalSize"]] - - reply = self.stillRender( - {"view": vId, "mtime": mtime, "quality": quality, "size": size} - ) - stale = reply["stale"] - if reply["image"]: - # depending on whether the app has encoding enabled: - if self.decode: - reply["image"] = base64.standard_b64decode(reply["image"]) - - reply["image"] = self.addAttachment(reply["image"]) - reply["format"] = "jpeg" - # save mtime for next call. - self.trackingViews[vId]["mtime"] = reply["mtime"] - # echo back real ID, instead of -1 for 'active' - reply["id"] = vId - self.publish("viewport.image.push.subscription", reply) - if stale: - self.lastStaleTime = time.time() - if self.staleHandlerCount == 0: - self.staleHandlerCount += 1 - reactor.callLater( - self.deltaStaleTimeBeforeRender, lambda: self.renderStaleImage(vId) - ) - else: - self.lastStaleTime = 0 - - def renderStaleImage(self, vId): - self.staleHandlerCount -= 1 - - if self.lastStaleTime != 0: - delta = time.time() - self.lastStaleTime - if delta >= self.deltaStaleTimeBeforeRender: - self.pushRender(vId) - else: - self.staleHandlerCount += 1 - reactor.callLater( - self.deltaStaleTimeBeforeRender - delta + 0.001, - lambda: self.renderStaleImage(vId), - ) - - def animate(self): - if len(self.viewsInAnimations) == 0: - return - - nextAnimateTime = time.time() + 1.0 / self.targetFrameRate - for vId in self.viewsInAnimations: - self.pushRender(vId, True) - - nextAnimateTime -= time.time() - - if self.targetFrameRate > self.maxFrameRate: - self.targetFrameRate = self.maxFrameRate - - if nextAnimateTime < 0: - if nextAnimateTime < -1.0: - self.targetFrameRate = 1 - if self.targetFrameRate > self.minFrameRate: - self.targetFrameRate -= 1.0 - reactor.callLater(0.001, lambda: self.animate()) - else: - if self.targetFrameRate < self.maxFrameRate and nextAnimateTime > 0.005: - self.targetFrameRate += 1.0 - reactor.callLater(nextAnimateTime, lambda: self.animate()) - - @exportRpc("viewport.image.animation.fps.max") - def setMaxFrameRate(self, fps=30): - self.maxFrameRate = fps - - @exportRpc("viewport.image.animation.fps.get") - def getCurrentFrameRate(self): - return self.targetFrameRate - - @exportRpc("viewport.image.animation.start") - def startViewAnimation(self, viewId="-1"): - sView = self.getView(viewId) - realViewId = str(self.getGlobalId(sView)) - - self.viewsInAnimations.append(realViewId) - if len(self.viewsInAnimations) == 1: - self.animate() - - @exportRpc("viewport.image.animation.stop") - def stopViewAnimation(self, viewId="-1"): - sView = self.getView(viewId) - realViewId = str(self.getGlobalId(sView)) - - if realViewId in self.viewsInAnimations: - self.viewsInAnimations.remove(realViewId) - - @exportRpc("viewport.image.push") - def imagePush(self, options): - sView = self.getView(options["view"]) - realViewId = str(self.getGlobalId(sView)) - # Make sure an image is pushed - self.getApplication().InvalidateCache(sView) - self.pushRender(realViewId) - - # Internal function since the reply[image] is not - # JSON(serializable) it can not be an RPC one - def stillRender(self, options): - """ - RPC Callback to render a view and obtain the rendered image. - """ - beginTime = int(round(time.time() * 1000)) - view = self.getView(options["view"]) - size = view.GetSize()[0:2] - resize = size != options.get("size", size) - if resize: - size = options["size"] - if size[0] > 10 and size[1] > 10: - view.SetSize(size) - t = 0 - if options and "mtime" in options: - t = options["mtime"] - quality = 100 - if options and "quality" in options: - quality = options["quality"] - localTime = 0 - if options and "localTime" in options: - localTime = options["localTime"] - reply = {} - app = self.getApplication() - if t == 0: - app.InvalidateCache(view) - if self.decode: - stillRender = app.StillRenderToString - else: - stillRender = app.StillRenderToBuffer - reply_image = stillRender(view, t, quality) - - # Check that we are getting image size we have set if not wait until we - # do. The render call will set the actual window size. - tries = 10 - while resize and list(view.GetSize()) != size and size != [0, 0] and tries > 0: - app.InvalidateCache(view) - reply_image = stillRender(view, t, quality) - tries -= 1 - - if ( - not resize - and options - and ("clearCache" in options) - and options["clearCache"] - ): - app.InvalidateCache(view) - reply_image = stillRender(view, t, quality) - - reply["stale"] = app.GetHasImagesBeingProcessed(view) - reply["mtime"] = app.GetLastStillRenderToMTime() - reply["size"] = view.GetSize()[0:2] - reply["memsize"] = reply_image.GetDataSize() if reply_image else 0 - reply["format"] = "jpeg;base64" if self.decode else "jpeg" - reply["global_id"] = str(self.getGlobalId(view)) - reply["localTime"] = localTime - if self.decode: - reply["image"] = reply_image - else: - # Convert the vtkUnsignedCharArray into a bytes object, required by Autobahn websockets - reply["image"] = memoryview(reply_image).tobytes() if reply_image else None - - endTime = int(round(time.time() * 1000)) - reply["workTime"] = endTime - beginTime - - return reply - - @exportRpc("viewport.image.push.observer.add") - def addRenderObserver(self, viewId): - sView = self.getView(viewId) - if not sView: - return {"error": "Unable to get view with id %s" % viewId} - - realViewId = str(self.getGlobalId(sView)) - - if not realViewId in self.trackingViews: - observerCallback = lambda *args, **kwargs: self.pushRender(realViewId) - startCallback = lambda *args, **kwargs: self.startViewAnimation(realViewId) - stopCallback = lambda *args, **kwargs: self.stopViewAnimation(realViewId) - tag = self.getApplication().AddObserver("UpdateEvent", observerCallback) - tagStart = self.getApplication().AddObserver( - "StartInteractionEvent", startCallback - ) - tagStop = self.getApplication().AddObserver( - "EndInteractionEvent", stopCallback - ) - # TODO do we need self.getApplication().AddObserver('ResetActiveView', resetActiveView()) - self.trackingViews[realViewId] = { - "tags": [tag, tagStart, tagStop], - "observerCount": 1, - "mtime": 0, - "enabled": True, - "quality": 100, - } - else: - # There is an observer on this view already - self.trackingViews[realViewId]["observerCount"] += 1 - - self.pushRender(realViewId) - return {"success": True, "viewId": realViewId} - - @exportRpc("viewport.image.push.observer.remove") - def removeRenderObserver(self, viewId): - sView = self.getView(viewId) - if not sView: - return {"error": "Unable to get view with id %s" % viewId} - - realViewId = str(self.getGlobalId(sView)) - - observerInfo = None - if realViewId in self.trackingViews: - observerInfo = self.trackingViews[realViewId] - - if not observerInfo: - return {"error": "Unable to find subscription for view %s" % realViewId} - - observerInfo["observerCount"] -= 1 - - if observerInfo["observerCount"] <= 0: - for tag in observerInfo["tags"]: - self.getApplication().RemoveObserver(tag) - del self.trackingViews[realViewId] - - return {"result": "success"} - - @exportRpc("viewport.image.push.quality") - def setViewQuality(self, viewId, quality, ratio=1): - sView = self.getView(viewId) - if not sView: - return {"error": "Unable to get view with id %s" % viewId} - - realViewId = str(self.getGlobalId(sView)) - observerInfo = None - if realViewId in self.trackingViews: - observerInfo = self.trackingViews[realViewId] - - if not observerInfo: - return {"error": "Unable to find subscription for view %s" % realViewId} - - observerInfo["quality"] = quality - observerInfo["ratio"] = ratio - - # Update image size right now! - if "originalSize" in self.trackingViews[realViewId]: - size = [ - int(s * ratio) for s in self.trackingViews[realViewId]["originalSize"] - ] - if hasattr(sView, "SetSize"): - sView.SetSize(size) - else: - sView.ViewSize = size - - return {"result": "success"} - - @exportRpc("viewport.image.push.original.size") - def setViewSize(self, viewId, width, height): - sView = self.getView(viewId) - if not sView: - return {"error": "Unable to get view with id %s" % viewId} - - realViewId = str(self.getGlobalId(sView)) - observerInfo = None - if realViewId in self.trackingViews: - observerInfo = self.trackingViews[realViewId] - - if not observerInfo: - return {"error": "Unable to find subscription for view %s" % realViewId} - - observerInfo["originalSize"] = [width, height] - - return {"result": "success"} - - @exportRpc("viewport.image.push.enabled") - def enableView(self, viewId, enabled): - sView = self.getView(viewId) - if not sView: - return {"error": "Unable to get view with id %s" % viewId} - - realViewId = str(self.getGlobalId(sView)) - observerInfo = None - if realViewId in self.trackingViews: - observerInfo = self.trackingViews[realViewId] - - if not observerInfo: - return {"error": "Unable to find subscription for view %s" % realViewId} - - observerInfo["enabled"] = enabled - - return {"result": "success"} - - @exportRpc("viewport.image.push.invalidate.cache") - def invalidateCache(self, viewId): - sView = self.getView(viewId) - if not sView: - return {"error": "Unable to get view with id %s" % viewId} - - self.getApplication().InvalidateCache(sView) - self.getApplication().InvokeEvent("UpdateEvent") - return {"result": "success"} diff --git a/src/tests/__init__.py b/tests/__init__.py similarity index 100% rename from src/tests/__init__.py rename to tests/__init__.py diff --git a/src/tests/conftest.py b/tests/conftest.py similarity index 100% rename from src/tests/conftest.py rename to tests/conftest.py diff --git a/src/tests/data/CrossSection.vtm b/tests/data/CrossSection.vtm similarity index 100% rename from src/tests/data/CrossSection.vtm rename to tests/data/CrossSection.vtm diff --git a/src/tests/data/CrossSection/Corner_00000000-054b-4eb1-8000-0000b351de2c.vtp b/tests/data/CrossSection/Corner_00000000-054b-4eb1-8000-0000b351de2c.vtp similarity index 100% rename from src/tests/data/CrossSection/Corner_00000000-054b-4eb1-8000-0000b351de2c.vtp rename to tests/data/CrossSection/Corner_00000000-054b-4eb1-8000-0000b351de2c.vtp diff --git a/src/tests/data/CrossSection/Corner_00000000-1a02-45a2-8000-0000247024f4.vtp b/tests/data/CrossSection/Corner_00000000-1a02-45a2-8000-0000247024f4.vtp similarity index 100% rename from src/tests/data/CrossSection/Corner_00000000-1a02-45a2-8000-0000247024f4.vtp rename to tests/data/CrossSection/Corner_00000000-1a02-45a2-8000-0000247024f4.vtp diff --git a/src/tests/data/CrossSection/Corner_00000000-3dd3-4c0c-8000-0000ed24e132.vtp b/tests/data/CrossSection/Corner_00000000-3dd3-4c0c-8000-0000ed24e132.vtp similarity index 100% rename from src/tests/data/CrossSection/Corner_00000000-3dd3-4c0c-8000-0000ed24e132.vtp rename to tests/data/CrossSection/Corner_00000000-3dd3-4c0c-8000-0000ed24e132.vtp diff --git a/src/tests/data/CrossSection/Corner_00000000-9655-449f-8000-000006885621.vtp b/tests/data/CrossSection/Corner_00000000-9655-449f-8000-000006885621.vtp similarity index 100% rename from src/tests/data/CrossSection/Corner_00000000-9655-449f-8000-000006885621.vtp rename to tests/data/CrossSection/Corner_00000000-9655-449f-8000-000006885621.vtp diff --git a/src/tests/data/CrossSection/Corner_00000000-a61f-4b8c-8000-00001ba48a80.vtp b/tests/data/CrossSection/Corner_00000000-a61f-4b8c-8000-00001ba48a80.vtp similarity index 100% rename from src/tests/data/CrossSection/Corner_00000000-a61f-4b8c-8000-00001ba48a80.vtp rename to tests/data/CrossSection/Corner_00000000-a61f-4b8c-8000-00001ba48a80.vtp diff --git a/src/tests/data/CrossSection/Corner_00000000-ab98-49bf-8000-0000d2111233.vtp b/tests/data/CrossSection/Corner_00000000-ab98-49bf-8000-0000d2111233.vtp similarity index 100% rename from src/tests/data/CrossSection/Corner_00000000-ab98-49bf-8000-0000d2111233.vtp rename to tests/data/CrossSection/Corner_00000000-ab98-49bf-8000-0000d2111233.vtp diff --git a/src/tests/data/CrossSection/Line_00000000-00c7-4cbd-8000-00002888c528.vtp b/tests/data/CrossSection/Line_00000000-00c7-4cbd-8000-00002888c528.vtp similarity index 100% rename from src/tests/data/CrossSection/Line_00000000-00c7-4cbd-8000-00002888c528.vtp rename to tests/data/CrossSection/Line_00000000-00c7-4cbd-8000-00002888c528.vtp diff --git a/src/tests/data/CrossSection/Line_00000000-5800-40ae-8000-00008671fc57.vtp b/tests/data/CrossSection/Line_00000000-5800-40ae-8000-00008671fc57.vtp similarity index 100% rename from src/tests/data/CrossSection/Line_00000000-5800-40ae-8000-00008671fc57.vtp rename to tests/data/CrossSection/Line_00000000-5800-40ae-8000-00008671fc57.vtp diff --git a/src/tests/data/CrossSection/Line_00000000-898c-47ff-8000-0000a5f2b19e.vtp b/tests/data/CrossSection/Line_00000000-898c-47ff-8000-0000a5f2b19e.vtp similarity index 100% rename from src/tests/data/CrossSection/Line_00000000-898c-47ff-8000-0000a5f2b19e.vtp rename to tests/data/CrossSection/Line_00000000-898c-47ff-8000-0000a5f2b19e.vtp diff --git a/src/tests/data/CrossSection/Line_00000000-be29-45fb-8000-000036904028.vtp b/tests/data/CrossSection/Line_00000000-be29-45fb-8000-000036904028.vtp similarity index 100% rename from src/tests/data/CrossSection/Line_00000000-be29-45fb-8000-000036904028.vtp rename to tests/data/CrossSection/Line_00000000-be29-45fb-8000-000036904028.vtp diff --git a/src/tests/data/CrossSection/Line_00000000-c4af-4187-8000-00004fd7d673.vtp b/tests/data/CrossSection/Line_00000000-c4af-4187-8000-00004fd7d673.vtp similarity index 100% rename from src/tests/data/CrossSection/Line_00000000-c4af-4187-8000-00004fd7d673.vtp rename to tests/data/CrossSection/Line_00000000-c4af-4187-8000-00004fd7d673.vtp diff --git a/src/tests/data/CrossSection/Line_00000000-eef0-4e70-8000-0000d39ca40d.vtp b/tests/data/CrossSection/Line_00000000-eef0-4e70-8000-0000d39ca40d.vtp similarity index 100% rename from src/tests/data/CrossSection/Line_00000000-eef0-4e70-8000-0000d39ca40d.vtp rename to tests/data/CrossSection/Line_00000000-eef0-4e70-8000-0000d39ca40d.vtp diff --git a/src/tests/data/CrossSection/Line_00000000-f0b7-4f93-8000-000061178f38.vtp b/tests/data/CrossSection/Line_00000000-f0b7-4f93-8000-000061178f38.vtp similarity index 100% rename from src/tests/data/CrossSection/Line_00000000-f0b7-4f93-8000-000061178f38.vtp rename to tests/data/CrossSection/Line_00000000-f0b7-4f93-8000-000061178f38.vtp diff --git a/src/tests/data/CrossSection/Line_00000000-f3c7-4f58-8000-00002d5cbee6.vtp b/tests/data/CrossSection/Line_00000000-f3c7-4f58-8000-00002d5cbee6.vtp similarity index 100% rename from src/tests/data/CrossSection/Line_00000000-f3c7-4f58-8000-00002d5cbee6.vtp rename to tests/data/CrossSection/Line_00000000-f3c7-4f58-8000-00002d5cbee6.vtp diff --git a/src/tests/data/CrossSection/Surface_00000000-2329-4cf6-8000-0000f98922e7.vtp b/tests/data/CrossSection/Surface_00000000-2329-4cf6-8000-0000f98922e7.vtp similarity index 100% rename from src/tests/data/CrossSection/Surface_00000000-2329-4cf6-8000-0000f98922e7.vtp rename to tests/data/CrossSection/Surface_00000000-2329-4cf6-8000-0000f98922e7.vtp diff --git a/src/tests/data/CrossSection/Surface_00000000-c4b6-47e6-8000-0000a9040e04.vtp b/tests/data/CrossSection/Surface_00000000-c4b6-47e6-8000-0000a9040e04.vtp similarity index 100% rename from src/tests/data/CrossSection/Surface_00000000-c4b6-47e6-8000-0000a9040e04.vtp rename to tests/data/CrossSection/Surface_00000000-c4b6-47e6-8000-0000a9040e04.vtp diff --git a/src/tests/data/CrossSection/Surface_00000000-e7bf-47ac-8000-00006f6e7f4f.vtp b/tests/data/CrossSection/Surface_00000000-e7bf-47ac-8000-00006f6e7f4f.vtp similarity index 100% rename from src/tests/data/CrossSection/Surface_00000000-e7bf-47ac-8000-00006f6e7f4f.vtp rename to tests/data/CrossSection/Surface_00000000-e7bf-47ac-8000-00006f6e7f4f.vtp diff --git a/src/tests/data/cube.vtm b/tests/data/cube.vtm similarity index 100% rename from src/tests/data/cube.vtm rename to tests/data/cube.vtm diff --git a/src/tests/data/cube/Block_00000000-424a-4c63-8000-0000a002edd2.vtu b/tests/data/cube/Block_00000000-424a-4c63-8000-0000a002edd2.vtu similarity index 100% rename from src/tests/data/cube/Block_00000000-424a-4c63-8000-0000a002edd2.vtu rename to tests/data/cube/Block_00000000-424a-4c63-8000-0000a002edd2.vtu diff --git a/src/tests/data/cube/Block_00000000-5a1c-4948-8000-0000e182eaeb.vtu b/tests/data/cube/Block_00000000-5a1c-4948-8000-0000e182eaeb.vtu similarity index 100% rename from src/tests/data/cube/Block_00000000-5a1c-4948-8000-0000e182eaeb.vtu rename to tests/data/cube/Block_00000000-5a1c-4948-8000-0000e182eaeb.vtu diff --git a/src/tests/data/cube/Corner_00000000-0f78-4b81-8000-000033fca81e.vtp b/tests/data/cube/Corner_00000000-0f78-4b81-8000-000033fca81e.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-0f78-4b81-8000-000033fca81e.vtp rename to tests/data/cube/Corner_00000000-0f78-4b81-8000-000033fca81e.vtp diff --git a/src/tests/data/cube/Corner_00000000-1ded-48e6-8000-0000d85a8662.vtp b/tests/data/cube/Corner_00000000-1ded-48e6-8000-0000d85a8662.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-1ded-48e6-8000-0000d85a8662.vtp rename to tests/data/cube/Corner_00000000-1ded-48e6-8000-0000d85a8662.vtp diff --git a/src/tests/data/cube/Corner_00000000-1e51-466a-8000-0000be50b697.vtp b/tests/data/cube/Corner_00000000-1e51-466a-8000-0000be50b697.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-1e51-466a-8000-0000be50b697.vtp rename to tests/data/cube/Corner_00000000-1e51-466a-8000-0000be50b697.vtp diff --git a/src/tests/data/cube/Corner_00000000-3153-47da-8000-0000291b0bf7.vtp b/tests/data/cube/Corner_00000000-3153-47da-8000-0000291b0bf7.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-3153-47da-8000-0000291b0bf7.vtp rename to tests/data/cube/Corner_00000000-3153-47da-8000-0000291b0bf7.vtp diff --git a/src/tests/data/cube/Corner_00000000-3182-4037-8000-00007cf88fc7.vtp b/tests/data/cube/Corner_00000000-3182-4037-8000-00007cf88fc7.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-3182-4037-8000-00007cf88fc7.vtp rename to tests/data/cube/Corner_00000000-3182-4037-8000-00007cf88fc7.vtp diff --git a/src/tests/data/cube/Corner_00000000-844f-4164-8000-00008a0ab00b.vtp b/tests/data/cube/Corner_00000000-844f-4164-8000-00008a0ab00b.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-844f-4164-8000-00008a0ab00b.vtp rename to tests/data/cube/Corner_00000000-844f-4164-8000-00008a0ab00b.vtp diff --git a/src/tests/data/cube/Corner_00000000-9247-49ea-8000-000042150516.vtp b/tests/data/cube/Corner_00000000-9247-49ea-8000-000042150516.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-9247-49ea-8000-000042150516.vtp rename to tests/data/cube/Corner_00000000-9247-49ea-8000-000042150516.vtp diff --git a/src/tests/data/cube/Corner_00000000-c1dd-4589-8000-0000060127b6.vtp b/tests/data/cube/Corner_00000000-c1dd-4589-8000-0000060127b6.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-c1dd-4589-8000-0000060127b6.vtp rename to tests/data/cube/Corner_00000000-c1dd-4589-8000-0000060127b6.vtp diff --git a/src/tests/data/cube/Corner_00000000-c88d-4503-8000-0000c3468d3c.vtp b/tests/data/cube/Corner_00000000-c88d-4503-8000-0000c3468d3c.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-c88d-4503-8000-0000c3468d3c.vtp rename to tests/data/cube/Corner_00000000-c88d-4503-8000-0000c3468d3c.vtp diff --git a/src/tests/data/cube/Corner_00000000-e6c2-4162-8000-0000fb6c4986.vtp b/tests/data/cube/Corner_00000000-e6c2-4162-8000-0000fb6c4986.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-e6c2-4162-8000-0000fb6c4986.vtp rename to tests/data/cube/Corner_00000000-e6c2-4162-8000-0000fb6c4986.vtp diff --git a/src/tests/data/cube/Corner_00000000-e906-4183-8000-000012b667a1.vtp b/tests/data/cube/Corner_00000000-e906-4183-8000-000012b667a1.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-e906-4183-8000-000012b667a1.vtp rename to tests/data/cube/Corner_00000000-e906-4183-8000-000012b667a1.vtp diff --git a/src/tests/data/cube/Corner_00000000-fa9f-4fb5-8000-0000e20d9e81.vtp b/tests/data/cube/Corner_00000000-fa9f-4fb5-8000-0000e20d9e81.vtp similarity index 100% rename from src/tests/data/cube/Corner_00000000-fa9f-4fb5-8000-0000e20d9e81.vtp rename to tests/data/cube/Corner_00000000-fa9f-4fb5-8000-0000e20d9e81.vtp diff --git a/src/tests/data/cube/Line_00000000-00ee-4599-8000-000066f9bd67.vtp b/tests/data/cube/Line_00000000-00ee-4599-8000-000066f9bd67.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-00ee-4599-8000-000066f9bd67.vtp rename to tests/data/cube/Line_00000000-00ee-4599-8000-000066f9bd67.vtp diff --git a/src/tests/data/cube/Line_00000000-0166-4808-8000-0000390b1b36.vtp b/tests/data/cube/Line_00000000-0166-4808-8000-0000390b1b36.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-0166-4808-8000-0000390b1b36.vtp rename to tests/data/cube/Line_00000000-0166-4808-8000-0000390b1b36.vtp diff --git a/src/tests/data/cube/Line_00000000-13bc-471d-8000-00000e11c7ad.vtp b/tests/data/cube/Line_00000000-13bc-471d-8000-00000e11c7ad.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-13bc-471d-8000-00000e11c7ad.vtp rename to tests/data/cube/Line_00000000-13bc-471d-8000-00000e11c7ad.vtp diff --git a/src/tests/data/cube/Line_00000000-1744-469f-8000-00007e214117.vtp b/tests/data/cube/Line_00000000-1744-469f-8000-00007e214117.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-1744-469f-8000-00007e214117.vtp rename to tests/data/cube/Line_00000000-1744-469f-8000-00007e214117.vtp diff --git a/src/tests/data/cube/Line_00000000-30f9-43ec-8000-0000ce418e93.vtp b/tests/data/cube/Line_00000000-30f9-43ec-8000-0000ce418e93.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-30f9-43ec-8000-0000ce418e93.vtp rename to tests/data/cube/Line_00000000-30f9-43ec-8000-0000ce418e93.vtp diff --git a/src/tests/data/cube/Line_00000000-3189-4590-8000-0000f1535b82.vtp b/tests/data/cube/Line_00000000-3189-4590-8000-0000f1535b82.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-3189-4590-8000-0000f1535b82.vtp rename to tests/data/cube/Line_00000000-3189-4590-8000-0000f1535b82.vtp diff --git a/src/tests/data/cube/Line_00000000-4720-43e1-8000-00003fb94879.vtp b/tests/data/cube/Line_00000000-4720-43e1-8000-00003fb94879.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-4720-43e1-8000-00003fb94879.vtp rename to tests/data/cube/Line_00000000-4720-43e1-8000-00003fb94879.vtp diff --git a/src/tests/data/cube/Line_00000000-4ad0-406a-8000-0000b3688e4f.vtp b/tests/data/cube/Line_00000000-4ad0-406a-8000-0000b3688e4f.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-4ad0-406a-8000-0000b3688e4f.vtp rename to tests/data/cube/Line_00000000-4ad0-406a-8000-0000b3688e4f.vtp diff --git a/src/tests/data/cube/Line_00000000-57a7-45c5-8000-000074853b1a.vtp b/tests/data/cube/Line_00000000-57a7-45c5-8000-000074853b1a.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-57a7-45c5-8000-000074853b1a.vtp rename to tests/data/cube/Line_00000000-57a7-45c5-8000-000074853b1a.vtp diff --git a/src/tests/data/cube/Line_00000000-64f7-423c-8000-000091174d24.vtp b/tests/data/cube/Line_00000000-64f7-423c-8000-000091174d24.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-64f7-423c-8000-000091174d24.vtp rename to tests/data/cube/Line_00000000-64f7-423c-8000-000091174d24.vtp diff --git a/src/tests/data/cube/Line_00000000-6ab5-4cf7-8000-0000070cb773.vtp b/tests/data/cube/Line_00000000-6ab5-4cf7-8000-0000070cb773.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-6ab5-4cf7-8000-0000070cb773.vtp rename to tests/data/cube/Line_00000000-6ab5-4cf7-8000-0000070cb773.vtp diff --git a/src/tests/data/cube/Line_00000000-6d4f-4d94-8000-0000db80bb99.vtp b/tests/data/cube/Line_00000000-6d4f-4d94-8000-0000db80bb99.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-6d4f-4d94-8000-0000db80bb99.vtp rename to tests/data/cube/Line_00000000-6d4f-4d94-8000-0000db80bb99.vtp diff --git a/src/tests/data/cube/Line_00000000-80fb-4f74-8000-000089d20921.vtp b/tests/data/cube/Line_00000000-80fb-4f74-8000-000089d20921.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-80fb-4f74-8000-000089d20921.vtp rename to tests/data/cube/Line_00000000-80fb-4f74-8000-000089d20921.vtp diff --git a/src/tests/data/cube/Line_00000000-8fcc-4c7e-8000-00003f895b0f.vtp b/tests/data/cube/Line_00000000-8fcc-4c7e-8000-00003f895b0f.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-8fcc-4c7e-8000-00003f895b0f.vtp rename to tests/data/cube/Line_00000000-8fcc-4c7e-8000-00003f895b0f.vtp diff --git a/src/tests/data/cube/Line_00000000-a14e-4e44-8000-000055a5ccda.vtp b/tests/data/cube/Line_00000000-a14e-4e44-8000-000055a5ccda.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-a14e-4e44-8000-000055a5ccda.vtp rename to tests/data/cube/Line_00000000-a14e-4e44-8000-000055a5ccda.vtp diff --git a/src/tests/data/cube/Line_00000000-a3de-4f0b-8000-000026063086.vtp b/tests/data/cube/Line_00000000-a3de-4f0b-8000-000026063086.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-a3de-4f0b-8000-000026063086.vtp rename to tests/data/cube/Line_00000000-a3de-4f0b-8000-000026063086.vtp diff --git a/src/tests/data/cube/Line_00000000-bbc1-456c-8000-000093f52d1f.vtp b/tests/data/cube/Line_00000000-bbc1-456c-8000-000093f52d1f.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-bbc1-456c-8000-000093f52d1f.vtp rename to tests/data/cube/Line_00000000-bbc1-456c-8000-000093f52d1f.vtp diff --git a/src/tests/data/cube/Line_00000000-d368-4dbb-8000-00007ba8829b.vtp b/tests/data/cube/Line_00000000-d368-4dbb-8000-00007ba8829b.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-d368-4dbb-8000-00007ba8829b.vtp rename to tests/data/cube/Line_00000000-d368-4dbb-8000-00007ba8829b.vtp diff --git a/src/tests/data/cube/Line_00000000-e1ab-4b51-8000-00007c91ab75.vtp b/tests/data/cube/Line_00000000-e1ab-4b51-8000-00007c91ab75.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-e1ab-4b51-8000-00007c91ab75.vtp rename to tests/data/cube/Line_00000000-e1ab-4b51-8000-00007c91ab75.vtp diff --git a/src/tests/data/cube/Line_00000000-f08c-4eb3-8000-0000ed5aa85f.vtp b/tests/data/cube/Line_00000000-f08c-4eb3-8000-0000ed5aa85f.vtp similarity index 100% rename from src/tests/data/cube/Line_00000000-f08c-4eb3-8000-0000ed5aa85f.vtp rename to tests/data/cube/Line_00000000-f08c-4eb3-8000-0000ed5aa85f.vtp diff --git a/src/tests/data/cube/Surface_00000000-0069-4b43-8000-0000f2ae1337.vtp b/tests/data/cube/Surface_00000000-0069-4b43-8000-0000f2ae1337.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-0069-4b43-8000-0000f2ae1337.vtp rename to tests/data/cube/Surface_00000000-0069-4b43-8000-0000f2ae1337.vtp diff --git a/src/tests/data/cube/Surface_00000000-02b1-4f4c-8000-000016b60c49.vtp b/tests/data/cube/Surface_00000000-02b1-4f4c-8000-000016b60c49.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-02b1-4f4c-8000-000016b60c49.vtp rename to tests/data/cube/Surface_00000000-02b1-4f4c-8000-000016b60c49.vtp diff --git a/src/tests/data/cube/Surface_00000000-0759-4249-8000-0000243598ab.vtp b/tests/data/cube/Surface_00000000-0759-4249-8000-0000243598ab.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-0759-4249-8000-0000243598ab.vtp rename to tests/data/cube/Surface_00000000-0759-4249-8000-0000243598ab.vtp diff --git a/src/tests/data/cube/Surface_00000000-2816-4509-8000-00005b1705a7.vtp b/tests/data/cube/Surface_00000000-2816-4509-8000-00005b1705a7.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-2816-4509-8000-00005b1705a7.vtp rename to tests/data/cube/Surface_00000000-2816-4509-8000-00005b1705a7.vtp diff --git a/src/tests/data/cube/Surface_00000000-3ea7-4822-8000-00005386b514.vtp b/tests/data/cube/Surface_00000000-3ea7-4822-8000-00005386b514.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-3ea7-4822-8000-00005386b514.vtp rename to tests/data/cube/Surface_00000000-3ea7-4822-8000-00005386b514.vtp diff --git a/src/tests/data/cube/Surface_00000000-5c26-4027-8000-0000bbb0481d.vtp b/tests/data/cube/Surface_00000000-5c26-4027-8000-0000bbb0481d.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-5c26-4027-8000-0000bbb0481d.vtp rename to tests/data/cube/Surface_00000000-5c26-4027-8000-0000bbb0481d.vtp diff --git a/src/tests/data/cube/Surface_00000000-6482-4171-8000-0000a5e13a81.vtp b/tests/data/cube/Surface_00000000-6482-4171-8000-0000a5e13a81.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-6482-4171-8000-0000a5e13a81.vtp rename to tests/data/cube/Surface_00000000-6482-4171-8000-0000a5e13a81.vtp diff --git a/src/tests/data/cube/Surface_00000000-7a5a-4c72-8000-0000807ef000.vtp b/tests/data/cube/Surface_00000000-7a5a-4c72-8000-0000807ef000.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-7a5a-4c72-8000-0000807ef000.vtp rename to tests/data/cube/Surface_00000000-7a5a-4c72-8000-0000807ef000.vtp diff --git a/src/tests/data/cube/Surface_00000000-9c41-4942-8000-000066156e69.vtp b/tests/data/cube/Surface_00000000-9c41-4942-8000-000066156e69.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-9c41-4942-8000-000066156e69.vtp rename to tests/data/cube/Surface_00000000-9c41-4942-8000-000066156e69.vtp diff --git a/src/tests/data/cube/Surface_00000000-a67c-41f3-8000-0000f1829f04.vtp b/tests/data/cube/Surface_00000000-a67c-41f3-8000-0000f1829f04.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-a67c-41f3-8000-0000f1829f04.vtp rename to tests/data/cube/Surface_00000000-a67c-41f3-8000-0000f1829f04.vtp diff --git a/src/tests/data/cube/Surface_00000000-e250-470d-8000-00006a6de472.vtp b/tests/data/cube/Surface_00000000-e250-470d-8000-00006a6de472.vtp similarity index 100% rename from src/tests/data/cube/Surface_00000000-e250-470d-8000-00006a6de472.vtp rename to tests/data/cube/Surface_00000000-e250-470d-8000-00006a6de472.vtp diff --git a/src/tests/data/edged_curve.vtp b/tests/data/edged_curve.vtp similarity index 100% rename from src/tests/data/edged_curve.vtp rename to tests/data/edged_curve.vtp diff --git a/src/tests/data/hat.vtp b/tests/data/hat.vtp similarity index 100% rename from src/tests/data/hat.vtp rename to tests/data/hat.vtp diff --git a/src/tests/data/hat_lambert2SG.vti b/tests/data/hat_lambert2SG.vti similarity index 100% rename from src/tests/data/hat_lambert2SG.vti rename to tests/data/hat_lambert2SG.vti diff --git a/src/tests/data/hybrid_solid.vtu b/tests/data/hybrid_solid.vtu similarity index 100% rename from src/tests/data/hybrid_solid.vtu rename to tests/data/hybrid_solid.vtu diff --git a/src/tests/data/images/mesh/apply_textures.jpeg b/tests/data/images/mesh/apply_textures.jpeg similarity index 100% rename from src/tests/data/images/mesh/apply_textures.jpeg rename to tests/data/images/mesh/apply_textures.jpeg diff --git a/src/tests/data/images/mesh/color.jpeg b/tests/data/images/mesh/color.jpeg similarity index 100% rename from src/tests/data/images/mesh/color.jpeg rename to tests/data/images/mesh/color.jpeg diff --git a/src/tests/data/images/mesh/deregister.jpeg b/tests/data/images/mesh/deregister.jpeg similarity index 100% rename from src/tests/data/images/mesh/deregister.jpeg rename to tests/data/images/mesh/deregister.jpeg diff --git a/src/tests/data/images/mesh/edges/color.jpeg b/tests/data/images/mesh/edges/color.jpeg similarity index 100% rename from src/tests/data/images/mesh/edges/color.jpeg rename to tests/data/images/mesh/edges/color.jpeg diff --git a/src/tests/data/images/mesh/edges/edged_curve_color.jpeg b/tests/data/images/mesh/edges/edged_curve_color.jpeg similarity index 100% rename from src/tests/data/images/mesh/edges/edged_curve_color.jpeg rename to tests/data/images/mesh/edges/edged_curve_color.jpeg diff --git a/src/tests/data/images/mesh/edges/edged_curve_visibility.jpeg b/tests/data/images/mesh/edges/edged_curve_visibility.jpeg similarity index 100% rename from src/tests/data/images/mesh/edges/edged_curve_visibility.jpeg rename to tests/data/images/mesh/edges/edged_curve_visibility.jpeg diff --git a/src/tests/data/images/mesh/edges/register_edged_curve.jpeg b/tests/data/images/mesh/edges/register_edged_curve.jpeg similarity index 100% rename from src/tests/data/images/mesh/edges/register_edged_curve.jpeg rename to tests/data/images/mesh/edges/register_edged_curve.jpeg diff --git a/src/tests/data/images/mesh/edges/visibility.jpeg b/tests/data/images/mesh/edges/visibility.jpeg similarity index 100% rename from src/tests/data/images/mesh/edges/visibility.jpeg rename to tests/data/images/mesh/edges/visibility.jpeg diff --git a/src/tests/data/images/mesh/opacity.jpeg b/tests/data/images/mesh/opacity.jpeg similarity index 100% rename from src/tests/data/images/mesh/opacity.jpeg rename to tests/data/images/mesh/opacity.jpeg diff --git a/src/tests/data/images/mesh/points/color.jpeg b/tests/data/images/mesh/points/color.jpeg similarity index 100% rename from src/tests/data/images/mesh/points/color.jpeg rename to tests/data/images/mesh/points/color.jpeg diff --git a/src/tests/data/images/mesh/points/point_set_color.jpeg b/tests/data/images/mesh/points/point_set_color.jpeg similarity index 100% rename from src/tests/data/images/mesh/points/point_set_color.jpeg rename to tests/data/images/mesh/points/point_set_color.jpeg diff --git a/src/tests/data/images/mesh/points/point_set_size.jpeg b/tests/data/images/mesh/points/point_set_size.jpeg similarity index 100% rename from src/tests/data/images/mesh/points/point_set_size.jpeg rename to tests/data/images/mesh/points/point_set_size.jpeg diff --git a/src/tests/data/images/mesh/points/point_set_visibility.jpeg b/tests/data/images/mesh/points/point_set_visibility.jpeg similarity index 100% rename from src/tests/data/images/mesh/points/point_set_visibility.jpeg rename to tests/data/images/mesh/points/point_set_visibility.jpeg diff --git a/src/tests/data/images/mesh/points/register_point_set.jpeg b/tests/data/images/mesh/points/register_point_set.jpeg similarity index 100% rename from src/tests/data/images/mesh/points/register_point_set.jpeg rename to tests/data/images/mesh/points/register_point_set.jpeg diff --git a/src/tests/data/images/mesh/points/size.jpeg b/tests/data/images/mesh/points/size.jpeg similarity index 100% rename from src/tests/data/images/mesh/points/size.jpeg rename to tests/data/images/mesh/points/size.jpeg diff --git a/src/tests/data/images/mesh/points/visibility.jpeg b/tests/data/images/mesh/points/visibility.jpeg similarity index 100% rename from src/tests/data/images/mesh/points/visibility.jpeg rename to tests/data/images/mesh/points/visibility.jpeg diff --git a/src/tests/data/images/mesh/polygons/color.jpeg b/tests/data/images/mesh/polygons/color.jpeg similarity index 100% rename from src/tests/data/images/mesh/polygons/color.jpeg rename to tests/data/images/mesh/polygons/color.jpeg diff --git a/src/tests/data/images/mesh/polygons/visibility.jpeg b/tests/data/images/mesh/polygons/visibility.jpeg similarity index 100% rename from src/tests/data/images/mesh/polygons/visibility.jpeg rename to tests/data/images/mesh/polygons/visibility.jpeg diff --git a/src/tests/data/images/mesh/polyhedra/color.jpeg b/tests/data/images/mesh/polyhedra/color.jpeg similarity index 100% rename from src/tests/data/images/mesh/polyhedra/color.jpeg rename to tests/data/images/mesh/polyhedra/color.jpeg diff --git a/src/tests/data/images/mesh/polyhedra/polyhedron_attribute.jpeg b/tests/data/images/mesh/polyhedra/polyhedron_attribute.jpeg similarity index 100% rename from src/tests/data/images/mesh/polyhedra/polyhedron_attribute.jpeg rename to tests/data/images/mesh/polyhedra/polyhedron_attribute.jpeg diff --git a/src/tests/data/images/mesh/polyhedra/register.jpeg b/tests/data/images/mesh/polyhedra/register.jpeg similarity index 100% rename from src/tests/data/images/mesh/polyhedra/register.jpeg rename to tests/data/images/mesh/polyhedra/register.jpeg diff --git a/src/tests/data/images/mesh/polyhedra/vertex_attribute.jpeg b/tests/data/images/mesh/polyhedra/vertex_attribute.jpeg similarity index 100% rename from src/tests/data/images/mesh/polyhedra/vertex_attribute.jpeg rename to tests/data/images/mesh/polyhedra/vertex_attribute.jpeg diff --git a/src/tests/data/images/mesh/polyhedra/visibility.jpeg b/tests/data/images/mesh/polyhedra/visibility.jpeg similarity index 100% rename from src/tests/data/images/mesh/polyhedra/visibility.jpeg rename to tests/data/images/mesh/polyhedra/visibility.jpeg diff --git a/src/tests/data/images/mesh/register.jpeg b/tests/data/images/mesh/register.jpeg similarity index 100% rename from src/tests/data/images/mesh/register.jpeg rename to tests/data/images/mesh/register.jpeg diff --git a/src/tests/data/images/mesh/visibility.jpeg b/tests/data/images/mesh/visibility.jpeg similarity index 100% rename from src/tests/data/images/mesh/visibility.jpeg rename to tests/data/images/mesh/visibility.jpeg diff --git a/src/tests/data/images/model/blocks/color.jpeg b/tests/data/images/model/blocks/color.jpeg similarity index 100% rename from src/tests/data/images/model/blocks/color.jpeg rename to tests/data/images/model/blocks/color.jpeg diff --git a/src/tests/data/images/model/blocks/visibility.jpeg b/tests/data/images/model/blocks/visibility.jpeg similarity index 100% rename from src/tests/data/images/model/blocks/visibility.jpeg rename to tests/data/images/model/blocks/visibility.jpeg diff --git a/src/tests/data/images/model/color.jpeg b/tests/data/images/model/color.jpeg similarity index 100% rename from src/tests/data/images/model/color.jpeg rename to tests/data/images/model/color.jpeg diff --git a/src/tests/data/images/model/corners/color.jpeg b/tests/data/images/model/corners/color.jpeg similarity index 100% rename from src/tests/data/images/model/corners/color.jpeg rename to tests/data/images/model/corners/color.jpeg diff --git a/src/tests/data/images/model/corners/visibility.jpeg b/tests/data/images/model/corners/visibility.jpeg similarity index 100% rename from src/tests/data/images/model/corners/visibility.jpeg rename to tests/data/images/model/corners/visibility.jpeg diff --git a/src/tests/data/images/model/cube_register.jpeg b/tests/data/images/model/cube_register.jpeg similarity index 100% rename from src/tests/data/images/model/cube_register.jpeg rename to tests/data/images/model/cube_register.jpeg diff --git a/src/tests/data/images/model/cube_visibility_false.jpeg b/tests/data/images/model/cube_visibility_false.jpeg similarity index 100% rename from src/tests/data/images/model/cube_visibility_false.jpeg rename to tests/data/images/model/cube_visibility_false.jpeg diff --git a/src/tests/data/images/model/deregister.jpeg b/tests/data/images/model/deregister.jpeg similarity index 100% rename from src/tests/data/images/model/deregister.jpeg rename to tests/data/images/model/deregister.jpeg diff --git a/src/tests/data/images/model/edges/visibility.jpeg b/tests/data/images/model/edges/visibility.jpeg similarity index 100% rename from src/tests/data/images/model/edges/visibility.jpeg rename to tests/data/images/model/edges/visibility.jpeg diff --git a/src/tests/data/images/model/lines/color.jpeg b/tests/data/images/model/lines/color.jpeg similarity index 100% rename from src/tests/data/images/model/lines/color.jpeg rename to tests/data/images/model/lines/color.jpeg diff --git a/src/tests/data/images/model/lines/visibility.jpeg b/tests/data/images/model/lines/visibility.jpeg similarity index 100% rename from src/tests/data/images/model/lines/visibility.jpeg rename to tests/data/images/model/lines/visibility.jpeg diff --git a/src/tests/data/images/model/points/size.jpeg b/tests/data/images/model/points/size.jpeg similarity index 100% rename from src/tests/data/images/model/points/size.jpeg rename to tests/data/images/model/points/size.jpeg diff --git a/src/tests/data/images/model/points/visibility.jpeg b/tests/data/images/model/points/visibility.jpeg similarity index 100% rename from src/tests/data/images/model/points/visibility.jpeg rename to tests/data/images/model/points/visibility.jpeg diff --git a/src/tests/data/images/model/register.jpeg b/tests/data/images/model/register.jpeg similarity index 100% rename from src/tests/data/images/model/register.jpeg rename to tests/data/images/model/register.jpeg diff --git a/src/tests/data/images/model/set_components_color.jpeg b/tests/data/images/model/set_components_color.jpeg similarity index 100% rename from src/tests/data/images/model/set_components_color.jpeg rename to tests/data/images/model/set_components_color.jpeg diff --git a/src/tests/data/images/model/set_mesh_visibility.jpeg b/tests/data/images/model/set_mesh_visibility.jpeg similarity index 100% rename from src/tests/data/images/model/set_mesh_visibility.jpeg rename to tests/data/images/model/set_mesh_visibility.jpeg diff --git a/src/tests/data/images/model/surfaces/color.jpeg b/tests/data/images/model/surfaces/color.jpeg similarity index 100% rename from src/tests/data/images/model/surfaces/color.jpeg rename to tests/data/images/model/surfaces/color.jpeg diff --git a/src/tests/data/images/model/surfaces/visibility.jpeg b/tests/data/images/model/surfaces/visibility.jpeg similarity index 100% rename from src/tests/data/images/model/surfaces/visibility.jpeg rename to tests/data/images/model/surfaces/visibility.jpeg diff --git a/src/tests/data/images/model/visibility.jpeg b/tests/data/images/model/visibility.jpeg similarity index 100% rename from src/tests/data/images/model/visibility.jpeg rename to tests/data/images/model/visibility.jpeg diff --git a/src/tests/data/images/viewer/axes_off.jpeg b/tests/data/images/viewer/axes_off.jpeg similarity index 100% rename from src/tests/data/images/viewer/axes_off.jpeg rename to tests/data/images/viewer/axes_off.jpeg diff --git a/src/tests/data/images/viewer/combined_scaling_and_grid.jpeg b/tests/data/images/viewer/combined_scaling_and_grid.jpeg similarity index 100% rename from src/tests/data/images/viewer/combined_scaling_and_grid.jpeg rename to tests/data/images/viewer/combined_scaling_and_grid.jpeg diff --git a/src/tests/data/images/viewer/grid_scale_on.jpeg b/tests/data/images/viewer/grid_scale_on.jpeg similarity index 100% rename from src/tests/data/images/viewer/grid_scale_on.jpeg rename to tests/data/images/viewer/grid_scale_on.jpeg diff --git a/src/tests/data/images/viewer/polygon_attribute.jpeg b/tests/data/images/viewer/polygon_attribute.jpeg similarity index 100% rename from src/tests/data/images/viewer/polygon_attribute.jpeg rename to tests/data/images/viewer/polygon_attribute.jpeg diff --git a/src/tests/data/images/viewer/register_hat.jpeg b/tests/data/images/viewer/register_hat.jpeg similarity index 100% rename from src/tests/data/images/viewer/register_hat.jpeg rename to tests/data/images/viewer/register_hat.jpeg diff --git a/src/tests/data/images/viewer/render_now.jpeg b/tests/data/images/viewer/render_now.jpeg similarity index 100% rename from src/tests/data/images/viewer/render_now.jpeg rename to tests/data/images/viewer/render_now.jpeg diff --git a/src/tests/data/images/viewer/reset_camera.jpeg b/tests/data/images/viewer/reset_camera.jpeg similarity index 100% rename from src/tests/data/images/viewer/reset_camera.jpeg rename to tests/data/images/viewer/reset_camera.jpeg diff --git a/src/tests/data/images/viewer/reset_visualization.jpeg b/tests/data/images/viewer/reset_visualization.jpeg similarity index 100% rename from src/tests/data/images/viewer/reset_visualization.jpeg rename to tests/data/images/viewer/reset_visualization.jpeg diff --git a/src/tests/data/images/viewer/scaling_and_grid_color.jpeg b/tests/data/images/viewer/scaling_and_grid_color.jpeg similarity index 100% rename from src/tests/data/images/viewer/scaling_and_grid_color.jpeg rename to tests/data/images/viewer/scaling_and_grid_color.jpeg diff --git a/src/tests/data/images/viewer/set_background_color.jpeg b/tests/data/images/viewer/set_background_color.jpeg similarity index 100% rename from src/tests/data/images/viewer/set_background_color.jpeg rename to tests/data/images/viewer/set_background_color.jpeg diff --git a/src/tests/data/images/viewer/set_z_scaling.jpeg b/tests/data/images/viewer/set_z_scaling.jpeg similarity index 100% rename from src/tests/data/images/viewer/set_z_scaling.jpeg rename to tests/data/images/viewer/set_z_scaling.jpeg diff --git a/src/tests/data/images/viewer/take_screenshot_with_background.jpg b/tests/data/images/viewer/take_screenshot_with_background.jpg similarity index 100% rename from src/tests/data/images/viewer/take_screenshot_with_background.jpg rename to tests/data/images/viewer/take_screenshot_with_background.jpg diff --git a/src/tests/data/images/viewer/take_screenshot_with_background.png b/tests/data/images/viewer/take_screenshot_with_background.png similarity index 100% rename from src/tests/data/images/viewer/take_screenshot_with_background.png rename to tests/data/images/viewer/take_screenshot_with_background.png diff --git a/src/tests/data/images/viewer/take_screenshot_without_background.png b/tests/data/images/viewer/take_screenshot_without_background.png similarity index 100% rename from src/tests/data/images/viewer/take_screenshot_without_background.png rename to tests/data/images/viewer/take_screenshot_without_background.png diff --git a/src/tests/data/images/viewer/update_camera.jpeg b/tests/data/images/viewer/update_camera.jpeg similarity index 100% rename from src/tests/data/images/viewer/update_camera.jpeg rename to tests/data/images/viewer/update_camera.jpeg diff --git a/src/tests/data/images/viewer/vertex_and_polygon_attribute.jpeg b/tests/data/images/viewer/vertex_and_polygon_attribute.jpeg similarity index 100% rename from src/tests/data/images/viewer/vertex_and_polygon_attribute.jpeg rename to tests/data/images/viewer/vertex_and_polygon_attribute.jpeg diff --git a/src/tests/data/points.vtp b/tests/data/points.vtp similarity index 100% rename from src/tests/data/points.vtp rename to tests/data/points.vtp diff --git a/src/tests/data/polygon_attribute.vtp b/tests/data/polygon_attribute.vtp similarity index 100% rename from src/tests/data/polygon_attribute.vtp rename to tests/data/polygon_attribute.vtp diff --git a/src/tests/data/polyhedron_attribute.vtu b/tests/data/polyhedron_attribute.vtu similarity index 100% rename from src/tests/data/polyhedron_attribute.vtu rename to tests/data/polyhedron_attribute.vtu diff --git a/src/tests/data/take_screenshot_with_background.jpg b/tests/data/take_screenshot_with_background.jpg similarity index 100% rename from src/tests/data/take_screenshot_with_background.jpg rename to tests/data/take_screenshot_with_background.jpg diff --git a/src/tests/data/take_screenshot_with_background.png b/tests/data/take_screenshot_with_background.png similarity index 100% rename from src/tests/data/take_screenshot_with_background.png rename to tests/data/take_screenshot_with_background.png diff --git a/src/tests/data/take_screenshot_without_background.png b/tests/data/take_screenshot_without_background.png similarity index 100% rename from src/tests/data/take_screenshot_without_background.png rename to tests/data/take_screenshot_without_background.png diff --git a/src/tests/data/vertex_attribute.vtp b/tests/data/vertex_attribute.vtp similarity index 100% rename from src/tests/data/vertex_attribute.vtp rename to tests/data/vertex_attribute.vtp diff --git a/src/tests/data/verts.vtp b/tests/data/verts.vtp similarity index 100% rename from src/tests/data/verts.vtp rename to tests/data/verts.vtp diff --git a/src/tests/mesh/edges/test_mesh_edges_protocols.py b/tests/mesh/edges/test_mesh_edges_protocols.py similarity index 100% rename from src/tests/mesh/edges/test_mesh_edges_protocols.py rename to tests/mesh/edges/test_mesh_edges_protocols.py diff --git a/src/tests/mesh/points/test_mesh_points_protocols.py b/tests/mesh/points/test_mesh_points_protocols.py similarity index 100% rename from src/tests/mesh/points/test_mesh_points_protocols.py rename to tests/mesh/points/test_mesh_points_protocols.py diff --git a/src/tests/mesh/polygons/test_mesh_polygons_protocols.py b/tests/mesh/polygons/test_mesh_polygons_protocols.py similarity index 100% rename from src/tests/mesh/polygons/test_mesh_polygons_protocols.py rename to tests/mesh/polygons/test_mesh_polygons_protocols.py diff --git a/src/tests/mesh/polyhedra/test_mesh_polyhedra_protocols.py b/tests/mesh/polyhedra/test_mesh_polyhedra_protocols.py similarity index 100% rename from src/tests/mesh/polyhedra/test_mesh_polyhedra_protocols.py rename to tests/mesh/polyhedra/test_mesh_polyhedra_protocols.py diff --git a/src/tests/mesh/test_mesh_protocols.py b/tests/mesh/test_mesh_protocols.py similarity index 100% rename from src/tests/mesh/test_mesh_protocols.py rename to tests/mesh/test_mesh_protocols.py diff --git a/src/tests/model/blocks/test_model_blocks_protocols.py b/tests/model/blocks/test_model_blocks_protocols.py similarity index 100% rename from src/tests/model/blocks/test_model_blocks_protocols.py rename to tests/model/blocks/test_model_blocks_protocols.py diff --git a/src/tests/model/corners/test_model_corners_protocols.py b/tests/model/corners/test_model_corners_protocols.py similarity index 100% rename from src/tests/model/corners/test_model_corners_protocols.py rename to tests/model/corners/test_model_corners_protocols.py diff --git a/src/tests/model/edges/test_model_edges_protocols.py b/tests/model/edges/test_model_edges_protocols.py similarity index 100% rename from src/tests/model/edges/test_model_edges_protocols.py rename to tests/model/edges/test_model_edges_protocols.py diff --git a/src/tests/model/lines/test_model_lines_protocols.py b/tests/model/lines/test_model_lines_protocols.py similarity index 100% rename from src/tests/model/lines/test_model_lines_protocols.py rename to tests/model/lines/test_model_lines_protocols.py diff --git a/src/tests/model/points/test_model_points_protocols.py b/tests/model/points/test_model_points_protocols.py similarity index 100% rename from src/tests/model/points/test_model_points_protocols.py rename to tests/model/points/test_model_points_protocols.py diff --git a/src/tests/model/surfaces/test_model_surfaces_protocols.py b/tests/model/surfaces/test_model_surfaces_protocols.py similarity index 100% rename from src/tests/model/surfaces/test_model_surfaces_protocols.py rename to tests/model/surfaces/test_model_surfaces_protocols.py diff --git a/src/tests/model/test_model_protocols.py b/tests/model/test_model_protocols.py similarity index 100% rename from src/tests/model/test_model_protocols.py rename to tests/model/test_model_protocols.py diff --git a/src/tests/py.typed b/tests/py.typed similarity index 100% rename from src/tests/py.typed rename to tests/py.typed diff --git a/src/tests/test_generic_protocols.py b/tests/test_generic_protocols.py similarity index 100% rename from src/tests/test_generic_protocols.py rename to tests/test_generic_protocols.py diff --git a/src/tests/test_viewer_protocols.py b/tests/test_viewer_protocols.py similarity index 100% rename from src/tests/test_viewer_protocols.py rename to tests/test_viewer_protocols.py