def test_alternative_transparent_colour_overridden_by_mask(self): # White (PAPER) as transparent colour, overridden by mask iw_args = {'options': self.alpha_option} udg = Udg(56, (15,) * 8, (207,) * 8) udg_array = [[udg]] self._test_image(udg_array, mask=1, tindex=8, iw_args=iw_args)
def test_option_p(self, mock_open): scr = [0] * 6912 exp_udgs = [[Udg(0, [0] * 8)] * 32 for i in range(24)] exp_udgs[0][0] = Udg(0, [255, 0, 0, 0, 0, 0, 0, 0]) self._test_sna2img(mock_open, '-p 16384,255', scr, exp_udgs)
def test_option_p_address_range_with_step(self, mock_open): scr = [0] * 6912 exp_udgs = [[Udg(0, [0] * 8)] * 32 for i in range(24)] exp_udgs[0][0] = Udg(0, [15] * 8) self._test_sna2img(mock_open, '-p 16384-18176-256,15', scr, exp_udgs)
def test_option_f_3(self, mock_open): scr = ([170] * 256 + [0] * 256) * 12 + [2] * 768 exp_udgs = [[Udg(2, [0, 85] * 4)] * 32] * 24 self._test_sna2img(mock_open, '--flip 3', scr, exp_udgs)
def test_option_m_multiple(self, mock_open): scr = [1, 1, 2, 2] + [0] * 6908 exp_udgs = [[Udg(56, [1, 1, 0, 0, 0, 0, 2, 2])]] options = '-e UDG16392 -m 16384,2,16392 --move 16386,2,16398' self._test_sna2img(mock_open, options, scr, exp_udgs, scale=4)
def test_szx_input(self, mock_open): scr = ([170] * 256 + [0] * 256) * 12 + [7] * 768 exp_udgs = [[Udg(7, [170, 0] * 4)] * 32] * 24 self._test_sna2img(mock_open, '', scr, exp_udgs, ftype='szx')
def test_option_f_1(self, mock_open): scr = [170] * 6144 + [56] * 768 exp_udgs = [[Udg(56, [85] * 8)] * 32] * 24 self._test_sna2img(mock_open, '-f 1', scr, exp_udgs)
def test_option_p_0x_hexadecimal_values(self, mock_open): scr = [0] * 6912 exp_udgs = [[Udg(0, [0] * 8)] * 32 for i in range(24)] exp_udgs[0][0] = Udg(0, [31] * 8) self._test_sna2img(mock_open, '-p 0x4000-0x4700-0x100,0x1f', scr, exp_udgs)
def test_option_p_with_add_operation(self, mock_open): scr = [0] * 6912 exp_udgs = [[Udg(0, [0] * 8)] * 32 for i in range(24)] exp_udgs[0][0].data[0] = 5 self._test_sna2img(mock_open, '-p 16384-16415,+5', scr, exp_udgs)
def test_animation_with_alternative_alpha(self): # White (PAPER) as transparent colour on first frame frame1 = Frame([[Udg(56, (15,) * 8)]], tindex=8, alpha=128) frame2 = Frame([[Udg(1, (15,) * 8)]]) frames = [frame1, frame2] self._test_animated_image(frames)
def test_animation_with_alternative_transparent_colour_and_alpha_on_second_frame_only(self): # Yellow (PAPER) as transparent colour on second frame frame1 = Frame([[Udg(56, (15,) * 8)]], tindex=7, alpha=20) frame2 = Frame([[Udg(48, (15,) * 8)]]) frames = [frame1, frame2] self._test_animated_image(frames)
def test_animation_cropped(self): # 2 frames, 4 colours, 4x4 frame1 = Frame([[Udg(56, (128,) * 8)]], x=1, y=1, width=4, height=4) frame2 = Frame([[Udg(49, (64,) * 8)]], x=2, y=3, width=4, height=4) frames = [frame1, frame2] self._test_animated_image(frames)
def test_alternative_alpha_255_with_alternative_transparent_colour(self): # White (PAPER) as transparent colour udg = Udg(56, (15,) * 8) udg_array = [[udg]] self._test_image(udg_array, tindex=8, alpha=255)
def test_alternative_alpha_with_no_transparent_colour(self): # Black INK, white PAPER, cyan as transparent colour udg = Udg(56, (15,) * 8) udg_array = [[udg]] self._test_image(udg_array, tindex=6, alpha=200)
def test_gif_output(self, mock_open): scr = ([85] * 256 + [0] * 256) * 12 + [5] * 768 exp_udgs = [[Udg(5, [85, 0] * 4)] * 32] * 24 self._test_sna2img(mock_open, '', scr, exp_udgs, outfile='scr.gif')
def test_option_p_with_xor_operation(self, mock_open): scr = [255] * 6912 exp_udgs = [[Udg(255, [255] * 8)] * 32 for i in range(24)] exp_udgs[0][0].data[0] = 240 self._test_sna2img(mock_open, '-p 16384-16415,^15', scr, exp_udgs)
def test_sna_input(self, mock_open): scr = ([84] * 256 + [0] * 256) * 12 + [6] * 768 exp_udgs = [[Udg(6, [84, 0] * 4)] * 32] * 24 self._test_sna2img(mock_open, '', scr, exp_udgs, ftype='sna')
def test_option_r_1(self, mock_open): scr = ([170] * 256 + [0] * 256) * 12 + [56] * 768 exp_udgs = [[Udg(56, [85, 0] * 4)] * 24] * 32 self._test_sna2img(mock_open, '-r 1', scr, exp_udgs)
def test_z80_input(self, mock_open): scr = ([42] * 256 + [0] * 256) * 12 + [8] * 768 exp_udgs = [[Udg(8, [42, 0] * 4)] * 32] * 24 self._test_sna2img(mock_open, '', scr, exp_udgs, ftype='z80')
def test_option_r_3(self, mock_open): scr = ([170] * 256 + [0] * 256) * 12 + [2] * 768 exp_udgs = [[Udg(2, [0, 170] * 4)] * 24] * 32 self._test_sna2img(mock_open, '--rotate 3', scr, exp_udgs)
def test_option_f_2(self, mock_open): scr = ([255] * 256 + [0] * 256) * 12 + [1] * 768 exp_udgs = [[Udg(1, [0, 255] * 4)] * 32] * 24 self._test_sna2img(mock_open, '-f 2', scr, exp_udgs)
def test_option_s(self, mock_open): scr = [0] * 6144 + [1] * 768 exp_udgs = [[Udg(1, [0] * 8)] * 32] * 24 self._test_sna2img(mock_open, '-s 2', scr, exp_udgs, 2)
def test_option_i(self, mock_open): scr = [85] * 6144 + [135, 7] * 384 udg1 = Udg(7, [170] * 8) # Inverted udg2 = Udg(7, [85] * 8) # Unchanged exp_udgs = [[udg1, udg2] * 16] * 24 self._test_sna2img(mock_open, '-i', scr, exp_udgs)
def test_option_S(self, mock_open): scr = [15] * 6144 + [4] * 32 + [7] * 736 exp_udgs = [[Udg(4, [15] * 8)] * 5] + [[Udg(7, [15] * 8)] * 5] * 5 self._test_sna2img(mock_open, '-S 5x6', scr, exp_udgs)
def test_option_o(self, mock_open): scr = [240] * 6144 + [7] * 736 + [4] * 32 exp_udgs = [[Udg(7, [240] * 8)] * 5] * 5 + [[Udg(4, [240] * 8)] * 5] self._test_sna2img(mock_open, '-o 27,18', scr, exp_udgs)
# SkoolKit. If not, see <http://www.gnu.org/licenses/>. from collections import defaultdict import inspect import re from skoolkit import VERSION, SkoolKitError, SkoolParsingError from skoolkit.graphics import Udg _map_cache = {} _writer = None _cwd = () FILL_UDG = Udg(66, [129, 66, 36, 24, 24, 36, 66, 128]) MACRO_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' DELIMITERS = { '(': ')', '[': ']', '{': '}' } AE_CHARS = frozenset(' !=+-*/<>&|^%$ABCDEFabcdef0123456789()') INTEGER = '(\d+|\$[0-9a-fA-F]+)' PARAM_NAME = '[a-z]+'
def test_option_p_address_range(self, mock_open): scr = [0] * 6912 exp_udgs = [[Udg(0, [0] * 8)] * 32 for i in range(24)] exp_udgs[0][0].data[0] = 255 self._test_sna2img(mock_open, '-p 16384-16415,255', scr, exp_udgs)
def test_no_options(self, mock_open): scr = ([170] * 256 + [0] * 256) * 12 + [4] * 768 exp_udgs = [[Udg(4, [170, 0] * 4)] * 32] * 24 self._test_sna2img(mock_open, '', scr, exp_udgs)
def test_option_p_hexadecimal_values(self, mock_open): scr = [0] * 6912 exp_udgs = [[Udg(0, [0] * 8)] * 32 for i in range(24)] exp_udgs[0][0] = Udg(0, [15] * 8) self._test_sna2img(mock_open, '-p $4000-$4700-$100,$0f', scr, exp_udgs)
def test_alternative_transparent_colour_ink(self): # Black (INK) as transparent colour iw_args = {'options': self.alpha_option} udg = Udg(56, (15,) * 8) udg_array = [[udg]] self._test_image(udg_array, tindex=1, iw_args=iw_args)