Files
.config/ranger/plugins/ranger_devicons/tests/test_devicons.py
2025-09-08 10:44:09 +02:00

103 lines
3.1 KiB
Python

import os
import sys
import importlib
import pytest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
def reload_devicons(lang):
os.environ['DEVICONS_LANG'] = lang
from ranger_devicons import devicons
importlib.reload(devicons)
return devicons
class MockFile:
def __init__(self, path, is_directory=False):
self.relative_path = path
self.is_directory = is_directory
self.extension = os.path.splitext(path)[1][1:]
def test_devicon_py_file():
devicons = reload_devicons('es')
file = MockFile('example.py')
assert devicons.devicon(file) == ''
def test_devicon_readme():
devicons = reload_devicons('es')
file = MockFile('README.md')
assert devicons.devicon(file) == ''
def test_devicon_directory_match():
devicons = reload_devicons('es')
file = MockFile('Documents', is_directory=True)
assert devicons.devicon(file) == ''
@pytest.mark.parametrize("lang,translated,english", [
("es", "Descargas", "Downloads"),
("fr", "Téléchargements", "Downloads"),
("de", "Schreibtisch", "Desktop"),
("it", "Scaricati", "Downloads"),
("pt_BR", "Imagens", "Pictures"),
("ja", "ダウンロード", "Downloads"),
("ru", "Загрузки", "Downloads"),
("zh_cn", "下载", "Downloads"),
])
def test_devicon_directory_translation(lang, translated, english):
devicons = reload_devicons(lang)
english_file = MockFile(english, is_directory=True)
translated_file = MockFile(translated, is_directory=True)
assert devicons.devicon(translated_file) == devicons.devicon(english_file)
def test_devicon_unknown():
devicons = reload_devicons('es')
file = MockFile('unknown.unknown')
assert devicons.devicon(file) == ''
def test_unmapped_directory_returns_default(monkeypatch):
monkeypatch.setenv('XDG_DOWNLOAD_DIR', '/tmp/downloads')
devicons = reload_devicons('es')
file = MockFile('RandomDir', is_directory=True)
assert devicons.devicon(file) == ''
def test_uncommon_extension_returns_default(monkeypatch):
monkeypatch.setenv('XDG_DOWNLOAD_DIR', '/tmp/downloads')
devicons = reload_devicons('es')
file = MockFile('file.xyz')
assert devicons.devicon(file) == ''
@pytest.mark.parametrize(
"name,expected",
[
("data.json", ""),
("image.png", ""),
("archive.tar", ""),
("Makefile", ""),
("Dockerfile", ""),
("package.json", ""),
],
)
def test_devicon_various_examples(name, expected):
devicons = reload_devicons('es')
assert devicons.devicon(MockFile(name)) == expected
def test_devicon_capitalized_extension_returns_default(monkeypatch):
monkeypatch.setenv('XDG_DOWNLOAD_DIR', '/tmp/downloads')
devicons = reload_devicons('es')
file = MockFile('example.PY')
assert devicons.devicon(file) == ''
def test_devicon_xdg_trailing_slash(monkeypatch):
monkeypatch.setenv('XDG_PICTURES_DIR', '/tmp/Pictures/')
devicons = reload_devicons('es')
file = MockFile('Pictures', is_directory=True)
assert devicons.devicon(file) == ''