Skip to content

Commit

Permalink
test: Improve tests about subpackage color
Browse files Browse the repository at this point in the history
  • Loading branch information
Xiaokang2022 committed Dec 23, 2024
1 parent 6ff627d commit dce612a
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 107 deletions.
33 changes: 0 additions & 33 deletions tests/test_color/test_colormap.py

This file was deleted.

85 changes: 85 additions & 0 deletions tests/test_color/test_convert.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# pylint: disable=all

import colorsys
import tkinter
import unittest

from tkintertools.color import convert


class Test(unittest.TestCase):

def test_rgb_to_hex(self) -> None:
self.assertEqual(convert.rgb_to_hex((255, 255, 255)), "#FFFFFF")
self.assertEqual(convert.rgb_to_hex((0, 128, 0)), "#008000")

def test_hex_to_rgb(self) -> None:
self.assertEqual(convert.hex_to_rgb("#FFFFFF"), (255, 255, 255))
self.assertEqual(convert.hex_to_rgb("#00ff00"), (0, 255, 0))
self.assertEqual(convert.hex_to_rgb("#008000"), (0, 128, 0))

def test_rgba_to_hex(self) -> None:
self.assertEqual(convert.rgba_to_hex((255, 255, 255, 0)), "#FFFFFF00")
self.assertEqual(convert.rgba_to_hex((0, 128, 0, 0.5)), "#00800080")

def test_hex_to_rgba(self) -> None:
self.assertEqual(convert.hex_to_rgba("#FFFFFF00"), (255, 255, 255, 0))
self.assertEqual(convert.hex_to_rgba("#ffffFFff"), (255, 255, 255, 1))
self.assertEqual(convert.hex_to_rgba("#008000ff"), (0, 128, 0, 1))
self.assertAlmostEqual(convert.hex_to_rgba("#00000080")[-1], 0.5, 2)

def test_rgb_to_rgba(self) -> None:
self.assertEqual(convert.rgb_to_rgba((255, 255, 255)), (255, 255, 255, 0))

def test_rgba_to_rgb(self) -> None:
self.assertEqual(convert.rgba_to_rgb((0, 0, 0, 0), refer=(255, 255, 255)), (255, 255, 255))
self.assertEqual(convert.rgba_to_rgb((0, 128, 0, 0.5), refer=(0, 0, 0)), (0, 64, 0))

def test_hsl_to_rgb(self) -> None:
self.assertEqual(convert.hsl_to_rgb((0, 0, 0)), (0, 0, 0))
self.assertEqual(convert.hsl_to_rgb((0, 0.5, 0.5)), tuple(map(lambda x: round(x*255), colorsys.hls_to_rgb(0, 0.5, 0.5))))

def test_rgb_to_hsl(self) -> None:
self.assertEqual(convert.rgb_to_hsl((255, 255, 255)), (0, 1, 0))
self.assertEqual(convert.rgb_to_hsl((127, 127, 127)), colorsys.rgb_to_hls(127/255, 127/255, 127/255))

def test_hsl_to_hex(self) -> None:
self.assertEqual(convert.hsl_to_hex((0, 0, 0)), "#000000")
self.assertEqual(convert.hsl_to_hex((0, 0.5, 0.5)), convert.rgb_to_hex(convert.hsl_to_rgb((0, 0.5, 0.5))))

def test_hex_to_hsl(self) -> None:
self.assertEqual(convert.hex_to_hsl("#FFFFFF"), (0, 1, 0))
self.assertEqual(convert.hex_to_hsl("#808080"), colorsys.rgb_to_hls(128/255, 128/255, 128/255))

def test_name_to_rgb(self) -> None:
self.assertEqual(convert.name_to_rgb("white"), (255, 255, 255))
self.assertEqual(convert.name_to_rgb("green"), (0, 128, 0))

with self.assertRaises(tkinter.TclError):
convert.name_to_rgb("歪比八卜")

def test_rgb_to_name(self) -> None:
self.assertEqual(convert.rgb_to_name((255, 255, 255)), ["gray100", "grey100", "white"])
self.assertEqual(convert.rgb_to_name((0, 128, 0)), ["green"])

def test_name_to_hex(self) -> None:
self.assertEqual(convert.name_to_hex("white"), "#FFFFFF")
self.assertEqual(convert.name_to_hex("green"), "#008000")

def test_hex_to_name(self) -> None:
self.assertEqual(convert.hex_to_name("#FFFFFF"), ["gray100", "grey100", "white"])
self.assertEqual(convert.hex_to_name("#008000"), ["green"])

def test_fix_hex_length(self) -> None:
self.assertEqual(convert.fix_hex_length("#FFF"), "#FFFFFF")
self.assertEqual(convert.fix_hex_length("#00ff00"), "#00ff00")
self.assertEqual(convert.fix_hex_length("#00ff"), "#0000ffff")

def test_str_to_rgb(self) -> None:
self.assertEqual(convert.str_to_rgb("#FFFFFF"), (255, 255, 255))
self.assertEqual(convert.str_to_rgb("#00ff00"), (0, 255, 0))
self.assertEqual(convert.str_to_rgb("Blue"), (0, 0, 255))


if __name__ == "__main__":
unittest.main()
37 changes: 6 additions & 31 deletions tests/test_color/test_hsl.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# pylint: disable=all

import colorsys
import math
import unittest

Expand All @@ -14,14 +13,12 @@ def test_contrast(self) -> None:
self.assertEqual(hsl.contrast((1, 1, 1), channels=(False, True, True)), (1, 0, 0))

def test_convert(self) -> None:
self.assertEqual(hsl.convert((0, 0, 0), (math.tau, 1, 1), 0.5), (math.pi, 0.5, 0.5))
self.assertEqual(
hsl.convert((0, 0, 0), (math.pi, 1, 1), 1, channels=(True, True, False)),
(math.pi, 1, 0))
self.assertEqual(hsl.transition((0, 0, 0), (math.tau, 1, 1), 0.5), (math.pi, 0.5, 0.5))
self.assertEqual(hsl.transition((0, 0, 0), (math.pi, 1, 1), 1, channels=(True, True, False)), (math.pi, 1, 0))

def test_blend(self) -> None:
self.assertEqual(hsl.blend([(0, 0, 0), (1, 1, 1)]), (0.5, 0.5, 0.5))
self.assertEqual(hsl.blend([(0, 0, 0), (1, 1, 1)], weights=[4, 6]), (0.6, 0.6, 0.6))
self.assertEqual(hsl.blend((0, 0, 0), (1, 1, 1)), (0.5, 0.5, 0.5))
self.assertEqual(hsl.blend((0, 0, 0), (1, 1, 1), weights=[4, 6]), (0.6, 0.6, 0.6))

def test_gradient(self) -> None:
list_1 = hsl.gradient((0, 0, 0), (1, 1, 1), 3, 0.6)
Expand All @@ -31,30 +28,8 @@ def test_gradient(self) -> None:
for j in range(3):
self.assertAlmostEqual(list_1[i][j], list_2[i][j])

self.assertEqual(
hsl.gradient((0, 0, 0), (1, 1, 1), 2, contoller=lambda _: 1), [(1, 1, 1), (1, 1, 1)])
self.assertEqual(
hsl.gradient((0, 0, 0), (1, 1, 1), 2, channels=(True, True, False)),
[(0, 0, 0), (0.5, 0.5, 0)])

def test_hsl_to_rgb(self) -> None:
self.assertIs(hsl.hsl_to_rgb, hsl.hsl2rgb)
self.assertEqual(hsl.hsl_to_rgb((0, 0, 0)), (0, 0, 0))
self.assertEqual(
hsl.hsl_to_rgb((0, 0.5, 0.5)),
tuple(map(lambda x: round(x*255), colorsys.hls_to_rgb(0, 0.5, 0.5))))

def test_rgb_to_hsl(self) -> None:
self.assertIs(hsl.rgb_to_hsl, hsl.rgb2hsl)
self.assertEqual(hsl.rgb_to_hsl((255, 255, 255)), (0, 1, 0))
self.assertEqual(
hsl.rgb_to_hsl((127, 127, 127)), colorsys.rgb_to_hls(127/255, 127/255, 127/255))

def test_MAX(self) -> None:
self.assertEqual(hsl.MAX, (math.tau, 1, 1))

def test_HSL(self) -> None:
self.assertEqual(hsl.HSL, tuple[float, float, float])
self.assertEqual(hsl.gradient((0, 0, 0), (1, 1, 1), 2, contoller=lambda _: 1), [(1, 1, 1), (1, 1, 1)])
self.assertEqual(hsl.gradient((0, 0, 0), (1, 1, 1), 2, channels=(True, True, False)), [(0, 0, 0), (0.5, 0.5, 0)])


if __name__ == "__main__":
Expand Down
50 changes: 7 additions & 43 deletions tests/test_color/test_rgb.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# pylint: disable=all

import platform
import unittest

from tkintertools.color import rgb
Expand All @@ -14,52 +13,17 @@ def test_contrast(self) -> None:
self.assertEqual(rgb.contrast((1, 0, 0), channels=(False, True, True)), (1, 255, 255))

def test_convert(self) -> None:
self.assertEqual(rgb.convert((0, 0, 0), (255, 255, 255), 0.5), (128, 128, 128))
self.assertEqual(
rgb.convert((0, 127, 255), (255, 127, 0), 0.5, channels=(False, True, True)),
(0, 127, 127))
self.assertEqual(rgb.transition((0, 0, 0), (255, 255, 255), 0.5), (128, 128, 128))
self.assertEqual(rgb.transition((0, 127, 255), (255, 127, 0), 0.5, channels=(False, True, True)), (0, 127, 127))

def test_blend(self) -> None:
self.assertEqual(rgb.blend([(0, 0, 0), (255, 255, 255)]), (128, 128, 128))
self.assertEqual(rgb.blend([(0, 0, 0), (100, 100, 100)], weights=[3, 7]), (70, 70, 70))
self.assertEqual(rgb.blend((0, 0, 0), (255, 255, 255)), (128, 128, 128))
self.assertEqual(rgb.blend((0, 0, 0), (100, 100, 100), weights=[3, 7]), (70, 70, 70))

def test_gradient(self) -> None:
self.assertEqual(
rgb.gradient((0, 0, 0), (100, 100, 100), 3, 0.6),
[(0, 0, 0), (20, 20, 20), (40, 40, 40)])
self.assertEqual(
rgb.gradient((0, 0, 0), (100, 100, 100), 2, contoller=lambda _: 1),
[(100, 100, 100), (100, 100, 100)])
self.assertEqual(
rgb.gradient((0, 0, 0), (100, 100, 100), 2, channels=(True, True, False)),
[(0, 0, 0), (50, 50, 0)])

def test_str_to_rgb(self) -> None:
self.assertIs(rgb.str_to_rgb, rgb.str2rgb)
self.assertEqual(rgb.str_to_rgb("#FFFFFF"), (255, 255, 255))
self.assertEqual(rgb.str_to_rgb("#00ff00"), (0, 255, 0))

if platform.system() == "Linux":
raise unittest.SkipTest("No display name")

self.assertEqual(rgb.str_to_rgb("Blue"), (0, 0, 255))

def test_rgb_to_str(self) -> None:
self.assertIs(rgb.rgb_to_str, rgb.rgb2str)
self.assertEqual(rgb.rgb_to_str((0, 0, 0)), "#000000")

def test__str_to_rgba(self) -> None:
self.assertIs(rgb.str_to_rgba, rgb.str2rgba)
self.assertEqual(
rgb.str_to_rgba("#00000000", reference="#FFFFFF"), (255, 255, 255))
self.assertEqual(
rgb.str_to_rgba("#12345678", reference="#000000"), (8, 24, 40))

def test_MAX(self) -> None:
self.assertEqual(rgb.MAX, (255, 255, 255))

def test_RGB(self) -> None:
self.assertEqual(rgb.RGB, tuple[int, int, int])
self.assertEqual(rgb.gradient((0, 0, 0), (100, 100, 100), 3, 0.6), [(0, 0, 0), (20, 20, 20), (40, 40, 40)])
self.assertEqual(rgb.gradient((0, 0, 0), (100, 100, 100), 2, contoller=lambda _: 1), [(100, 100, 100), (100, 100, 100)])
self.assertEqual(rgb.gradient((0, 0, 0), (100, 100, 100), 2, channels=(True, True, False)), [(0, 0, 0), (50, 50, 0)])


if __name__ == "__main__":
Expand Down

0 comments on commit dce612a

Please sign in to comment.