diff options
Diffstat (limited to 'src/silx/io/test/test_url.py')
-rw-r--r-- | src/silx/io/test/test_url.py | 300 |
1 files changed, 300 insertions, 0 deletions
diff --git a/src/silx/io/test/test_url.py b/src/silx/io/test/test_url.py new file mode 100644 index 0000000..61f9883 --- /dev/null +++ b/src/silx/io/test/test_url.py @@ -0,0 +1,300 @@ +# /*########################################################################## +# Copyright (C) 2016-2017 European Synchrotron Radiation Facility +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +# ############################################################################*/ +"""Tests for url module""" + +__authors__ = ["V. Valls"] +__license__ = "MIT" +__date__ = "29/01/2018" + + +import pytest +from ..url import DataUrl + + +def assert_url(url, expected): + assert url.is_valid() == expected[0] + assert url.is_absolute() == expected[1] + assert url.scheme() == expected[2] + assert url.file_path() == expected[3] + assert url.data_path() == expected[4] + assert url.data_slice() == expected[5] + + +def test_fabio_absolute(): + url = DataUrl("fabio:///data/image.edf?slice=2") + expected = [True, True, "fabio", "/data/image.edf", None, (2,)] + assert_url(url, expected) + + +def test_fabio_absolute_windows(): + url = DataUrl("fabio:///C:/data/image.edf?slice=2") + expected = [True, True, "fabio", "C:/data/image.edf", None, (2,)] + assert_url(url, expected) + + +def test_silx_absolute(): + url = DataUrl("silx:///data/image.h5?path=/data/dataset&slice=1,5") + expected = [True, True, "silx", "/data/image.h5", "/data/dataset", (1, 5)] + assert_url(url, expected) + + +def test_commandline_shell_separator(): + url = DataUrl("silx:///data/image.h5::path=/data/dataset&slice=1,5") + expected = [True, True, "silx", "/data/image.h5", "/data/dataset", (1, 5)] + assert_url(url, expected) + + +def test_silx_absolute2(): + url = DataUrl("silx:///data/image.edf?/scan_0/detector/data") + expected = [True, True, "silx", "/data/image.edf", "/scan_0/detector/data", None] + assert_url(url, expected) + + +def test_silx_absolute_windows(): + url = DataUrl("silx:///C:/data/image.h5?/scan_0/detector/data") + expected = [True, True, "silx", "C:/data/image.h5", "/scan_0/detector/data", None] + assert_url(url, expected) + + +def test_silx_relative(): + url = DataUrl("silx:./image.h5") + expected = [True, False, "silx", "./image.h5", None, None] + assert_url(url, expected) + + +def test_fabio_relative(): + url = DataUrl("fabio:./image.edf") + expected = [True, False, "fabio", "./image.edf", None, None] + assert_url(url, expected) + + +def test_silx_relative2(): + url = DataUrl("silx:image.h5") + expected = [True, False, "silx", "image.h5", None, None] + assert_url(url, expected) + + +def test_fabio_relative2(): + url = DataUrl("fabio:image.edf") + expected = [True, False, "fabio", "image.edf", None, None] + assert_url(url, expected) + + +def test_file_relative(): + url = DataUrl("image.edf") + expected = [True, False, None, "image.edf", None, None] + assert_url(url, expected) + + +def test_file_relative2(): + url = DataUrl("./foo/bar/image.edf") + expected = [True, False, None, "./foo/bar/image.edf", None, None] + assert_url(url, expected) + + +def test_file_relative3(): + url = DataUrl("foo/bar/image.edf") + expected = [True, False, None, "foo/bar/image.edf", None, None] + assert_url(url, expected) + + +def test_file_absolute(): + url = DataUrl("/data/image.edf") + expected = [True, True, None, "/data/image.edf", None, None] + assert_url(url, expected) + + +def test_file_absolute_windows(): + url = DataUrl("C:/data/image.edf") + expected = [True, True, None, "C:/data/image.edf", None, None] + assert_url(url, expected) + + +def test_absolute_with_path(): + url = DataUrl("/foo/foobar.h5?/foo/bar") + expected = [True, True, None, "/foo/foobar.h5", "/foo/bar", None] + assert_url(url, expected) + + +def test_windows_file_data_slice(): + url = DataUrl("C:/foo/foobar.h5?path=/foo/bar&slice=5,1") + expected = [True, True, None, "C:/foo/foobar.h5", "/foo/bar", (5, 1)] + assert_url(url, expected) + + +def test_scheme_file_data_slice(): + url = DataUrl("silx:/foo/foobar.h5?path=/foo/bar&slice=5,1") + expected = [True, True, "silx", "/foo/foobar.h5", "/foo/bar", (5, 1)] + assert_url(url, expected) + + +def test_scheme_windows_file_data_slice(): + url = DataUrl("silx:C:/foo/foobar.h5?path=/foo/bar&slice=5,1") + expected = [True, True, "silx", "C:/foo/foobar.h5", "/foo/bar", (5, 1)] + assert_url(url, expected) + + +def test_empty(): + url = DataUrl("") + expected = [False, False, None, "", None, None] + assert_url(url, expected) + + +def test_unknown_scheme(): + url = DataUrl("foo:/foo/foobar.h5?path=/foo/bar&slice=5,1") + expected = [False, True, "foo", "/foo/foobar.h5", "/foo/bar", (5, 1)] + assert_url(url, expected) + + +def test_slice(): + url = DataUrl("/a.h5?path=/b&slice=5,1") + expected = [True, True, None, "/a.h5", "/b", (5, 1)] + assert_url(url, expected) + + +def test_slice2(): + url = DataUrl("/a.h5?path=/b&slice=2:5") + expected = [True, True, None, "/a.h5", "/b", (slice(2, 5),)] + assert_url(url, expected) + + +def test_slice3(): + url = DataUrl("/a.h5?path=/b&slice=::2") + expected = [True, True, None, "/a.h5", "/b", (slice(None, None, 2),)] + assert_url(url, expected) + + +def test_slice_ellipsis(): + url = DataUrl("/a.h5?path=/b&slice=...") + expected = [True, True, None, "/a.h5", "/b", (Ellipsis,)] + assert_url(url, expected) + + +def test_slice_slicing(): + url = DataUrl("/a.h5?path=/b&slice=:") + expected = [True, True, None, "/a.h5", "/b", (slice(None),)] + assert_url(url, expected) + + +def test_slice_missing_element(): + url = DataUrl("/a.h5?path=/b&slice=5,,1") + expected = [False, True, None, "/a.h5", "/b", None] + assert_url(url, expected) + + +def test_slice_no_elements(): + url = DataUrl("/a.h5?path=/b&slice=") + expected = [False, True, None, "/a.h5", "/b", None] + assert_url(url, expected) + + +def test_create_relative_url(): + url = DataUrl(scheme="silx", file_path="./foo.h5", data_path="/", data_slice=(5, 1)) + assert not url.is_absolute() + url2 = DataUrl(url.path()) + assert url == url2 + + +def test_create_absolute_url(): + url = DataUrl(scheme="silx", file_path="/foo.h5", data_path="/", data_slice=(5, 1)) + url2 = DataUrl(url.path()) + assert url == url2 + + +def test_create_absolute_windows_url(): + url = DataUrl( + scheme="silx", file_path="C:/foo.h5", data_path="/", data_slice=(5, 1) + ) + url2 = DataUrl(url.path()) + assert url == url2 + + +def test_create_slice_url(): + url = DataUrl( + scheme="silx", + file_path="/foo.h5", + data_path="/", + data_slice=(5, 1, Ellipsis, slice(None)), + ) + url2 = DataUrl(url.path()) + assert url == url2 + + +def test_wrong_url(): + url = DataUrl(scheme="silx", file_path="/foo.h5", data_slice=(5, 1)) + assert not url.is_valid() + + +@pytest.mark.parametrize( + "data", + [ + (1, "silx:///foo.h5?slice=1"), + ((1,), "silx:///foo.h5?slice=1"), + (slice(None), "silx:///foo.h5?slice=:"), + (slice(1, None), "silx:///foo.h5?slice=1:"), + (slice(None, -2), "silx:///foo.h5?slice=:-2"), + (slice(1, None, 3), "silx:///foo.h5?slice=1::3"), + (slice(None, 2, 3), "silx:///foo.h5?slice=:2:3"), + (slice(None, None, 3), "silx:///foo.h5?slice=::3"), + (slice(1, 2, 3), "silx:///foo.h5?slice=1:2:3"), + ((1, slice(1, 2)), "silx:///foo.h5?slice=1,1:2"), + ], +) +def test_path_creation(data): + """make sure the construction of path succeed and that we can + recreate a DataUrl from a path""" + data_slice, expected_path = data + url = DataUrl(scheme="silx", file_path="/foo.h5", data_slice=data_slice) + path = url.path() + DataUrl(path=path) + assert path == expected_path + + +def test_file_path_none(): + """ + make sure a file path can be None + """ + url = DataUrl(scheme="silx", file_path=None, data_path="/path/to/data") + assert url.file_path() is None + assert url.scheme() == "silx" + assert url.data_path() == "/path/to/data" + + +def test_data_path_none(): + """ + make sure a data path can be None + """ + url = DataUrl(scheme="silx", file_path="my_file.hdf5", data_path=None) + assert url.file_path() == "my_file.hdf5" + assert url.scheme() == "silx" + assert url.data_path() is None + + +def test_scheme_none(): + """ + make sure a scheme can be None + """ + url = DataUrl(scheme=None, file_path="my_file.hdf5", data_path="/path/to/data") + assert url.file_path() == "my_file.hdf5" + assert url.scheme() is None + assert url.data_path() == "/path/to/data" |