#!/usr/bin/env python # -*- coding: utf-8 -*- """Tests for `s2rename` package.""" import pytest from pathlib import Path sensovation_source_list = [ Path("some thing_A1_1.tif"), Path("some thing_A02_2.tif"), Path("A03_3.tif"), Path("some thing_A10_4"), Path("some thing_A11_5.csv"), Path("some thing_A12_6.xml"), Path("some thing_B01_1.tif"), Path("some thing_C01_1.tif"), Path("some thing_D01_1.tif"), Path("some thing_E01_1.tif"), Path("some thing_F01_1.tif"), Path("some thing_G01_1.tif"), Path("some thing_H01_1.tif"), Path("some thing_I01_1.tif"), Path("some thing_FF01_1.tif"), Path("some thing_F21_1.tif"), Path("some thing_F00_1.tif"), Path("some thing_F0_1.tif"), Path("some thing_F13_1.tif"), Path("some thing_F08.tif"), Path(".some thing_F09_1.tif"), ] scienion_source_list = [ Path("A1_1_some thing.tif"), Path("A02_2_some thing.tif"), Path("A03_3.tif"), Path("A10_4_some thing"), Path("A11_5_some thing.csv"), Path("A12_6_some thing.xml"), Path("B01_1_some thing.tif"), Path("C01_1_some thing.tif"), Path("D01_1_some thing.tif"), Path("E01_1_some thing.tif"), Path("F01_1_some thing.tif"), Path("G01_1_some thing.tif"), Path("H01_1_some thing.tif"), Path("I01_1_some thing.tif"), Path("FF01_1_some thing.tif"), Path("F21_1_some thing.tif"), Path("F00_1_some thing.tif"), Path("F0_1_some thing.tif"), Path("F13_1_some thing.tif"), Path("F08_some thing.tif"), Path(".F09_1_some thing.tif"), ] @pytest.mark.parametrize("sources", [sensovation_source_list, scienion_source_list]) def test_parse_source_list_sensovation(sources): from s2rename.helpers import RE_SENSOVATION, RE_SCIENION, parse_source_list regex = RE_SENSOVATION if sources == sensovation_source_list else RE_SCIENION result = list(parse_source_list(sources, regex)) assert len(result) == 13 assert {r.row for r in result} == set("ABCDEFGH") assert {r.col for r in result} == {1, 2, 3, 10, 11, 12} assert {r.channel for r in result} == set("123456") assert {r.ext for r in result} == {".tif", ".csv", ".xml", ""} assert {r.stem for r in result} == {"some thing", ""} def test_get_source_list(): from s2rename.helpers import get_source_list result = list(get_source_list(".")) assert {p.name for p in result} == { "LICENSE", "Pipfile", "requirements_dev.txt", "setup.cfg", "Makefile", "README.md", "setup.py", } @pytest.mark.parametrize("path", ["/i/hope/this/doesnt/exist", "setup.py"]) def test_get_source_list_raises_error(path): from s2rename.helpers import get_source_list, S2IOError with pytest.raises(S2IOError): get_source_list(path) def test_get_source_list_with_type(): from s2rename.helpers import get_source_list result = get_source_list(".", ".txt") assert {p.name for p in result} == {"requirements_dev.txt"} def test_filter_source_list_type(): from s2rename.helpers import filter_source_list result = list(filter_source_list(sensovation_source_list, ".csv")) assert len(result) == 1 assert result[0].name == "some thing_A11_5.csv" def test_get_new_name_simple(): from s2rename.helpers import get_new_name, Renamable, template_sensovation r = Renamable( path=Path("x.csv"), stem="some_name", row="A", col=2, channel=3, ext=".csv" ) result = get_new_name(r, template_sensovation, digits=2) assert result == "some_name_A02_3.csv" @pytest.mark.parametrize( "tpl,stem,row,col,channel,digits,ext,expected", [ ("sen", "some_name", "A", 1, 2, 1, ".xls", "some_name_A1_2.xls"), ("sen", "some_name", "A", 1, 2, 2, ".xls", "some_name_A01_2.xls"), ("sen", "some_name", "A", 1, 2, 3, ".xls", "some_name_A001_2.xls"), ("sen", "some_name", "B", 1, 2, 2, ".xls", "some_name_B01_2.xls"), ("sen", "some_name", "A", 2, 2, 2, ".xls", "some_name_A02_2.xls"), ("sen", "some_name", "A", 1, 3, 2, ".xls", "some_name_A01_3.xls"), ("sen", "some_name", "A", 1, 3, 2, ".tif", "some_name_A01_3.tif"), ("sen", "", "A", 1, 3, 2, ".xls", "A01_3.xls"), ("sci", "some_name", "A", 1, 2, 1, ".xls", "A1_2_some_name.xls"), ("sci", "some_name", "A", 1, 2, 2, ".xls", "A01_2_some_name.xls"), ("sci", "some_name", "A", 1, 2, 3, ".xls", "A001_2_some_name.xls"), ("sci", "some_name", "B", 1, 2, 2, ".xls", "B01_2_some_name.xls"), ("sci", "some_name", "A", 2, 2, 2, ".xls", "A02_2_some_name.xls"), ("sci", "some_name", "A", 1, 3, 2, ".xls", "A01_3_some_name.xls"), ("sci", "some_name", "A", 1, 3, 2, ".tif", "A01_3_some_name.tif"), ("sci", "", "A", 1, 3, 2, ".xls", "A01_3.xls"), ], ) def test_get_new_name(tpl, stem, row, col, channel, digits, ext, expected): from s2rename.helpers import ( get_new_name, Renamable, template_sensovation, template_scienion, ) path = Path("x" + ext) r = Renamable(path=path, stem=stem, row=row, col=col, channel=channel, ext=ext) tpl = template_sensovation if tpl == "sen" else template_scienion result = get_new_name(r, tpl, digits=digits) assert result == expected def test_rename_files(): from s2rename.helpers import rename_files, Renamable, template_sensovation old_path = Path("old.txt") new_path = Path("new_A001_2.xxx") renamable_item = Renamable( path=old_path, stem="new", row="A", col=1, channel=2, ext=".xxx" ) with open(old_path, "w") as fh: fh.write("\n") assert old_path.is_file() assert not new_path.is_file() rename_files([renamable_item], template_sensovation, 3) assert not old_path.is_file() assert new_path.is_file() new_path.unlink()