Skip to main content
Glama
test_lua_builder.py10.5 kB
"""Tests for Lua builder module.""" import pytest from aseprite_mcp.core.lua_builder import LuaBuilder class TestLuaBuilder: """Tests for LuaBuilder class.""" def test_basic_line_addition(self): """Test basic line addition and indentation.""" builder = LuaBuilder() builder.add_line("local x = 1") builder.add_line("local y = 2") script = builder.build() assert script == "local x = 1\nlocal y = 2" def test_indentation(self): """Test indentation management.""" builder = LuaBuilder() builder.add_line("function test()") builder.indent() builder.add_line("local x = 1") builder.add_line("return x") builder.dedent() builder.add_line("end") expected = "function test()\n local x = 1\n return x\nend" assert builder.build() == expected def test_comments(self): """Test comment addition.""" builder = LuaBuilder() builder.add_comment("This is a comment") builder.add_line("local x = 1") expected = "-- This is a comment\nlocal x = 1" assert builder.build() == expected def test_transaction(self): """Test transaction blocks.""" builder = LuaBuilder() builder.begin_transaction() builder.add_line("sprite:newLayer()") builder.end_transaction() expected = "app.transaction(function()\n sprite:newLayer()\nend)" assert builder.build() == expected def test_auto_close_transaction(self): """Test that open transactions are auto-closed.""" builder = LuaBuilder() builder.begin_transaction() builder.add_line("sprite:newLayer()") # Don't explicitly end transaction expected = "app.transaction(function()\n sprite:newLayer()\nend)" assert builder.build() == expected def test_create_sprite(self): """Test sprite creation.""" builder = LuaBuilder() builder.create_sprite(100, 200) expected = "local sprite = Sprite(100, 200, ColorMode.RGBA)" assert builder.build() == expected def test_open_sprite(self): """Test sprite opening.""" builder = LuaBuilder() builder.open_sprite("test.aseprite") expected = 'local sprite = app.open("test.aseprite")\napp.activeSprite = sprite' assert builder.build() == expected def test_save_sprite(self): """Test sprite saving.""" builder = LuaBuilder() builder.save_sprite() expected = "app.activeSprite:save()" assert builder.build() == expected # Test with filename builder = LuaBuilder() builder.save_sprite("output.aseprite") expected = 'app.activeSprite:saveAs("output.aseprite")' assert builder.build() == expected def test_layer_operations(self): """Test layer operations.""" builder = LuaBuilder() builder.create_layer("New Layer") expected = 'local layer = app.activeSprite:newLayer()\nlayer.name = "New Layer"' assert builder.build() == expected # Test set active layer by name builder = LuaBuilder() builder.set_active_layer(layer_name="Background") expected = 'app.activeLayer = app.activeSprite.layers["Background"]' assert builder.build() == expected # Test set active layer by index builder = LuaBuilder() builder.set_active_layer(layer_index=0) expected = 'app.activeLayer = app.activeSprite.layers[1]' # Lua is 1-indexed assert builder.build() == expected def test_color_setting(self): """Test color setting.""" builder = LuaBuilder() builder.set_color("FF0000") expected = "app.fgColor = Color{r=255, g=0, b=0, a=255}" assert builder.build() == expected def test_draw_pixel(self): """Test single pixel drawing.""" builder = LuaBuilder() builder.draw_pixel(10, 20) expected = """app.useTool{ tool="pencil", points={{x=10, y=20}} }""" assert builder.build() == expected # Test with color builder = LuaBuilder() builder.draw_pixel(10, 20, "FF0000") expected = """app.fgColor = Color{r=255, g=0, b=0, a=255} app.useTool{ tool="pencil", points={{x=10, y=20}} }""" assert builder.build() == expected def test_draw_pixels_batch(self): """Test batch pixel drawing.""" builder = LuaBuilder() pixels = [ {"x": 10, "y": 20, "color": "FF0000"}, {"x": 11, "y": 21, "color": "FF0000"}, {"x": 12, "y": 22, "color": "00FF00"} ] builder.draw_pixels(pixels) script = builder.build() # Should group by color assert "app.fgColor = Color{r=255, g=0, b=0, a=255}" in script assert "points={{x=10, y=20}, {x=11, y=21}}" in script assert "app.fgColor = Color{r=0, g=255, b=0, a=255}" in script assert "points={{x=12, y=22}}" in script def test_draw_line(self): """Test line drawing.""" builder = LuaBuilder() builder.draw_line(0, 0, 100, 100, thickness=2) expected = """app.useTool{ tool="line", brush=Brush(2), points={{x=0, y=0}, {x=100, y=100}} }""" assert builder.build() == expected def test_draw_rectangle(self): """Test rectangle drawing.""" # Outline rectangle builder = LuaBuilder() builder.draw_rectangle(10, 20, 30, 40, filled=False) expected = """app.useTool{ tool="rectangle", points={{x=10, y=20}, {x=40, y=60}} }""" assert builder.build() == expected # Filled rectangle builder = LuaBuilder() builder.draw_rectangle(10, 20, 30, 40, filled=True) expected = """app.useTool{ tool="filled_rectangle", points={{x=10, y=20}, {x=40, y=60}} }""" assert builder.build() == expected def test_draw_circle(self): """Test circle drawing.""" # Outline circle builder = LuaBuilder() builder.draw_circle(50, 50, 20, filled=False) expected = """app.useTool{ tool="ellipse", points={{x=30, y=30}, {x=70, y=70}} }""" assert builder.build() == expected # Filled circle builder = LuaBuilder() builder.draw_circle(50, 50, 20, filled=True) expected = """app.useTool{ tool="filled_ellipse", points={{x=30, y=30}, {x=70, y=70}} }""" assert builder.build() == expected def test_fill_area(self): """Test area filling.""" builder = LuaBuilder() builder.fill_area(50, 50, "FF0000", tolerance=10) expected = """app.fgColor = Color{r=255, g=0, b=0, a=255} app.useTool{ tool="paint_bucket", points={{x=50, y=50}}, tolerance=10 }""" assert builder.build() == expected def test_export_sprite(self): """Test sprite export.""" # Basic export builder = LuaBuilder() builder.export_sprite("output.png") expected = 'app.activeSprite:saveCopyAs("output.png")' assert builder.build() == expected # Export with scale builder = LuaBuilder() builder.export_sprite("output.png", scale=2.0) expected = """app.command.ExportSpriteSheet{ type="none", columns=1, rows=1, scale=2.0, outputFile="output.png" }""" assert builder.build() == expected def test_add_frame(self): """Test frame addition.""" # Add frame at end builder = LuaBuilder() builder.add_frame() expected = "app.activeSprite:newFrame()" assert builder.build() == expected # Add frame after specific frame builder = LuaBuilder() builder.add_frame(after_frame=2) expected = "app.activeSprite:newFrame(3)" # Lua is 1-indexed assert builder.build() == expected def test_control_structures(self): """Test if/else and loops.""" # If statement builder = LuaBuilder() builder.if_condition("x > 0") builder.add_line("print('positive')") builder.end_if() expected = """if x > 0 then print('positive') end""" assert builder.build() == expected # If/else statement builder = LuaBuilder() builder.if_condition("x > 0") builder.add_line("print('positive')") builder.else_block() builder.add_line("print('non-positive')") builder.end_if() expected = """if x > 0 then print('positive') else print('non-positive') end""" assert builder.build() == expected # For loop builder = LuaBuilder() builder.for_loop("i", 1, 10) builder.add_line("print(i)") builder.end_loop() expected = """for i = 1, 10 do print(i) end""" assert builder.build() == expected # For loop with step builder = LuaBuilder() builder.for_loop("i", 1, 10, step=2) builder.add_line("print(i)") builder.end_loop() expected = """for i = 1, 10, 2 do print(i) end""" assert builder.build() == expected def test_complex_script(self): """Test building a complex script.""" builder = LuaBuilder() builder.open_sprite("test.aseprite") builder.add_line() builder.begin_transaction() builder.create_layer("Effects") builder.set_color("FF0000") builder.for_loop("i", 0, 9) builder.draw_pixel(10, "i * 10") builder.end_loop() builder.end_transaction() builder.save_sprite() expected = """local sprite = app.open("test.aseprite") app.activeSprite = sprite app.transaction(function() local layer = app.activeSprite:newLayer() layer.name = "Effects" app.fgColor = Color{r=255, g=0, b=0, a=255} for i = 0, 9 do app.useTool{ tool="pencil", points={{x=10, y=i * 10}} } end end) app.activeSprite:save()""" assert builder.build() == expected

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ext-sakamoro/AsepriteMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server