Files
FlexLove/testing/loveStub.lua
2025-10-15 20:11:27 -04:00

206 lines
4.5 KiB
Lua

-- Stub implementations for LOVE functions to enable testing of FlexLove
-- This file provides mock implementations of LOVE functions used in FlexLove
local love_helper = {}
-- Mock window state
local mockWindowWidth = 800
local mockWindowHeight = 600
-- Mock window functions
love_helper.window = {}
function love_helper.window.getMode()
return mockWindowWidth, mockWindowHeight
end
function love_helper.window.setMode(width, height)
mockWindowWidth = width
mockWindowHeight = height
return true
end
-- Mock graphics functions
love_helper.graphics = {}
function love_helper.graphics.getDimensions()
return mockWindowWidth, mockWindowHeight
end
function love_helper.graphics.newFont(size)
-- Ensure size is a number
local fontSize = tonumber(size) or 12
-- Return a mock font object with basic methods
return {
getWidth = function(self, text)
-- Handle both colon and dot syntax
if type(self) == "string" then
-- Called with dot syntax: font.getWidth(text)
return #self * fontSize / 2
else
-- Called with colon syntax: font:getWidth(text)
return #text * fontSize / 2
end
end,
getHeight = function()
return fontSize
end,
}
end
function love_helper.graphics.getFont()
-- Return a mock default font
return {
getWidth = function(self, text)
-- Handle both colon and dot syntax
if type(self) == "string" then
-- Called with dot syntax: font.getWidth(text)
return #self * 12 / 2
else
-- Called with colon syntax: font:getWidth(text)
return #text * 12 / 2
end
end,
getHeight = function()
return 12
end,
}
end
function love_helper.graphics.setColor(r, g, b, a)
-- Mock color setting
end
function love_helper.graphics.setFont(font)
-- Mock font setting
end
function love_helper.graphics.rectangle(mode, x, y, width, height)
-- Mock rectangle drawing
end
function love_helper.graphics.line(x1, y1, x2, y2)
-- Mock line drawing
end
function love_helper.graphics.print(text, x, y)
-- Mock text printing
end
-- Mock mouse functions
love_helper.mouse = {}
-- Mock mouse state
local mockMouseX = 0
local mockMouseY = 0
local mockMouseButtons = {} -- Table to track button states
function love_helper.mouse.getPosition()
return mockMouseX, mockMouseY
end
function love_helper.mouse.setPosition(x, y)
mockMouseX = x
mockMouseY = y
end
function love_helper.mouse.isDown(button)
return mockMouseButtons[button] or false
end
function love_helper.mouse.setDown(button, isDown)
mockMouseButtons[button] = isDown
end
-- Mock timer functions
love_helper.timer = {}
-- Mock time state
local mockTime = 0
function love_helper.timer.getTime()
return mockTime
end
function love_helper.timer.setTime(time)
mockTime = time
end
function love_helper.timer.step(dt)
mockTime = mockTime + dt
end
-- Mock keyboard functions
love_helper.keyboard = {}
-- Mock keyboard state
local mockKeyboardKeys = {} -- Table to track key states
function love_helper.keyboard.isDown(key)
return mockKeyboardKeys[key] or false
end
function love_helper.keyboard.setDown(key, isDown)
mockKeyboardKeys[key] = isDown
end
-- Mock touch functions
love_helper.touch = {}
function love_helper.touch.getTouches()
return {} -- Empty table of touches
end
function love_helper.touch.getPosition(id)
return 0, 0 -- Default touch position
end
-- Mock image functions
love_helper.image = {}
-- Mock ImageData object
local ImageData = {}
ImageData.__index = ImageData
function ImageData.new(width, height)
local self = setmetatable({}, ImageData)
self.width = width
self.height = height
-- Store pixel data as a 2D array [y][x] = {r, g, b, a}
self.pixels = {}
for y = 0, height - 1 do
self.pixels[y] = {}
for x = 0, width - 1 do
self.pixels[y][x] = {0, 0, 0, 0} -- Default to transparent black
end
end
return self
end
function ImageData:getWidth()
return self.width
end
function ImageData:getHeight()
return self.height
end
function ImageData:setPixel(x, y, r, g, b, a)
if x >= 0 and x < self.width and y >= 0 and y < self.height then
self.pixels[y][x] = {r, g, b, a or 1}
end
end
function ImageData:getPixel(x, y)
if x >= 0 and x < self.width and y >= 0 and y < self.height then
local pixel = self.pixels[y][x]
return pixel[1], pixel[2], pixel[3], pixel[4]
end
return 0, 0, 0, 0
end
function love_helper.image.newImageData(width, height)
return ImageData.new(width, height)
end
_G.love = love_helper
return love_helper