229 lines
5.9 KiB
Lua
229 lines
5.9 KiB
Lua
local gpu = component.list('gpu')();
|
|
if not gpu then error("can't run without a gpu!"); end
|
|
|
|
local screen = component.list('screen')();
|
|
if not screen then error("can't run without a screen!"); end
|
|
|
|
local w,h = component.invoke(gpu, 'getResolution');
|
|
|
|
component.invoke(gpu, "bind", screen);
|
|
|
|
local emulog = function() end;
|
|
if debug and debug.print then emulog = debug.print end
|
|
|
|
local tests = {
|
|
{name = "component.methods", run = function()
|
|
if not component.methods then return "FAIL" end
|
|
|
|
local ok, val = pcall(component.methods, gpu);
|
|
if not ok then return "FAIL" end
|
|
|
|
if not val.set or not val.setForeground or not val.setBackground then
|
|
return "FAIL"
|
|
end
|
|
|
|
return "PASS"
|
|
end},
|
|
{name = "component.slot", run = function()
|
|
local slot = component.slot(gpu)
|
|
|
|
if not slot then return "FAIL" end
|
|
|
|
return "PASS"
|
|
end},
|
|
{name = "component.proxy", run = function()
|
|
local gpuprox = component.proxy(gpu);
|
|
|
|
if gpuprox.address ~= gpu then return "FAIL" end
|
|
if gpuprox.slot ~= component.slot(gpu) then return "FAIL" end
|
|
if gpuprox.type ~= "gpu" then return "FAIL" end
|
|
|
|
local methods = component.methods(gpu);
|
|
|
|
for k,v in pairs(methods) do
|
|
if not gpuprox[k] then return "FAIL" end
|
|
end
|
|
|
|
return "PASS"
|
|
end},
|
|
{name = "eeprom: readable (code & data)", run = function()
|
|
local eeprom = component.list('eeprom')()
|
|
if not eeprom then return "SKIP" end
|
|
|
|
local code = component.invoke(eeprom, 'get');
|
|
if type(code) ~= "string" then return "FAIL" end
|
|
|
|
local data = component.invoke(eeprom, 'getData');
|
|
if type(data) ~= "string" then return "FAIL" end
|
|
|
|
return "PASS"
|
|
end},
|
|
{name = "eeprom: read & writable (code & data)", run = function()
|
|
local eeprom = component.list('eeprom')()
|
|
if not eeprom then return "SKIP" end
|
|
|
|
local methods = component.methods(eeprom)
|
|
if not methods.isReadOnly then return "SKIP" end
|
|
|
|
if component.invoke(eeprom, 'isReadOnly') then
|
|
return "SKIP"
|
|
end
|
|
|
|
local code = component.invoke(eeprom, 'get');
|
|
if type(code) ~= "string" then return "FAIL" end
|
|
|
|
local data = component.invoke(eeprom, 'getData');
|
|
if type(data) ~= "string" then return "FAIL" end
|
|
|
|
local testData = "HELLO MY NAME IS BLENDI GOOSE AND I AM WRITING THIS CODE RIGHT NOW; wow what a good test message thank you, me."
|
|
|
|
component.invoke(eeprom, 'set', testData);
|
|
if testData ~= component.invoke(eeprom, 'get') then
|
|
return "FAIL"
|
|
end
|
|
component.invoke(eeprom, 'set', code); -- don't wanna fuck up the thing lol
|
|
|
|
component.invoke(eeprom, 'setData', testData);
|
|
if testData ~= component.invoke(eeprom, 'getData') then
|
|
return "FAIL"
|
|
end
|
|
component.invoke(eeprom, 'setData', data);
|
|
|
|
return "PASS"
|
|
end},
|
|
{name = "eeprom: read label", run = function()
|
|
local eeprom = component.list('eeprom')()
|
|
if not eeprom then return "SKIP" end
|
|
|
|
local label, err = component.invoke(eeprom, 'getLabel');
|
|
if err then return "FAIL" end
|
|
|
|
if (label ~= nil) and (type(label) ~= "string") then return "FAIL" end
|
|
|
|
return "PASS"
|
|
end},
|
|
{name = "eeprom: r/w label", run = function()
|
|
local eeprom = component.list('eeprom')()
|
|
if not eeprom then return "SKIP" end
|
|
|
|
local methods = component.methods(eeprom)
|
|
if not methods.isReadOnly then return "SKIP" end
|
|
|
|
if component.invoke(eeprom, 'isReadOnly') then
|
|
return "SKIP"
|
|
end
|
|
|
|
local label, err = component.invoke(eeprom, 'getLabel');
|
|
if err then return "FAIL" end
|
|
if (label ~= nil) and (type(label) ~= "string") then return "FAIL" end
|
|
|
|
local testlabel = "I AM A TEST"
|
|
component.invoke(eeprom, 'setLabel', testlabel);
|
|
if testlabel ~= component.invoke(eeprom, 'getLabel') then
|
|
return "FAIL"
|
|
end
|
|
component.invoke(eeprom, 'setLabel', label)
|
|
|
|
return "PASS"
|
|
end},
|
|
{name = "eeprom: other methods", run = function()
|
|
local eeprom = component.list('eeprom')();
|
|
|
|
if type(component.invoke(eeprom, 'getSize')) ~= "number" then return "FAIL" end
|
|
if type(component.invoke(eeprom, 'getDataSize')) ~= "number" then return "FAIL" end
|
|
if type(component.invoke(eeprom, 'getChecksum')) ~= "string" then return "FAIL" end
|
|
|
|
return "PASS"
|
|
end}
|
|
}
|
|
|
|
local page = 1
|
|
local selected = 1
|
|
|
|
local perpage = h - 1;
|
|
local pagec = math.ceil(#tests / perpage)
|
|
|
|
function render()
|
|
component.invoke(gpu, "setForeground", 0xffffff);
|
|
component.invoke(gpu, "setBackground", 0x000000);
|
|
|
|
component.invoke(gpu, "set", 1, 1, "Shitfucker, page " .. tostring(page) .. '/' .. tostring(pagec));
|
|
|
|
local pagelen = math.min(perpage, #tests - (page-1)*perpage)
|
|
|
|
for i = 1,pagelen do
|
|
local testid = i + (page-1)*perpage
|
|
local test = tests[testid];
|
|
|
|
local y = i + 1;
|
|
component.invoke(gpu, "set", 1, y, string.rep(" ", w))
|
|
component.invoke(gpu, "set", 7, y, test.name);
|
|
|
|
local state = test.state or "TEST"
|
|
|
|
if i == selected then
|
|
component.invoke(gpu, "setForeground", 0x000000);
|
|
component.invoke(gpu, "setBackground", 0xffffff);
|
|
end
|
|
|
|
component.invoke(gpu, "set", 2, y, state);
|
|
|
|
if i == selected then
|
|
component.invoke(gpu, "setForeground", 0xffffff);
|
|
component.invoke(gpu, "setBackground", 0x000000);
|
|
end
|
|
end
|
|
|
|
for i = pagelen+1, perpage do
|
|
component.invoke(gpu, "set", 1, i+1, string.rep(" ", w))
|
|
end
|
|
end
|
|
|
|
while true do
|
|
render()
|
|
|
|
local event = {computer.pullSignal(0.1)}
|
|
|
|
if event[1] == "key_down" then
|
|
local key = event[4]
|
|
|
|
if key == 0xcb then -- left
|
|
page = page - 1;
|
|
elseif key == 0xcd then -- right
|
|
page = page + 1;
|
|
end
|
|
|
|
if page < 1 then page = 1 end
|
|
if page > pagec then page = pagec end
|
|
|
|
|
|
if key == 0xc8 then -- up
|
|
selected = selected - 1
|
|
elseif key == 0xd0 then -- down
|
|
selected = selected + 1
|
|
end
|
|
|
|
local pagelen = math.min(perpage, #tests - (page-1)*perpage)
|
|
|
|
if selected < 1 then selected = 1 end
|
|
if selected > pagelen then selected = pagelen end
|
|
|
|
|
|
local char = event[3]
|
|
|
|
if char == "\r" or key == 0x1c then -- enter
|
|
local testid = selected + (page-1)*perpage
|
|
|
|
local test = tests[testid]
|
|
|
|
local ok, res = pcall(test.run)
|
|
if not ok then
|
|
emulog(res)
|
|
test.state = "CRASH"
|
|
else
|
|
if res then test.state = res else test.state = "FAIL" end
|
|
end
|
|
end
|
|
end
|
|
end
|