File: test_terminal_colours.py

package info (click to toggle)
python-consolekit 1.7.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,152 kB
  • sloc: python: 2,835; makefile: 8
file content (111 lines) | stat: -rw-r--r-- 4,150 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# stdlib
from collections import deque

# 3rd party
from coincidence.regressions import AdvancedFileRegressionFixture, check_file_regression

# this package
from consolekit import terminal_colours
from consolekit.terminal_colours import Colour, print_256_colour_testpattern, strip_ansi


def test_terminal_colours_constants():
	assert terminal_colours.CSI == "\u001b["
	assert terminal_colours.OSC == "\u001b]"
	assert terminal_colours.BEL == '\x07'


def test_terminal_colours_stacks():
	assert terminal_colours.fore_stack == deque([terminal_colours.Fore.RESET])
	assert terminal_colours.back_stack == deque([terminal_colours.Back.RESET])
	assert terminal_colours.style_stack == deque([terminal_colours.Style.NORMAL])


def test_terminal_colours_functions():
	assert terminal_colours.set_title("Foo") == "\u001b]2;Foo\u0007"

	# assert terminal_colours.clear_screen() == "\033[2J"
	# assert terminal_colours.clear_screen(1) == "\033[1J"

	assert terminal_colours.clear_line() == "\u001b[2K"
	assert terminal_colours.clear_line(1) == "\u001b[1K"


def test_ansi_cursor():
	assert terminal_colours.Cursor.UP() == "\u001b[1A"
	assert terminal_colours.Cursor.UP(1) == "\u001b[1A"
	assert terminal_colours.Cursor.UP(2) == "\u001b[2A"
	assert terminal_colours.Cursor.UP(3) == "\u001b[3A"

	assert terminal_colours.Cursor.DOWN() == "\u001b[1B"
	assert terminal_colours.Cursor.DOWN(1) == "\u001b[1B"
	assert terminal_colours.Cursor.DOWN(2) == "\u001b[2B"
	assert terminal_colours.Cursor.DOWN(3) == "\u001b[3B"

	assert terminal_colours.Cursor.FORWARD() == "\u001b[1C"
	assert terminal_colours.Cursor.FORWARD(1) == "\u001b[1C"
	assert terminal_colours.Cursor.FORWARD(2) == "\u001b[2C"
	assert terminal_colours.Cursor.FORWARD(3) == "\u001b[3C"

	assert terminal_colours.Cursor.BACK() == "\u001b[1D"
	assert terminal_colours.Cursor.BACK(1) == "\u001b[1D"
	assert terminal_colours.Cursor.BACK(2) == "\u001b[2D"
	assert terminal_colours.Cursor.BACK(3) == "\u001b[3D"

	assert terminal_colours.Cursor.POS() == "\u001b[1;1H"
	assert terminal_colours.Cursor.POS(1) == "\u001b[1;1H"
	assert terminal_colours.Cursor.POS(2) == "\u001b[1;2H"
	assert terminal_colours.Cursor.POS(3) == "\u001b[1;3H"
	assert terminal_colours.Cursor.POS(y=1) == "\u001b[1;1H"
	assert terminal_colours.Cursor.POS(y=2) == "\u001b[2;1H"
	assert terminal_colours.Cursor.POS(y=3) == "\u001b[3;1H"
	assert terminal_colours.Cursor.POS(x=1) == "\u001b[1;1H"
	assert terminal_colours.Cursor.POS(x=2) == "\u001b[1;2H"
	assert terminal_colours.Cursor.POS(x=3) == "\u001b[1;3H"
	assert terminal_colours.Cursor.POS(1, 1) == "\u001b[1;1H"
	assert terminal_colours.Cursor.POS(2, 2) == "\u001b[2;2H"
	assert terminal_colours.Cursor.POS(3, 3) == "\u001b[3;3H"
	assert terminal_colours.Cursor.POS(x=2, y=3) == "\u001b[3;2H"


class TestColour:

	def test_from_code(self):
		black = Colour.from_code(30)
		assert black == "\u001b[30m"
		assert black("Hello") == "\u001b[30mHello\u001b[39m"

		black = Colour.from_code(40, background=True)
		assert black == "\u001b[40m"
		assert black("Hello") == "\u001b[40mHello\u001b[49m"

	def test_from_rgb(self):
		yellow = Colour.from_rgb(252, 186, 3)
		assert yellow == "\u001b[38;2;252;186;3m"
		assert yellow("Hello") == "\u001b[38;2;252;186;3mHello\u001b[39m"

		yellow = Colour.from_rgb(252, 186, 3, background=True)
		assert yellow == "\u001b[48;2;252;186;3m"
		assert yellow("Hello") == "\u001b[48;2;252;186;3mHello\u001b[49m"

	def test_from_hex(self):
		yellow = Colour.from_hex("#fcba03")
		assert yellow == "\u001b[38;2;252;186;3m"
		assert yellow("Hello") == "\u001b[38;2;252;186;3mHello\u001b[39m"

		yellow = Colour.from_hex("#fcba03", background=True)
		assert yellow == "\u001b[48;2;252;186;3m"
		assert yellow("Hello") == "\u001b[48;2;252;186;3mHello\u001b[49m"


def test_print_256_colour_testpattern(
		monkeypatch,
		advanced_file_regression: AdvancedFileRegressionFixture,
		capsys,
		):
	monkeypatch.setattr(terminal_colours, "resolve_color_default", lambda *args: False)

	# Checks only the structure, not the colours
	print_256_colour_testpattern()

	check_file_regression(strip_ansi(capsys.readouterr().out.strip()), advanced_file_regression)