diff options
| author | Dylan Araps <dylanaraps@users.noreply.github.com> | 2017-07-23 15:37:14 +1000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-07-23 15:37:14 +1000 |
| commit | 0c1d76e2b3611b541316dc8d7eb67f18cec5e7f2 (patch) | |
| tree | aaf8141c62789dcfc4f72af24ae96df71459a084 | |
| parent | 9c871ec567504c2566c4ce9f3d382f544cb62b57 (diff) | |
| parent | 07b8ad8e0d97f54277c2e744f745ba3e47d0e53c (diff) | |
Merge pull request #52 from dylanaraps/api
api: Start work on a proper api.
| -rw-r--r-- | .pylintrc | 5 | ||||
| -rw-r--r-- | .travis.yml | 2 | ||||
| -rw-r--r-- | pywal/__init__.py | 27 | ||||
| -rw-r--r-- | pywal/__main__.py | 65 | ||||
| -rw-r--r-- | pywal/colors.py (renamed from pywal/magic.py) | 99 | ||||
| -rw-r--r-- | pywal/export.py | 78 | ||||
| -rw-r--r-- | pywal/image.py | 25 | ||||
| -rw-r--r-- | pywal/reload.py | 41 | ||||
| -rw-r--r-- | pywal/sequences.py | 36 | ||||
| -rw-r--r-- | pywal/settings.py | 17 | ||||
| -rw-r--r-- | pywal/util.py | 29 | ||||
| -rw-r--r-- | pywal/wallpaper.py | 13 | ||||
| -rwxr-xr-x[-rw-r--r--] | tests/test_colors.py | 20 | ||||
| -rwxr-xr-x | tests/test_export.py | 32 | ||||
| -rw-r--r-- | tests/test_files/templates/test_template | 3 | ||||
| l--------- | tests/test_files/test2.jpg | 1 | ||||
| -rw-r--r-- | tests/test_image.py | 21 | ||||
| -rwxr-xr-x | tests/test_magic.py | 17 |
18 files changed, 301 insertions, 230 deletions
diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 0000000..10e9185 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,5 @@ +[BASIC] +good-names=i3 + +[SIMILARITIES] +ignore-imports=yes diff --git a/.travis.yml b/.travis.yml index f924d60..36c9a18 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,5 +11,5 @@ install: script: - flake8 pywal tests setup.py - - pylint --ignore-imports=yes pywal tests setup.py + - pylint pywal tests setup.py - python setup.py test diff --git a/pywal/__init__.py b/pywal/__init__.py index 006f780..e9c0603 100644 --- a/pywal/__init__.py +++ b/pywal/__init__.py @@ -1,5 +1,28 @@ """ -wal - Generate and change colorschemes on the fly. + '|| +... ... .... ... ... ... ... .... || + ||' || '|. | || || | '' .|| || + || | '|.| ||| ||| .|' || || + ||...' '| | | '|..'|' .||. + || .. | +'''' '' Created by Dylan Araps. """ -from pywal.settings import __version__ # noqa: F401 + +from .settings import __version__ +from . import colors +from . import export +from . import image +from . import reload +from . import sequences +from . import wallpaper + +__all__ = [ + "__version__", + "colors", + "export", + "image", + "reload", + "sequences", + "wallpaper", +] diff --git a/pywal/__main__.py b/pywal/__main__.py index cdd5001..0af4df6 100644 --- a/pywal/__main__.py +++ b/pywal/__main__.py @@ -1,20 +1,27 @@ """ -wal - Generate and change colorschemes on the fly. + '|| +... ... .... ... ... ... ... .... || + ||' || '|. | || || | '' .|| || + || | '|.| ||| ||| .|' || || + ||...' '| | | '|..'|' .||. + || .. | +'''' '' Created by Dylan Araps. """ + import argparse import os import shutil import sys -from pywal.settings import CACHE_DIR, __version__ -from pywal import export -from pywal import image -from pywal import magic -from pywal import reload -from pywal import sequences -from pywal import util -from pywal import wallpaper +from .settings import __version__, __cache_dir__ +from . import colors +from . import export +from . import image +from . import reload +from . import sequences +from . import util +from . import wallpaper def get_args(): @@ -22,7 +29,6 @@ def get_args(): description = "wal - Generate colorschemes on the fly" arg = argparse.ArgumentParser(description=description) - # Add the args. arg.add_argument("-c", action="store_true", help="Delete all cached colorschemes.") @@ -57,7 +63,6 @@ def get_args(): def process_args(args): """Process args.""" - # If no args were passed. if not len(sys.argv) > 1: print("error: wal needs to be given arguments to run.\n" " Refer to \"wal -h\" for more info.") @@ -68,51 +73,41 @@ def process_args(args): " Refer to \"wal -h\" for more info.") exit(1) - # -q + if args.v: + print(f"wal {__version__}") + exit(0) + if args.q: sys.stdout = sys.stderr = open(os.devnull, "w") - # -c if args.c: - shutil.rmtree(CACHE_DIR / "schemes") - util.create_dir(CACHE_DIR / "schemes") + shutil.rmtree(__cache_dir__ / "schemes", ignore_errors=True) - # -r if args.r: - sequences.reload_colors(args.t) - - # -v - if args.v: - print(f"wal {__version__}") - exit(0) + reload.colors(args.t) - # -i if args.i: - image_file = image.get_image(args.i) - colors_plain = magic.get_colors(image_file, args.q) + image_file = image.get(args.i) + colors_plain = colors.get(image_file, notify=not args.q) - # -f - elif args.f: - colors_plain = util.read_file_json(args.f) + if args.f: + colors_plain = colors.file(args.f) - # -i or -f if args.i or args.f: - sequences.send_sequences(colors_plain, args.t) + sequences.send(colors_plain, args.t) if not args.n: - wallpaper.set_wallpaper(colors_plain["wallpaper"]) + wallpaper.change(colors_plain["wallpaper"]) - export.export_all_templates(colors_plain) - reload.reload_env() + export.every(colors_plain) + reload.env() - # -o if args.o: util.disown(args.o) def main(): """Main script function.""" - util.create_dir(CACHE_DIR / "schemes") args = get_args() process_args(args) diff --git a/pywal/magic.py b/pywal/colors.py index 0cc868a..0ede3e1 100644 --- a/pywal/magic.py +++ b/pywal/colors.py @@ -5,8 +5,8 @@ import re import shutil import subprocess -from pywal.settings import CACHE_DIR, COLOR_COUNT -from pywal import util +from .settings import __cache_dir__, __color_count__ +from . import util def imagemagick(color_count, img): @@ -18,49 +18,64 @@ def imagemagick(color_count, img): return colors.stdout.readlines() -def gen_colors(img): +def gen_colors(img, color_count): """Format the output from imagemagick into a list of hex colors.""" - # Check if the user has Imagemagick installed. if not shutil.which("convert"): print("error: imagemagick not found, exiting...\n" "error: wal requires imagemagick to function.") exit(1) - # Generate initial scheme. - raw_colors = imagemagick(COLOR_COUNT, img) + raw_colors = imagemagick(color_count, img) - # If imagemagick finds less than 16 colors, use a larger source number - # of colors. index = 0 - while len(raw_colors) - 1 < COLOR_COUNT: + while len(raw_colors) - 1 < color_count: index += 1 - raw_colors = imagemagick(COLOR_COUNT + index, img) + raw_colors = imagemagick(color_count + index, img) - print("colors: Imagemagick couldn't generate a", COLOR_COUNT, + print("colors: Imagemagick couldn't generate a", color_count, "color palette, trying a larger palette size", - COLOR_COUNT + index) + color_count + index) if index > 20: print("colors: Imagemagick couldn't generate a suitable scheme", "for the image. Exiting...") quit(1) - # Remove the first element, which isn't a color. + # Remove the first element because it isn't a color code. del raw_colors[0] - # Create a list of hex colors. return [re.search("#.{6}", str(col)).group(0) for col in raw_colors] -def get_colors(img, quiet): - """Get the colorscheme.""" - # Cache the wallpaper name. - util.save_file(img, CACHE_DIR / "wal") +def sort_colors(img, colors): + """Sort the generated colors and store them in a dict that + we will later save in json format.""" + raw_colors = colors[:1] + colors[9:] + colors[8:] + + colors = {"wallpaper": img} + + colors_special = {} + colors_special.update({"background": raw_colors[0]}) + colors_special.update({"foreground": raw_colors[15]}) + colors_special.update({"cursor": raw_colors[15]}) + + colors_hex = {} + for index, color in enumerate(raw_colors): + colors_hex.update({f"color{index}": color}) + + colors_hex["color8"] = util.set_grey(raw_colors) + colors["special"] = colors_special + colors["colors"] = colors_hex + + return colors + - # Cache the sequences file. +def get(img, cache_dir=__cache_dir__, + color_count=__color_count__, notify=False): + """Get the colorscheme.""" # _home_dylan_img_jpg.json - cache_file = CACHE_DIR / "schemes" / \ + cache_file = cache_dir / "schemes" / \ img.replace("/", "_").replace(".", "_") cache_file = cache_file.with_suffix(".json") @@ -69,48 +84,22 @@ def get_colors(img, quiet): print("colors: Found cached colorscheme.") else: - print("colors: Generating a colorscheme...") - if not quiet: - util.disown("notify-send", "wal: Generating a colorscheme...") + util.msg("wal: Generating a colorscheme...", notify) - # Generate the colors. - colors = gen_colors(img) + colors = gen_colors(img, color_count) colors = sort_colors(img, colors) - # Cache the colorscheme. util.save_file_json(colors, cache_file) - - print("colors: Generated colorscheme") - if not quiet: - util.disown("notify-send", "wal: Generation complete.") + util.msg("wal: Generation complete.", notify) return colors -def sort_colors(img, colors): - """Sort the generated colors and store them in a dict that - we will later save in json format.""" - raw_colors = colors[:1] + colors[9:] + colors[8:] - - # Wallpaper. - colors = {"wallpaper": img} - - # Special colors. - colors_special = {} - colors_special.update({"background": raw_colors[0]}) - colors_special.update({"foreground": raw_colors[15]}) - colors_special.update({"cursor": raw_colors[15]}) - - # Colors 0-15. - colors_hex = {} - [colors_hex.update({f"color{index}": color}) # pylint: disable=W0106 - for index, color in enumerate(raw_colors)] - - # Color 8. - colors_hex["color8"] = util.set_grey(raw_colors) +def file(input_file): + """Import colorscheme from json file.""" + data = util.read_file_json(input_file) - # Add the colors to a dict. - colors["special"] = colors_special - colors["colors"] = colors_hex + if "wallpaper" not in data: + data["wallpaper"] = "None" - return colors + return data diff --git a/pywal/export.py b/pywal/export.py index 9eea198..316de7b 100644 --- a/pywal/export.py +++ b/pywal/export.py @@ -2,47 +2,67 @@ Export colors in various formats. """ import os +import pathlib -from pywal.settings import CACHE_DIR -from pywal import util +from .settings import __cache_dir__ +from . import util -def template(colors, input_file, output_dir): +TEMPLATE_DIR = pathlib.Path(__file__).parent / "templates" + + +def template(colors, input_file, output_file=None): """Read template file, substitute markers and save the file elsewhere.""" - # Import the template. - with open(input_file) as file: - template_data = file.readlines() - - # Format the markers. + template_data = util.read_file_raw(input_file) template_data = "".join(template_data).format(**colors) - # Get the template name. - template_file = os.path.basename(input_file) - - # Export the template. - output_file = output_dir / template_file util.save_file(template_data, output_file) - print(f"export: Exported {template_file}.") - -def export_all_templates(colors, template_dir=None, output_dir=CACHE_DIR): - """Export all template files.""" - # Add the template dir to module path. - template_dir = template_dir or \ - os.path.join(os.path.dirname(__file__), "templates") - - # Merge all colors (specials and normals) into one dict so we can access - # their values simpler. +def flatten_colors(colors): + """Prepare colors to be exported. + Flatten dicts and convert colors to util.Color()""" all_colors = {"wallpaper": colors["wallpaper"], **colors["special"], **colors["colors"]} + return {k: util.Color(v) for k, v in all_colors.items()} + + +def get_export_type(export_type): + """Convert template type to the right filename.""" + return { + "css": "colors.css", + "json": "colors.json", + "konsole": "colors-konsole.colorscheme", + "putty": "colors-putty.reg", + "scss": "colors.scss", + "shell": "colors.sh", + "xresources": "colors.Xresources", + }.get(export_type, export_type) + + +def every(colors, output_dir=__cache_dir__): + """Export all template files.""" + all_colors = flatten_colors(colors) + output_dir = pathlib.Path(output_dir) + + for file in os.scandir(TEMPLATE_DIR): + template(all_colors, file.path, output_dir / file.name) + + print(f"export: Exported all files.") + + +def color(colors, export_type, output_file=None): + """Export a single template file.""" + all_colors = flatten_colors(colors) - # Turn all those colors into util.Color instances for accessing the - # .hex and .rgb formats - all_colors = {k: util.Color(v) for k, v in all_colors.items()} + template_name = get_export_type(export_type) + template_file = TEMPLATE_DIR / template_name + output_file = output_file or __cache_dir__ / template_name - # pylint: disable=W0106 - [template(all_colors, file.path, output_dir) - for file in os.scandir(template_dir)] + if template_file.is_file(): + template(all_colors, template_file, output_file) + print(f"export: Exported {export_type}.") + else: + print(f"[!] warning: template '{export_type}' doesn't exist.") diff --git a/pywal/image.py b/pywal/image.py index 394967d..eec05f6 100644 --- a/pywal/image.py +++ b/pywal/image.py @@ -5,37 +5,33 @@ import os import pathlib import random -from pywal.settings import CACHE_DIR -from pywal import util +from .settings import __cache_dir__ +from . import util +from . import wallpaper def get_random_image(img_dir): """Pick a random image file from a directory.""" - current_wall = CACHE_DIR / "wal" + current_wall = wallpaper.get() + current_wall = os.path.basename(current_wall[0]) - if current_wall.is_file(): - current_wall = util.read_file(current_wall) - current_wall = os.path.basename(current_wall[0]) - - # Add all images to a list excluding the current wallpaper. file_types = (".png", ".jpg", ".jpeg", ".jpe", ".gif") images = [img for img in os.scandir(img_dir) if img.name.endswith(file_types) and img.name != current_wall] - # If no images are found, use the current wallpaper. if not images: print("image: No new images found (nothing to do), exiting...") quit(1) - return img_dir / random.choice(images).name + return str(img_dir / random.choice(images).name) -def get_image(img): +def get(img, cache_dir=__cache_dir__): """Validate image input.""" image = pathlib.Path(img) if image.is_file(): - wal_img = image + wal_img = str(image) elif image.is_dir(): wal_img = get_random_image(image) @@ -44,5 +40,8 @@ def get_image(img): print("error: No valid image file found.") exit(1) + # Cache the image file path. + util.save_file(wal_img, cache_dir / "wal") + print("image: Using image", wal_img) - return str(wal_img) + return wal_img diff --git a/pywal/reload.py b/pywal/reload.py index 5cc7307..12769bf 100644 --- a/pywal/reload.py +++ b/pywal/reload.py @@ -1,34 +1,55 @@ """ Reload programs. """ +import re import shutil import subprocess -from pywal.settings import CACHE_DIR -from pywal import util +from .settings import __cache_dir__ +from . import util -def reload_xrdb(): +def xrdb(xrdb_file=None): """Merge the colors into the X db so new terminals use them.""" + xrdb_file = xrdb_file or __cache_dir__ / "colors.Xresources" + if shutil.which("xrdb"): - subprocess.call(["xrdb", "-merge", CACHE_DIR / "colors.Xresources"]) + subprocess.call(["xrdb", "-merge", xrdb_file], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL) -def reload_i3(): +def i3(): """Reload i3 colors.""" if shutil.which("i3-msg"): util.disown("i3-msg", "reload") -def reload_polybar(): +def polybar(): """Reload polybar colors.""" if shutil.which("polybar"): util.disown("pkill", "-USR1", "polybar") -def reload_env(): +def env(xrdb_file=None): """Reload environment.""" - reload_xrdb() - reload_i3() - reload_polybar() + xrdb(xrdb_file) + i3() + polybar() print("reload: Reloaded environment.") + + +def colors(vte, cache_dir=__cache_dir__): + """Reload the current scheme.""" + sequence_file = cache_dir / "sequences" + + if sequence_file.is_file(): + sequences = "".join(util.read_file(sequence_file)) + + # If vte mode was used, remove the unsupported sequence. + if vte: + sequences = re.sub(r"\]708;\#.{6}", "", sequences) + + print(sequences, end="") + + exit(0) diff --git a/pywal/sequences.py b/pywal/sequences.py index 858c381..77eace3 100644 --- a/pywal/sequences.py +++ b/pywal/sequences.py @@ -2,10 +2,9 @@ Send sequences to all open terminals. """ import os -import re -from pywal.settings import CACHE_DIR -from pywal import util +from .settings import __cache_dir__ +from . import util def set_special(index, color): @@ -18,14 +17,14 @@ def set_color(index, color): return f"\033]4;{index};{color}\007" -def send_sequences(colors, vte): +def send(colors, vte, cache_dir=__cache_dir__): """Send colors to all open terminals.""" # Colors 0-15. sequences = [set_color(num, color) for num, color in enumerate(colors["colors"].values())] # Special colors. - # http://pod.tst.eu/http://cvs.schmorp.de/rxvt-unicode/doc/rxvt.7.pod#XTerm_Operating_System_Commands + # Source: https://goo.gl/KcoQgP # 10 = foreground, 11 = background, 12 = cursor foregound # 13 = mouse foreground sequences.append(set_special(10, colors["special"]["foreground"])) @@ -33,7 +32,7 @@ def send_sequences(colors, vte): sequences.append(set_special(12, colors["special"]["cursor"])) sequences.append(set_special(13, colors["special"]["cursor"])) - # Set a blank color that isn"t affected by bold highlighting. + # Set a blank color that isn't affected by bold highlighting. # Used in wal.vim's airline theme. sequences.append(set_color(66, colors["special"]["background"])) @@ -41,29 +40,12 @@ def send_sequences(colors, vte): if not vte: sequences.append(set_special(708, colors["special"]["background"])) - # Get the list of terminals. terminals = [f"/dev/pts/{term}" for term in os.listdir("/dev/pts/") if len(term) < 4] - terminals.append(CACHE_DIR / "sequences") + terminals.append(cache_dir / "sequences") - # Send the sequences to all open terminals. - # pylint: disable=W0106 - [util.save_file("".join(sequences), term) for term in terminals] + # Writing to "/dev/pts/[0-9] lets you send data to open terminals. + for term in terminals: + util.save_file("".join(sequences), term) print("colors: Set terminal colors") - - -def reload_colors(vte): - """Reload the current scheme.""" - sequence_file = CACHE_DIR / "sequences" - - if sequence_file.is_file(): - sequences = "".join(util.read_file(sequence_file)) - - # If vte mode was used, remove the unsupported sequence. - if vte: - sequences = re.sub(r"\]708;\#.{6}", "", sequences) - - print(sequences, end="") - - exit(0) diff --git a/pywal/settings.py b/pywal/settings.py index 9037285..acfc625 100644 --- a/pywal/settings.py +++ b/pywal/settings.py @@ -1,11 +1,16 @@ """ -Global Constants. + '|| +... ... .... ... ... ... ... .... || + ||' || '|. | || || | '' .|| || + || | '|.| ||| ||| .|' || || + ||...' '| | | '|..'|' .||. + || .. | +'''' '' +Created by Dylan Araps. """ -import pathlib +import pathlib __version__ = "0.4.0" - - -COLOR_COUNT = 16 -CACHE_DIR = pathlib.Path.home() / ".cache/wal/" +__cache_dir__ = pathlib.Path.home() / ".cache/wal/" +__color_count__ = 16 diff --git a/pywal/util.py b/pywal/util.py index 6c5b420..1df3c9f 100644 --- a/pywal/util.py +++ b/pywal/util.py @@ -44,32 +44,40 @@ def set_grey(colors): def read_file(input_file): - """Read data from a file.""" - with open(input_file) as file: + """Read data from a file and trim newlines.""" + with open(input_file, "r") as file: data = file.read().splitlines() return data def read_file_json(input_file): """Read data from a json file.""" - with open(input_file) as json_file: + with open(input_file, "r") as json_file: data = json.load(json_file) - # If wallpaper is unset, set it to "None" - if "wallpaper" not in data: - data["wallpaper"] = "None" + return data + +def read_file_raw(input_file): + """Read data from a file as is, don't strip + newlines or other special characters..""" + with open(input_file, "r") as file: + data = file.readlines() return data def save_file(data, export_file): """Write data to a file.""" + create_dir(os.path.dirname(export_file)) + with open(export_file, "w") as file: file.write(data) def save_file_json(data, export_file): """Write data to a json file.""" + create_dir(os.path.dirname(export_file)) + with open(export_file, "w") as file: json.dump(data, file, indent=4) @@ -98,3 +106,12 @@ def disown(*cmd): stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, preexec_fn=os.setpgrp) + + +def msg(input_msg, notify): + """Print to the terminal and display a libnotify + notification.""" + if notify: + disown("notify-send", input_msg) + + print(input_msg) diff --git a/pywal/wallpaper.py b/pywal/wallpaper.py index 5e524a3..836a2c6 100644 --- a/pywal/wallpaper.py +++ b/pywal/wallpaper.py @@ -3,7 +3,8 @@ import os import shutil import subprocess -from pywal import util +from .settings import __cache_dir__ +from . import util def get_desktop_env(): @@ -80,7 +81,7 @@ def set_desktop_wallpaper(desktop, img): set_wm_wallpaper(img) -def set_wallpaper(img): +def change(img): """Set the wallpaper.""" if not os.path.isfile(img): return @@ -94,3 +95,11 @@ def set_wallpaper(img): set_wm_wallpaper(img) print("wallpaper: Set the new wallpaper") + + +def get(cache_dir=__cache_dir__): + """Get the current wallpaper.""" + current_wall = cache_dir / "wal" + + if current_wall.is_file(): + return util.read_file(current_wall)[0] diff --git a/tests/test_colors.py b/tests/test_colors.py index 077600e..e83c54d 100644..100755 --- a/tests/test_colors.py +++ b/tests/test_colors.py @@ -1,20 +1,16 @@ -"""Test image functions.""" +"""Test imagemagick functions.""" import unittest -from pywal import image +from pywal import colors -class TestImage(unittest.TestCase): - """Test image functions.""" - def test_get_img(self): - """> Validate image file.""" - result = image.get_image("tests/test_files/test.jpg") - self.assertEqual(result, "tests/test_files/test.jpg") +class TestGenColors(unittest.TestCase): + """Test the gen_colors functions.""" - def test_get_img_dir(self): - """> Validate image directory.""" - result = image.get_image("tests/test_files") - self.assertEqual(result, "tests/test_files/test.jpg") + def test_gen_colors(self): + """> Generate a colorscheme.""" + result = colors.get("tests/test_files/test.jpg") + self.assertEqual(result["colors"]["color0"], "#0F191A") if __name__ == "__main__": diff --git a/tests/test_export.py b/tests/test_export.py index 167d3ed..ebf5740 100755 --- a/tests/test_export.py +++ b/tests/test_export.py @@ -8,28 +8,36 @@ from pywal import util # Import colors. COLORS = util.read_file_json("tests/test_files/test_file.json") +COLORS["colors"].update(COLORS["special"]) +OUTPUT_DIR = pathlib.Path("/tmp/wal") + +util.create_dir("/tmp/wal") class TestExportColors(unittest.TestCase): """Test the export functions.""" - def test_template(self): + def test_all_templates(self): """> Test substitutions in template file.""" - # Merge both dicts so we can access their - # values simpler. - COLORS["colors"].update(COLORS["special"]) + export.every(COLORS, OUTPUT_DIR) + + result = pathlib.Path("/tmp/wal/colors.sh").is_file() + self.assertTrue(result) + + content = pathlib.Path("/tmp/wal/colors.sh").read_text() + content = content.split("\n")[6] + self.assertEqual(content, "foreground='#F5F1F4'") - output_dir = pathlib.Path("/tmp") - template_dir = pathlib.Path("tests/test_files/templates") - export.export_all_templates(COLORS, template_dir, output_dir) + def test_css_template(self): + """> Test substitutions in template file (css).""" + export.color(COLORS, "css", OUTPUT_DIR / "test.css") - result = pathlib.Path("/tmp/test_template").is_file() + result = pathlib.Path("/tmp/wal/test.css").is_file() self.assertTrue(result) - content = pathlib.Path("/tmp/test_template").read_text() - self.assertEqual(content, '\n'.join(["test1 #1F211E", - "test2 #1F211E", - "test3 31,33,30", ""])) + content = pathlib.Path("/tmp/wal/test.css").read_text() + content = content.split("\n")[6] + self.assertEqual(content, " --background: #1F211E;") if __name__ == "__main__": diff --git a/tests/test_files/templates/test_template b/tests/test_files/templates/test_template deleted file mode 100644 index af40ce7..0000000 --- a/tests/test_files/templates/test_template +++ /dev/null @@ -1,3 +0,0 @@ -test1 {color0} -test2 {background} -test3 {background.rgb} diff --git a/tests/test_files/test2.jpg b/tests/test_files/test2.jpg new file mode 120000 index 0000000..0e8c5b6 --- /dev/null +++ b/tests/test_files/test2.jpg @@ -0,0 +1 @@ +test.jpg
\ No newline at end of file diff --git a/tests/test_image.py b/tests/test_image.py new file mode 100644 index 0000000..e0b7902 --- /dev/null +++ b/tests/test_image.py @@ -0,0 +1,21 @@ +"""Test image functions.""" +import unittest + +from pywal import image + + +class TestImage(unittest.TestCase): + """Test image functions.""" + def test_get_img(self): + """> Validate image file.""" + result = image.get("tests/test_files/test.jpg") + self.assertEqual(result, "tests/test_files/test.jpg") + + def test_get_img_dir(self): + """> Validate image directory.""" + result = image.get("tests/test_files") + self.assertEqual(result.endswith(".jpg"), True) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_magic.py b/tests/test_magic.py deleted file mode 100755 index 673420c..0000000 --- a/tests/test_magic.py +++ /dev/null @@ -1,17 +0,0 @@ -"""Test imagemagick functions.""" -import unittest - -from pywal import magic - - -class TestGenColors(unittest.TestCase): - """Test the gen_colors functions.""" - - def test_gen_colors(self): - """> Generate a colorscheme.""" - result = magic.gen_colors("tests/test_files/test.jpg") - self.assertEqual(result[0], "#0F191A") - - -if __name__ == "__main__": - unittest.main() |
