1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2024-06-26 07:03:22 +00:00

Some cleanup to argument checking

- Consult __name in native code too. Closes #1355. This has the added
   advantage that unconvertable values (i.e. functions) will now
   correctly be reported as their original type, not just nil.

 - Fix the error message in cc.expect, so it matches the rest of Lua.
   This has been bugging me for years, and I keep forgetting to change
   it.
This commit is contained in:
Jonathan Coates 2023-03-28 19:17:15 +01:00
parent 8a203e7454
commit 435aea18dc
No known key found for this signature in database
GPG Key ID: B9E431FF07C98D06
35 changed files with 253 additions and 215 deletions

View File

@ -39,6 +39,20 @@ public interface IArguments {
@Nullable
Object get(int index);
/**
* Get the type name of the argument at the specific index.
* <p>
* This method is meant to be used in error reporting (namely with {@link LuaValues#badArgumentOf(IArguments, int, String)}),
* and should not be used to determine the actual type of an argument.
*
* @param index The argument number.
* @return The name of this type.
* @see LuaValues#getType(Object)
*/
default String getType(int index) {
return LuaValues.getType(get(index));
}
/**
* Drop a number of arguments. The returned arguments instance will access arguments at position {@code i + count},
* rather than {@code i}. However, errors will still use the given argument index.
@ -64,7 +78,7 @@ default Object[] getAll() {
*/
default double getDouble(int index) throws LuaException {
var value = get(index);
if (!(value instanceof Number number)) throw LuaValues.badArgumentOf(index, "number", value);
if (!(value instanceof Number number)) throw LuaValues.badArgumentOf(this, index, "number");
return number.doubleValue();
}
@ -88,7 +102,7 @@ default int getInt(int index) throws LuaException {
*/
default long getLong(int index) throws LuaException {
var value = get(index);
if (!(value instanceof Number number)) throw LuaValues.badArgumentOf(index, "number", value);
if (!(value instanceof Number number)) throw LuaValues.badArgumentOf(this, index, "number");
return LuaValues.checkFiniteNum(index, number).longValue();
}
@ -112,7 +126,7 @@ default double getFiniteDouble(int index) throws LuaException {
*/
default boolean getBoolean(int index) throws LuaException {
var value = get(index);
if (!(value instanceof Boolean bool)) throw LuaValues.badArgumentOf(index, "boolean", value);
if (!(value instanceof Boolean bool)) throw LuaValues.badArgumentOf(this, index, "boolean");
return bool;
}
@ -125,7 +139,7 @@ default boolean getBoolean(int index) throws LuaException {
*/
default String getString(int index) throws LuaException {
var value = get(index);
if (!(value instanceof String string)) throw LuaValues.badArgumentOf(index, "string", value);
if (!(value instanceof String string)) throw LuaValues.badArgumentOf(this, index, "string");
return string;
}
@ -162,7 +176,7 @@ default <T extends Enum<T>> T getEnum(int index, Class<T> klass) throws LuaExcep
*/
default Map<?, ?> getTable(int index) throws LuaException {
var value = get(index);
if (!(value instanceof Map)) throw LuaValues.badArgumentOf(index, "table", value);
if (!(value instanceof Map)) throw LuaValues.badArgumentOf(this, index, "table");
return (Map<?, ?>) value;
}
@ -192,7 +206,7 @@ default <T extends Enum<T>> T getEnum(int index, Class<T> klass) throws LuaExcep
default Optional<Double> optDouble(int index) throws LuaException {
var value = get(index);
if (value == null) return Optional.empty();
if (!(value instanceof Number number)) throw LuaValues.badArgumentOf(index, "number", value);
if (!(value instanceof Number number)) throw LuaValues.badArgumentOf(this, index, "number");
return Optional.of(number.doubleValue());
}
@ -217,7 +231,7 @@ default Optional<Integer> optInt(int index) throws LuaException {
default Optional<Long> optLong(int index) throws LuaException {
var value = get(index);
if (value == null) return Optional.empty();
if (!(value instanceof Number number)) throw LuaValues.badArgumentOf(index, "number", value);
if (!(value instanceof Number number)) throw LuaValues.badArgumentOf(this, index, "number");
return Optional.of(LuaValues.checkFiniteNum(index, number).longValue());
}
@ -244,7 +258,7 @@ default Optional<Double> optFiniteDouble(int index) throws LuaException {
default Optional<Boolean> optBoolean(int index) throws LuaException {
var value = get(index);
if (value == null) return Optional.empty();
if (!(value instanceof Boolean bool)) throw LuaValues.badArgumentOf(index, "boolean", value);
if (!(value instanceof Boolean bool)) throw LuaValues.badArgumentOf(this, index, "boolean");
return Optional.of(bool);
}
@ -258,7 +272,7 @@ default Optional<Boolean> optBoolean(int index) throws LuaException {
default Optional<String> optString(int index) throws LuaException {
var value = get(index);
if (value == null) return Optional.empty();
if (!(value instanceof String string)) throw LuaValues.badArgumentOf(index, "string", value);
if (!(value instanceof String string)) throw LuaValues.badArgumentOf(this, index, "string");
return Optional.of(string);
}
@ -297,7 +311,7 @@ default <T extends Enum<T>> Optional<T> optEnum(int index, Class<T> klass) throw
default Optional<Map<?, ?>> optTable(int index) throws LuaException {
var value = get(index);
if (value == null) return Optional.empty();
if (!(value instanceof Map)) throw LuaValues.badArgumentOf(index, "map", value);
if (!(value instanceof Map)) throw LuaValues.badArgumentOf(this, index, "map");
return Optional.of((Map<?, ?>) value);
}
@ -316,7 +330,7 @@ default <T extends Enum<T>> Optional<T> optEnum(int index, Class<T> klass) throw
default Optional<LuaTable<?, ?>> optTableUnsafe(int index) throws LuaException {
var value = get(index);
if (value == null) return Optional.empty();
if (!(value instanceof Map)) throw LuaValues.badArgumentOf(index, "map", value);
if (!(value instanceof Map)) throw LuaValues.badArgumentOf(this, index, "map");
return Optional.of(new ObjectLuaTable((Map<?, ?>) value));
}

View File

@ -64,15 +64,15 @@ public static String getType(@Nullable Object value) {
}
/**
* Construct a "bad argument" exception, from an expected type and the actual value provided.
* Construct a "bad argument" exception, from an {@link IArguments} argument and an expected type.
*
* @param index The argument number, starting from 0.
* @param expected The expected type for this argument.
* @param actual The actual value provided for this argument.
* @param arguments The current arguments.
* @param index The argument number, starting from 0.
* @param expected The expected type for this argument.
* @return The constructed exception, which should be thrown immediately.
*/
public static LuaException badArgumentOf(int index, String expected, @Nullable Object actual) {
return badArgument(index, expected, getType(actual));
public static LuaException badArgumentOf(IArguments arguments, int index, String expected) {
return badArgument(index, expected, arguments.getType(index));
}
/**

View File

@ -60,7 +60,7 @@ public final void write(IArguments arguments) throws LuaException {
} else if (arg instanceof String) {
channel.write(arguments.getBytes(0));
} else {
throw LuaValues.badArgumentOf(0, "string or number", arg);
throw LuaValues.badArgumentOf(arguments, 0, "string or number");
}
} catch (IOException e) {
throw new LuaException(e.getMessage());

View File

@ -13,6 +13,8 @@
import java.nio.ByteBuffer;
import java.util.Optional;
import static org.squiddev.cobalt.Constants.NAME;
final class VarargArguments implements IArguments {
private static final VarargArguments EMPTY = new VarargArguments(Constants.NONE);
@ -49,6 +51,17 @@ public Object get(int index) {
return cache[index] = CobaltLuaMachine.toObject(varargs.arg(index + 1), null);
}
@Override
public String getType(int index) {
var value = varargs.arg(index + 1);
if (value instanceof LuaTable || value instanceof LuaUserdata) {
var metatable = value.getMetatable(null);
if (metatable != null && metatable.rawget(NAME) instanceof LuaString s) return s.toString();
}
return value.typeName();
}
@Override
public IArguments drop(int count) {
if (count < 0) throw new IllegalStateException("count cannot be negative");

View File

@ -20,7 +20,7 @@ placed within a disk drive to access it's internal storage like a disk.
local function isDrive(name)
if type(name) ~= "string" then
error("bad argument #1 (expected string, got " .. type(name) .. ")", 3)
error("bad argument #1 (string expected, got " .. type(name) .. ")", 3)
end
return peripheral.getType(name) == "drive"
end

View File

@ -25,7 +25,7 @@ local function checkKey(options, key, ty, opt)
local valueTy = type(value)
if (value ~= nil or not opt) and valueTy ~= ty then
error(("bad field '%s' (expected %s, got %s"):format(key, ty, valueTy), 4)
error(("bad field '%s' (%s expected, got %s"):format(key, ty, valueTy), 4)
end
end

View File

@ -157,7 +157,7 @@ handleMetatable = {
error("bad argument #" .. i .. " (invalid format)", 2)
end
else
error("bad argument #" .. i .. " (expected string, got " .. type_of(arg) .. ")", 2)
error("bad argument #" .. i .. " (string expected, got " .. type_of(arg) .. ")", 2)
end
output[i] = res

View File

@ -47,7 +47,7 @@ local function create(...)
for i = 1, tFns.n, 1 do
local fn = tFns[i]
if type(fn) ~= "function" then
error("bad argument #" .. i .. " (expected function, got " .. type(fn) .. ")", 3)
error("bad argument #" .. i .. " (function expected, got " .. type(fn) .. ")", 3)
end
tCos[i] = coroutine.create(fn)

View File

@ -181,7 +181,7 @@ local function tabulateCommon(bPaged, ...)
for nu, sItem in pairs(t) do
local ty = type(sItem)
if ty ~= "string" and ty ~= "number" then
error("bad argument #" .. n .. "." .. nu .. " (expected string, got " .. ty .. ")", 3)
error("bad argument #" .. n .. "." .. nu .. " (string expected, got " .. ty .. ")", 3)
end
nMaxLen = math.max(#tostring(sItem) + 1, nMaxLen)
end

View File

@ -79,9 +79,9 @@ local function expect(index, value, ...)
local type_names = get_type_names(...)
if name then
error(("bad argument #%d to '%s' (expected %s, got %s)"):format(index, name, type_names, t), 3)
error(("bad argument #%d to '%s' (%s expected, got %s)"):format(index, name, type_names, t), 3)
else
error(("bad argument #%d (expected %s, got %s)"):format(index, type_names, t), 3)
error(("bad argument #%d (%s expected, got %s)"):format(index, type_names, t), 3)
end
end
@ -107,7 +107,7 @@ local function field(tbl, index, ...)
if value == nil then
error(("field '%s' missing from table"):format(index), 3)
else
error(("bad field '%s' (expected %s, got %s)"):format(index, get_type_names(...), t), 3)
error(("bad field '%s' (%s expected, got %s)"):format(index, get_type_names(...), t), 3)
end
end

View File

@ -167,7 +167,7 @@ local function build(...)
end
if type(arg[1]) ~= "function" then
error(("Bad table entry #1 at argument #%d (expected function, got %s)"):format(i, type(arg[1])), 2)
error(("Bad table entry #1 at argument #%d (function expected, got %s)"):format(i, type(arg[1])), 2)
end
if arg.many and i < arguments.n then

View File

@ -27,7 +27,7 @@ local function check(func, idx, ty, val)
error(('%s: bad argument #%d (got nil)'):format(func, idx), 3)
end
elseif type(val) ~= ty then
return error(('%s: bad argument #%d (expected %s, got %s)'):format(func, idx, ty, type(val)), 3)
return error(('%s: bad argument #%d (%s expected, got %s)'):format(func, idx, ty, type(val)), 3)
end
end

View File

@ -5,8 +5,8 @@
describe("The colors library", function()
describe("colors.combine", function()
it("validates arguments", function()
expect.error(colors.combine, 1, nil):eq("bad argument #2 (expected number, got nil)")
expect.error(colors.combine, 1, 1, nil):eq("bad argument #3 (expected number, got nil)")
expect.error(colors.combine, 1, nil):eq("bad argument #2 (number expected, got nil)")
expect.error(colors.combine, 1, 1, nil):eq("bad argument #3 (number expected, got nil)")
end)
it("combines colours", function()
@ -17,9 +17,9 @@ describe("The colors library", function()
describe("colors.subtract", function()
it("validates arguments", function()
expect.error(colors.subtract, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(colors.subtract, 1, nil):eq("bad argument #2 (expected number, got nil)")
expect.error(colors.subtract, 1, 1, nil):eq("bad argument #3 (expected number, got nil)")
expect.error(colors.subtract, nil):eq("bad argument #1 (number expected, got nil)")
expect.error(colors.subtract, 1, nil):eq("bad argument #2 (number expected, got nil)")
expect.error(colors.subtract, 1, 1, nil):eq("bad argument #3 (number expected, got nil)")
end)
it("subtracts colours", function()
@ -36,8 +36,8 @@ describe("The colors library", function()
describe("colors.test", function()
it("validates arguments", function()
expect.error(colors.test, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(colors.test, 1, nil):eq("bad argument #2 (expected number, got nil)")
expect.error(colors.test, nil):eq("bad argument #1 (number expected, got nil)")
expect.error(colors.test, 1, nil):eq("bad argument #2 (number expected, got nil)")
end)
it("returns true when present", function()
@ -53,9 +53,9 @@ describe("The colors library", function()
describe("colors.packRGB", function()
it("validates arguments", function()
expect.error(colors.packRGB, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(colors.packRGB, 1, nil):eq("bad argument #2 (expected number, got nil)")
expect.error(colors.packRGB, 1, 1, nil):eq("bad argument #3 (expected number, got nil)")
expect.error(colors.packRGB, nil):eq("bad argument #1 (number expected, got nil)")
expect.error(colors.packRGB, 1, nil):eq("bad argument #2 (number expected, got nil)")
expect.error(colors.packRGB, 1, 1, nil):eq("bad argument #3 (number expected, got nil)")
end)
it("packs colours", function()
@ -65,7 +65,7 @@ describe("The colors library", function()
describe("colors.unpackRGB", function()
it("validates arguments", function()
expect.error(colors.unpackRGB, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(colors.unpackRGB, nil):eq("bad argument #1 (number expected, got nil)")
end)
it("unpacks colours", function()
@ -80,7 +80,7 @@ describe("The colors library", function()
describe("colors.toBlit", function()
it("validates arguments", function()
expect.error(colors.toBlit, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(colors.toBlit, nil):eq("bad argument #1 (number expected, got nil)")
end)
it("converts all colors", function()

View File

@ -13,10 +13,10 @@ describe("The fs library", function()
fs.complete("", "", true)
fs.complete("", "", nil, true)
expect.error(fs.complete, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(fs.complete, "", nil):eq("bad argument #2 (expected string, got nil)")
expect.error(fs.complete, "", "", 1):eq("bad argument #3 (expected boolean, got number)")
expect.error(fs.complete, "", "", true, 1):eq("bad argument #4 (expected boolean, got number)")
expect.error(fs.complete, nil):eq("bad argument #1 (string expected, got nil)")
expect.error(fs.complete, "", nil):eq("bad argument #2 (string expected, got nil)")
expect.error(fs.complete, "", "", 1):eq("bad argument #3 (boolean expected, got number)")
expect.error(fs.complete, "", "", true, 1):eq("bad argument #4 (boolean expected, got number)")
end)
describe("include_hidden", function()
@ -64,7 +64,7 @@ describe("The fs library", function()
it("validates arguments", function()
fs.isDriveRoot("")
expect.error(fs.isDriveRoot, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(fs.isDriveRoot, nil):eq("bad argument #1 (string expected, got nil)")
end)
it("correctly identifies drive roots", function()

View File

@ -12,8 +12,8 @@ describe("The gps library", function()
gps.locate(1)
gps.locate(1, true)
expect.error(gps.locate, ""):eq("bad argument #1 (expected number, got string)")
expect.error(gps.locate, 1, ""):eq("bad argument #2 (expected boolean, got string)")
expect.error(gps.locate, ""):eq("bad argument #1 (number expected, got string)")
expect.error(gps.locate, 1, ""):eq("bad argument #2 (boolean expected, got string)")
end)
end)
end)

View File

@ -6,21 +6,21 @@ describe("The help library", function()
describe("help.setPath", function()
it("validates arguments", function()
help.setPath(help.path())
expect.error(help.setPath, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(help.setPath, nil):eq("bad argument #1 (string expected, got nil)")
end)
end)
describe("help.lookup", function()
it("validates arguments", function()
help.lookup("")
expect.error(help.lookup, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(help.lookup, nil):eq("bad argument #1 (string expected, got nil)")
end)
end)
describe("help.completeTopic", function()
it("validates arguments", function()
help.completeTopic("")
expect.error(help.completeTopic, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(help.completeTopic, nil):eq("bad argument #1 (string expected, got nil)")
end)
it("completes topics without extensions", function()

View File

@ -76,7 +76,7 @@ describe("The io library", function()
it("validates arguments", function()
io.lines(nil)
expect.error(io.lines, ""):eq("/: No such file")
expect.error(io.lines, false):eq("bad argument #1 (expected string, got boolean)")
expect.error(io.lines, false):eq("bad argument #1 (string expected, got boolean)")
end)
it("closes the file", function()
@ -167,8 +167,8 @@ describe("The io library", function()
io.open("")
io.open("", "r")
expect.error(io.open, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(io.open, "", false):eq("bad argument #2 (expected string, got boolean)")
expect.error(io.open, nil):eq("bad argument #1 (string expected, got nil)")
expect.error(io.open, "", false):eq("bad argument #2 (string expected, got boolean)")
end)
it("checks the mode", function()

View File

@ -6,7 +6,7 @@ describe("The keys library", function()
describe("keys.getName", function()
it("validates arguments", function()
keys.getName(1)
expect.error(keys.getName, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(keys.getName, nil):eq("bad argument #1 (number expected, got nil)")
end)
end)
end)

View File

@ -179,13 +179,13 @@ describe("The os library", function()
describe("os.loadAPI", function()
it("validates arguments", function()
expect.error(os.loadAPI, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(os.loadAPI, nil):eq("bad argument #1 (string expected, got nil)")
end)
end)
describe("os.unloadAPI", function()
it("validates arguments", function()
expect.error(os.loadAPI, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(os.loadAPI, nil):eq("bad argument #1 (string expected, got nil)")
end)
end)
end)

View File

@ -21,31 +21,31 @@ describe("The paintutils library", function()
describe("paintutils.parseImage", function()
it("validates arguments", function()
paintutils.parseImage("")
expect.error(paintutils.parseImage, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(paintutils.parseImage, nil):eq("bad argument #1 (string expected, got nil)")
end)
end)
describe("paintutils.loadImage", function()
it("validates arguments", function()
expect.error(paintutils.loadImage, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(paintutils.loadImage, nil):eq("bad argument #1 (string expected, got nil)")
end)
end)
describe("paintutils.drawPixel", function()
it("validates arguments", function()
expect.error(paintutils.drawPixel, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(paintutils.drawPixel, 1, nil):eq("bad argument #2 (expected number, got nil)")
expect.error(paintutils.drawPixel, 1, 1, false):eq("bad argument #3 (expected number, got boolean)")
expect.error(paintutils.drawPixel, nil):eq("bad argument #1 (number expected, got nil)")
expect.error(paintutils.drawPixel, 1, nil):eq("bad argument #2 (number expected, got nil)")
expect.error(paintutils.drawPixel, 1, 1, false):eq("bad argument #3 (number expected, got boolean)")
end)
end)
describe("paintutils.drawLine", function()
it("validates arguments", function()
expect.error(paintutils.drawLine, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(paintutils.drawLine, 1, nil):eq("bad argument #2 (expected number, got nil)")
expect.error(paintutils.drawLine, 1, 1, nil):eq("bad argument #3 (expected number, got nil)")
expect.error(paintutils.drawLine, 1, 1, 1, nil):eq("bad argument #4 (expected number, got nil)")
expect.error(paintutils.drawLine, 1, 1, 1, 1, false):eq("bad argument #5 (expected number, got boolean)")
expect.error(paintutils.drawLine, nil):eq("bad argument #1 (number expected, got nil)")
expect.error(paintutils.drawLine, 1, nil):eq("bad argument #2 (number expected, got nil)")
expect.error(paintutils.drawLine, 1, 1, nil):eq("bad argument #3 (number expected, got nil)")
expect.error(paintutils.drawLine, 1, 1, 1, nil):eq("bad argument #4 (number expected, got nil)")
expect.error(paintutils.drawLine, 1, 1, 1, 1, false):eq("bad argument #5 (number expected, got boolean)")
end)
it("draws a line going across with custom colour", function()
@ -88,11 +88,11 @@ describe("The paintutils library", function()
describe("paintutils.drawBox", function()
it("validates arguments", function()
expect.error(paintutils.drawBox, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(paintutils.drawBox, 1, nil):eq("bad argument #2 (expected number, got nil)")
expect.error(paintutils.drawBox, 1, 1, nil):eq("bad argument #3 (expected number, got nil)")
expect.error(paintutils.drawBox, 1, 1, 1, nil):eq("bad argument #4 (expected number, got nil)")
expect.error(paintutils.drawBox, 1, 1, 1, 1, false):eq("bad argument #5 (expected number, got boolean)")
expect.error(paintutils.drawBox, nil):eq("bad argument #1 (number expected, got nil)")
expect.error(paintutils.drawBox, 1, nil):eq("bad argument #2 (number expected, got nil)")
expect.error(paintutils.drawBox, 1, 1, nil):eq("bad argument #3 (number expected, got nil)")
expect.error(paintutils.drawBox, 1, 1, 1, nil):eq("bad argument #4 (number expected, got nil)")
expect.error(paintutils.drawBox, 1, 1, 1, 1, false):eq("bad argument #5 (number expected, got boolean)")
end)
it("draws a box with term colour", function()
@ -137,11 +137,11 @@ describe("The paintutils library", function()
describe("paintutils.drawFilledBox", function()
it("validates arguments", function()
expect.error(paintutils.drawFilledBox, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(paintutils.drawFilledBox, 1, nil):eq("bad argument #2 (expected number, got nil)")
expect.error(paintutils.drawFilledBox, 1, 1, nil):eq("bad argument #3 (expected number, got nil)")
expect.error(paintutils.drawFilledBox, 1, 1, 1, nil):eq("bad argument #4 (expected number, got nil)")
expect.error(paintutils.drawFilledBox, 1, 1, 1, 1, false):eq("bad argument #5 (expected number, got boolean)")
expect.error(paintutils.drawFilledBox, nil):eq("bad argument #1 (number expected, got nil)")
expect.error(paintutils.drawFilledBox, 1, nil):eq("bad argument #2 (number expected, got nil)")
expect.error(paintutils.drawFilledBox, 1, 1, nil):eq("bad argument #3 (number expected, got nil)")
expect.error(paintutils.drawFilledBox, 1, 1, 1, nil):eq("bad argument #4 (number expected, got nil)")
expect.error(paintutils.drawFilledBox, 1, 1, 1, 1, false):eq("bad argument #5 (number expected, got boolean)")
end)
it("draws a filled box with term colour", function()
@ -172,9 +172,9 @@ describe("The paintutils library", function()
describe("paintutils.drawImage", function()
it("validates arguments", function()
expect.error(paintutils.drawImage, nil):eq("bad argument #1 (expected table, got nil)")
expect.error(paintutils.drawImage, {}, nil):eq("bad argument #2 (expected number, got nil)")
expect.error(paintutils.drawImage, {}, 1, nil):eq("bad argument #3 (expected number, got nil)")
expect.error(paintutils.drawImage, nil):eq("bad argument #1 (table expected, got nil)")
expect.error(paintutils.drawImage, {}, nil):eq("bad argument #2 (number expected, got nil)")
expect.error(paintutils.drawImage, {}, 1, nil):eq("bad argument #3 (number expected, got nil)")
end)
end)
end)

View File

@ -5,8 +5,8 @@
describe("The parallel library", function()
describe("parallel.waitForAny", function()
it("validates arguments", function()
expect.error(parallel.waitForAny, ""):eq("bad argument #1 (expected function, got string)")
expect.error(parallel.waitForAny, function() end, 2):eq("bad argument #2 (expected function, got number)")
expect.error(parallel.waitForAny, ""):eq("bad argument #1 (function expected, got string)")
expect.error(parallel.waitForAny, function() end, 2):eq("bad argument #2 (function expected, got number)")
end)
it("returns immediately with no arguments", function()
@ -66,8 +66,8 @@ describe("The parallel library", function()
describe("parallel.waitForAll", function()
it("validates arguments", function()
expect.error(parallel.waitForAll, ""):eq("bad argument #1 (expected function, got string)")
expect.error(parallel.waitForAll, function() end, 2):eq("bad argument #2 (expected function, got number)")
expect.error(parallel.waitForAll, ""):eq("bad argument #1 (function expected, got string)")
expect.error(parallel.waitForAll, function() end, 2):eq("bad argument #2 (function expected, got number)")
end)
it("returns immediately with no arguments", function()

View File

@ -16,7 +16,7 @@ describe("The peripheral library", function()
describe("peripheral.isPresent", function()
it("validates arguments", function()
peripheral.isPresent("")
expect.error(peripheral.isPresent, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(peripheral.isPresent, nil):eq("bad argument #1 (string expected, got nil)")
end)
it_modem("asserts the presence of local peripherals", function()
@ -32,7 +32,7 @@ describe("The peripheral library", function()
describe("peripheral.getName", function()
it("validates arguments", function()
expect.error(peripheral.getName, nil):eq("bad argument #1 (expected table, got nil)")
expect.error(peripheral.getName, nil):eq("bad argument #1 (table expected, got nil)")
expect.error(peripheral.getName, {}):eq("bad argument #1 (table is not a peripheral)")
end)
@ -48,7 +48,7 @@ describe("The peripheral library", function()
describe("peripheral.getType", function()
it("validates arguments", function()
peripheral.getType("")
expect.error(peripheral.getType, nil):eq("bad argument #1 (expected string or table, got nil)")
expect.error(peripheral.getType, nil):eq("bad argument #1 (string or table expected, got nil)")
expect.error(peripheral.getType, {}):eq("bad argument #1 (table is not a peripheral)")
end)
@ -77,9 +77,9 @@ describe("The peripheral library", function()
describe("peripheral.hasType", function()
it("validates arguments", function()
peripheral.getType("")
expect.error(peripheral.hasType, nil):eq("bad argument #1 (expected string or table, got nil)")
expect.error(peripheral.hasType, nil):eq("bad argument #1 (string or table expected, got nil)")
expect.error(peripheral.hasType, {}, ""):eq("bad argument #1 (table is not a peripheral)")
expect.error(peripheral.hasType, ""):eq("bad argument #2 (expected string, got nil)")
expect.error(peripheral.hasType, ""):eq("bad argument #2 (string expected, got nil)")
end)
it("returns nil when no peripherals are present", function()
@ -110,15 +110,15 @@ describe("The peripheral library", function()
describe("peripheral.getMethods", function()
it("validates arguments", function()
peripheral.getMethods("")
expect.error(peripheral.getMethods, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(peripheral.getMethods, nil):eq("bad argument #1 (string expected, got nil)")
end)
end)
describe("peripheral.call", function()
it("validates arguments", function()
peripheral.call("", "")
expect.error(peripheral.call, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(peripheral.call, "", nil):eq("bad argument #2 (expected string, got nil)")
expect.error(peripheral.call, nil):eq("bad argument #1 (string expected, got nil)")
expect.error(peripheral.call, "", nil):eq("bad argument #2 (string expected, got nil)")
end)
it_modem("has the correct error location", function()
@ -130,7 +130,7 @@ describe("The peripheral library", function()
describe("peripheral.wrap", function()
it("validates arguments", function()
peripheral.wrap("")
expect.error(peripheral.wrap, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(peripheral.wrap, nil):eq("bad argument #1 (string expected, got nil)")
end)
it_modem("wraps a local peripheral", function()
@ -151,8 +151,8 @@ describe("The peripheral library", function()
peripheral.find("")
peripheral.find("", function()
end)
expect.error(peripheral.find, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(peripheral.find, "", false):eq("bad argument #2 (expected function, got boolean)")
expect.error(peripheral.find, nil):eq("bad argument #1 (string expected, got nil)")
expect.error(peripheral.find, "", false):eq("bad argument #2 (function expected, got boolean)")
end)
it_modem("finds a local peripheral", function()

View File

@ -5,7 +5,7 @@
describe("The rednet library", function()
describe("rednet.open", function()
it("validates arguments", function()
expect.error(rednet.open, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(rednet.open, nil):eq("bad argument #1 (string expected, got nil)")
end)
it("requires a modem to be present", function()
@ -16,8 +16,8 @@ describe("The rednet library", function()
describe("rednet.close", function()
it("validates arguments", function()
rednet.close()
expect.error(rednet.close, 1):eq("bad argument #1 (expected string, got number)")
expect.error(rednet.close, false):eq("bad argument #1 (expected string, got boolean)")
expect.error(rednet.close, 1):eq("bad argument #1 (string expected, got number)")
expect.error(rednet.close, false):eq("bad argument #1 (string expected, got boolean)")
end)
it("requires a modem to be present", function()
@ -29,8 +29,8 @@ describe("The rednet library", function()
it("validates arguments", function()
rednet.isOpen()
rednet.isOpen("")
expect.error(rednet.isOpen, 1):eq("bad argument #1 (expected string, got number)")
expect.error(rednet.isOpen, false):eq("bad argument #1 (expected string, got boolean)")
expect.error(rednet.isOpen, 1):eq("bad argument #1 (string expected, got number)")
expect.error(rednet.isOpen, false):eq("bad argument #1 (string expected, got boolean)")
end)
end)
@ -38,8 +38,8 @@ describe("The rednet library", function()
it("validates arguments", function()
rednet.send(1)
rednet.send(1, nil, "")
expect.error(rednet.send, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(rednet.send, 1, nil, false):eq("bad argument #3 (expected string, got boolean)")
expect.error(rednet.send, nil):eq("bad argument #1 (number expected, got nil)")
expect.error(rednet.send, 1, nil, false):eq("bad argument #3 (string expected, got boolean)")
end)
it("queues an event on the current computer", function()
@ -55,36 +55,36 @@ describe("The rednet library", function()
it("validates arguments", function()
rednet.broadcast(nil)
rednet.broadcast(nil, "")
expect.error(rednet.broadcast, nil, false):eq("bad argument #2 (expected string, got boolean)")
expect.error(rednet.broadcast, nil, false):eq("bad argument #2 (string expected, got boolean)")
end)
end)
describe("rednet.receive", function()
it("validates arguments", function()
expect.error(rednet.receive, false):eq("bad argument #1 (expected string, got boolean)")
expect.error(rednet.receive, "", false):eq("bad argument #2 (expected number, got boolean)")
expect.error(rednet.receive, false):eq("bad argument #1 (string expected, got boolean)")
expect.error(rednet.receive, "", false):eq("bad argument #2 (number expected, got boolean)")
end)
end)
describe("rednet.host", function()
it("validates arguments", function()
expect.error(rednet.host, "", "localhost"):eq("Reserved hostname")
expect.error(rednet.host, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(rednet.host, "", nil):eq("bad argument #2 (expected string, got nil)")
expect.error(rednet.host, nil):eq("bad argument #1 (string expected, got nil)")
expect.error(rednet.host, "", nil):eq("bad argument #2 (string expected, got nil)")
end)
end)
describe("rednet.unhost", function()
it("validates arguments", function()
rednet.unhost("")
expect.error(rednet.unhost, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(rednet.unhost, nil):eq("bad argument #1 (string expected, got nil)")
end)
end)
describe("rednet.lookup", function()
it("validates arguments", function()
expect.error(rednet.lookup, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(rednet.lookup, "", false):eq("bad argument #2 (expected string, got boolean)")
expect.error(rednet.lookup, nil):eq("bad argument #1 (string expected, got nil)")
expect.error(rednet.lookup, "", false):eq("bad argument #2 (string expected, got boolean)")
end)
it("gets a locally hosted protocol", function()

View File

@ -24,8 +24,8 @@ describe("The settings library", function()
settings.set("test", {})
settings.set("test", false)
expect.error(settings.set, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(settings.set, "", nil):eq("bad argument #2 (expected number, string, boolean or table, got nil)")
expect.error(settings.set, nil):eq("bad argument #1 (string expected, got nil)")
expect.error(settings.set, "", nil):eq("bad argument #2 (number, string, boolean or table expected, got nil)")
end)
it("prevents storing unserialisable types", function()
@ -41,7 +41,7 @@ describe("The settings library", function()
it("checks the type of the value", function()
settings.define("test.defined", { default = 123, description = "A description", type = "number" })
expect.error(settings.set, "test.defined", "hello")
:eq("bad argument #2 (expected number, got string)")
:eq("bad argument #2 (number expected, got string)")
settings.set("test.defined", 123)
end)
@ -60,7 +60,7 @@ describe("The settings library", function()
describe("settings.get", function()
it("validates arguments", function()
settings.get("test")
expect.error(settings.get, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(settings.get, nil):eq("bad argument #1 (string expected, got nil)")
end)
it("returns the default", function()
@ -75,7 +75,7 @@ describe("The settings library", function()
describe("settings.getDetails", function()
it("validates arguments", function()
expect.error(settings.getDetails, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(settings.getDetails, nil):eq("bad argument #1 (string expected, got nil)")
end)
it("works on undefined and unset values", function()
@ -104,7 +104,7 @@ describe("The settings library", function()
describe("settings.unset", function()
it("validates arguments", function()
settings.unset("test")
expect.error(settings.unset, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(settings.unset, nil):eq("bad argument #1 (string expected, got nil)")
end)
it("unsetting resets the value", function()
@ -154,7 +154,7 @@ describe("The settings library", function()
describe("settings.load", function()
it("validates arguments", function()
expect.error(settings.load, 1):eq("bad argument #1 (expected string, got number)")
expect.error(settings.load, 1):eq("bad argument #1 (string expected, got number)")
end)
local function setup_with(contents)
@ -210,7 +210,7 @@ describe("The settings library", function()
describe("settings.save", function()
it("validates arguments", function()
expect.error(settings.save, 1):eq("bad argument #1 (expected string, got number)")
expect.error(settings.save, 1):eq("bad argument #1 (string expected, got number)")
end)
it("defaults to .settings", function()

View File

@ -5,7 +5,7 @@
describe("The term library", function()
describe("term.redirect", function()
it("validates arguments", function()
expect.error(term.redirect, nil):eq("bad argument #1 (expected table, got nil)")
expect.error(term.redirect, nil):eq("bad argument #1 (table expected, got nil)")
end)
it("prevents redirecting to term", function()

View File

@ -7,7 +7,7 @@ local helpers = require "test_helpers"
describe("The textutils library", function()
describe("textutils.slowWrite", function()
it("validates arguments", function()
expect.error(textutils.slowWrite, nil, false):eq("bad argument #2 (expected number, got boolean)")
expect.error(textutils.slowWrite, nil, false):eq("bad argument #2 (number expected, got boolean)")
end)
it("wraps text correctly", function()
@ -28,8 +28,8 @@ describe("The textutils library", function()
it("validates arguments", function()
textutils.formatTime(0)
textutils.formatTime(0, false)
expect.error(textutils.formatTime, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(textutils.formatTime, 1, 1):eq("bad argument #2 (expected boolean, got number)")
expect.error(textutils.formatTime, nil):eq("bad argument #1 (number expected, got nil)")
expect.error(textutils.formatTime, 1, 1):eq("bad argument #2 (boolean expected, got number)")
end)
it("correctly formats 12 o'clock", function()
@ -43,7 +43,7 @@ describe("The textutils library", function()
describe("textutils.pagedPrint", function()
it("validates arguments", function()
expect.error(textutils.pagedPrint, nil, false):eq("bad argument #2 (expected number, got boolean)")
expect.error(textutils.pagedPrint, nil, false):eq("bad argument #2 (number expected, got boolean)")
end)
end)
@ -55,9 +55,9 @@ describe("The textutils library", function()
textutils.tabulate({ "test", 1 })
textutils.tabulate(colors.white)
expect.error(textutils.tabulate, nil):eq("bad argument #1 (expected number or table, got nil)")
expect.error(textutils.tabulate, { "test" }, nil):eq("bad argument #2 (expected number or table, got nil)")
expect.error(textutils.tabulate, { false }):eq("bad argument #1.1 (expected string, got boolean)")
expect.error(textutils.tabulate, nil):eq("bad argument #1 (number or table expected, got nil)")
expect.error(textutils.tabulate, { "test" }, nil):eq("bad argument #2 (number or table expected, got nil)")
expect.error(textutils.tabulate, { false }):eq("bad argument #1.1 (string expected, got boolean)")
end)
end)
@ -69,8 +69,8 @@ describe("The textutils library", function()
textutils.pagedTabulate({ "test" })
textutils.pagedTabulate(colors.white)
expect.error(textutils.pagedTabulate, nil):eq("bad argument #1 (expected number or table, got nil)")
expect.error(textutils.pagedTabulate, { "test" }, nil):eq("bad argument #2 (expected number or table, got nil)")
expect.error(textutils.pagedTabulate, nil):eq("bad argument #1 (number or table expected, got nil)")
expect.error(textutils.pagedTabulate, { "test" }, nil):eq("bad argument #2 (number or table expected, got nil)")
end)
end)
@ -132,7 +132,7 @@ describe("The textutils library", function()
describe("textutils.unserialise", function()
it("validates arguments", function()
textutils.unserialise("")
expect.error(textutils.unserialise, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(textutils.unserialise, nil):eq("bad argument #1 (string expected, got nil)")
end)
end)
@ -143,8 +143,8 @@ describe("The textutils library", function()
textutils.serialiseJSON({})
textutils.serialiseJSON(false)
textutils.serialiseJSON("", true)
expect.error(textutils.serialiseJSON, nil):eq("bad argument #1 (expected table, string, number or boolean, got nil)")
expect.error(textutils.serialiseJSON, "", 1):eq("bad argument #2 (expected boolean, got number)")
expect.error(textutils.serialiseJSON, nil):eq("bad argument #1 (table, string, number or boolean expected, got nil)")
expect.error(textutils.serialiseJSON, "", 1):eq("bad argument #2 (boolean expected, got number)")
end)
it("serializes empty arrays", function()
@ -257,7 +257,7 @@ describe("The textutils library", function()
describe("textutils.urlEncode", function()
it("validates arguments", function()
textutils.urlEncode("")
expect.error(textutils.urlEncode, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(textutils.urlEncode, nil):eq("bad argument #1 (string expected, got nil)")
end)
end)
@ -265,8 +265,8 @@ describe("The textutils library", function()
it("validates arguments", function()
textutils.complete("pri")
textutils.complete("pri", _G)
expect.error(textutils.complete, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(textutils.complete, "", false):eq("bad argument #2 (expected table, got boolean)")
expect.error(textutils.complete, nil):eq("bad argument #1 (string expected, got nil)")
expect.error(textutils.complete, "", false):eq("bad argument #2 (table expected, got boolean)")
end)
end)
end)

View File

@ -13,12 +13,12 @@ describe("The window library", function()
window.create(r, 1, 1, 5, 5)
window.create(r, 1, 1, 5, 5, false)
expect.error(window.create, nil):eq("bad argument #1 (expected table, got nil)")
expect.error(window.create, r, nil):eq("bad argument #2 (expected number, got nil)")
expect.error(window.create, r, 1, nil):eq("bad argument #3 (expected number, got nil)")
expect.error(window.create, r, 1, 1, nil):eq("bad argument #4 (expected number, got nil)")
expect.error(window.create, r, 1, 1, 1, nil):eq("bad argument #5 (expected number, got nil)")
expect.error(window.create, r, 1, 1, 1, 1, ""):eq("bad argument #6 (expected boolean, got string)")
expect.error(window.create, nil):eq("bad argument #1 (table expected, got nil)")
expect.error(window.create, r, nil):eq("bad argument #2 (number expected, got nil)")
expect.error(window.create, r, 1, nil):eq("bad argument #3 (number expected, got nil)")
expect.error(window.create, r, 1, 1, nil):eq("bad argument #4 (number expected, got nil)")
expect.error(window.create, r, 1, 1, 1, nil):eq("bad argument #5 (number expected, got nil)")
expect.error(window.create, r, 1, 1, 1, 1, ""):eq("bad argument #6 (boolean expected, got string)")
end)
end)
@ -27,9 +27,9 @@ describe("The window library", function()
local w = mk()
w.blit("a", "a", "a")
expect.error(w.blit, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(w.blit, "", nil):eq("bad argument #2 (expected string, got nil)")
expect.error(w.blit, "", "", nil):eq("bad argument #3 (expected string, got nil)")
expect.error(w.blit, nil):eq("bad argument #1 (string expected, got nil)")
expect.error(w.blit, "", nil):eq("bad argument #2 (string expected, got nil)")
expect.error(w.blit, "", "", nil):eq("bad argument #3 (string expected, got nil)")
expect.error(w.blit, "", "", "a"):eq("Arguments must be the same length")
end)
end)
@ -39,8 +39,8 @@ describe("The window library", function()
local w = mk()
w.setCursorPos(1, 1)
expect.error(w.setCursorPos, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(w.setCursorPos, 1, nil):eq("bad argument #2 (expected number, got nil)")
expect.error(w.setCursorPos, nil):eq("bad argument #1 (number expected, got nil)")
expect.error(w.setCursorPos, 1, nil):eq("bad argument #2 (number expected, got nil)")
end)
end)
@ -48,7 +48,7 @@ describe("The window library", function()
it("validates arguments", function()
local w = mk()
w.setCursorBlink(false)
expect.error(w.setCursorBlink, nil):eq("bad argument #1 (expected boolean, got nil)")
expect.error(w.setCursorBlink, nil):eq("bad argument #1 (boolean expected, got nil)")
end)
end)
@ -57,7 +57,7 @@ describe("The window library", function()
local w = mk()
w.setTextColour(colors.white)
expect.error(w.setTextColour, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(w.setTextColour, nil):eq("bad argument #1 (number expected, got nil)")
expect.error(w.setTextColour, -5):eq("Invalid color (got -5)")
end)
end)
@ -68,12 +68,12 @@ describe("The window library", function()
w.setPaletteColour(colors.white, 0, 0, 0)
w.setPaletteColour(colors.white, 0x000000)
expect.error(w.setPaletteColour, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(w.setPaletteColour, nil):eq("bad argument #1 (number expected, got nil)")
expect.error(w.setPaletteColour, -5):eq("Invalid color (got -5)")
expect.error(w.setPaletteColour, colors.white):eq("bad argument #2 (expected number, got nil)")
expect.error(w.setPaletteColour, colors.white, 1, false):eq("bad argument #3 (expected number, got boolean)")
expect.error(w.setPaletteColour, colors.white, 1, nil, 1):eq("bad argument #3 (expected number, got nil)")
expect.error(w.setPaletteColour, colors.white, 1, 1, nil):eq("bad argument #4 (expected number, got nil)")
expect.error(w.setPaletteColour, colors.white):eq("bad argument #2 (number expected, got nil)")
expect.error(w.setPaletteColour, colors.white, 1, false):eq("bad argument #3 (number expected, got boolean)")
expect.error(w.setPaletteColour, colors.white, 1, nil, 1):eq("bad argument #3 (number expected, got nil)")
expect.error(w.setPaletteColour, colors.white, 1, 1, nil):eq("bad argument #4 (number expected, got nil)")
end)
end)
@ -81,7 +81,7 @@ describe("The window library", function()
it("validates arguments", function()
local w = mk()
w.getPaletteColour(colors.white)
expect.error(w.getPaletteColour, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(w.getPaletteColour, nil):eq("bad argument #1 (number expected, got nil)")
expect.error(w.getPaletteColour, -5):eq("Invalid color (got -5)")
end)
end)
@ -91,7 +91,7 @@ describe("The window library", function()
local w = mk()
w.setBackgroundColour(colors.white)
expect.error(w.setBackgroundColour, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(w.setBackgroundColour, nil):eq("bad argument #1 (number expected, got nil)")
expect.error(w.setBackgroundColour, -5):eq("Invalid color (got -5)")
end)
end)
@ -100,7 +100,7 @@ describe("The window library", function()
it("validates arguments", function()
local w = mk()
w.scroll(0)
expect.error(w.scroll, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(w.scroll, nil):eq("bad argument #1 (number expected, got nil)")
end)
end)
@ -108,7 +108,7 @@ describe("The window library", function()
it("validates arguments", function()
local w = mk()
w.setVisible(false)
expect.error(w.setVisible, nil):eq("bad argument #1 (expected boolean, got nil)")
expect.error(w.setVisible, nil):eq("bad argument #1 (boolean expected, got nil)")
end)
end)
@ -117,12 +117,12 @@ describe("The window library", function()
local w = mk()
w.reposition(1, 1)
w.reposition(1, 1, 5, 5)
expect.error(w.reposition, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(w.reposition, 1, nil):eq("bad argument #2 (expected number, got nil)")
expect.error(w.reposition, 1, 1, false, 1):eq("bad argument #3 (expected number, got boolean)")
expect.error(w.reposition, 1, 1, nil, 1):eq("bad argument #3 (expected number, got nil)")
expect.error(w.reposition, 1, 1, 1, nil):eq("bad argument #4 (expected number, got nil)")
expect.error(w.reposition, 1, 1, 1, 1, true):eq("bad argument #5 (expected table, got boolean)")
expect.error(w.reposition, nil):eq("bad argument #1 (number expected, got nil)")
expect.error(w.reposition, 1, nil):eq("bad argument #2 (number expected, got nil)")
expect.error(w.reposition, 1, 1, false, 1):eq("bad argument #3 (number expected, got boolean)")
expect.error(w.reposition, 1, 1, nil, 1):eq("bad argument #3 (number expected, got nil)")
expect.error(w.reposition, 1, 1, 1, nil):eq("bad argument #4 (number expected, got nil)")
expect.error(w.reposition, 1, 1, 1, 1, true):eq("bad argument #5 (table expected, got boolean)")
end)
it("can change the buffer", function()
@ -150,7 +150,7 @@ describe("The window library", function()
local w = mk()
w.getLine(1)
local _, y = w.getSize()
expect.error(w.getLine, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(w.getLine, nil):eq("bad argument #1 (number expected, got nil)")
expect.error(w.getLine, 0):eq("Line is out of range.")
expect.error(w.getLine, y + 1):eq("Line is out of range.")
end)
@ -164,7 +164,7 @@ describe("The window library", function()
describe("Window.setVisible", function()
it("validates arguments", function()
local w = mk()
expect.error(w.setVisible, nil):eq("bad argument #1 (expected boolean, got nil)")
expect.error(w.setVisible, nil):eq("bad argument #1 (boolean expected, got nil)")
end)
end)
describe("Window.isVisible", function()

View File

@ -10,14 +10,14 @@ describe("The Lua base library", function()
sleep(0)
sleep(nil)
expect.error(sleep, false):eq("bad argument #1 (expected number, got boolean)")
expect.error(sleep, false):eq("bad argument #1 (number expected, got boolean)")
end)
end)
describe("write", function()
it("validates arguments", function()
write("")
expect.error(write, nil):eq("bad argument #1 (expected string or number, got nil)")
expect.error(write, nil):eq("bad argument #1 (string or number expected, got nil)")
end)
it("writes numbers", function()
@ -43,9 +43,9 @@ describe("The Lua base library", function()
loadfile("", "")
loadfile("", "", {})
expect.error(loadfile, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(loadfile, "", false):eq("bad argument #2 (expected string, got boolean)")
expect.error(loadfile, "", "", false):eq("bad argument #3 (expected table, got boolean)")
expect.error(loadfile, nil):eq("bad argument #1 (string expected, got nil)")
expect.error(loadfile, "", false):eq("bad argument #2 (string expected, got boolean)")
expect.error(loadfile, "", "", false):eq("bad argument #3 (table expected, got boolean)")
end)
it("prefixes the filename with @", function()
@ -74,7 +74,7 @@ describe("The Lua base library", function()
describe("dofile", function()
it("validates arguments", function()
expect.error(dofile, ""):eq("File not found")
expect.error(dofile, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(dofile, nil):eq("bad argument #1 (string expected, got nil)")
end)
end)
@ -87,10 +87,10 @@ describe("The Lua base library", function()
load("", "", "")
load("", "", "", _ENV)
expect.error(load, nil):eq("bad argument #1 (expected function or string, got nil)")
expect.error(load, "", false):eq("bad argument #2 (expected string, got boolean)")
expect.error(load, "", "", false):eq("bad argument #3 (expected string, got boolean)")
expect.error(load, "", "", "", false):eq("bad argument #4 (expected table, got boolean)")
expect.error(load, nil):eq("bad argument #1 (function or string expected, got nil)")
expect.error(load, "", false):eq("bad argument #2 (string expected, got boolean)")
expect.error(load, "", "", false):eq("bad argument #3 (string expected, got boolean)")
expect.error(load, "", "", "", false):eq("bad argument #4 (table expected, got boolean)")
end)
local function generator(parts)

View File

@ -0,0 +1,11 @@
-- SPDX-FileCopyrightText: 2023 The CC: Tweaked Developers
--
-- SPDX-License-Identifier: MPL-2.0
describe("Function calls into \"native\" CC code", function()
it("supports custom type names", function()
local value = setmetatable({}, { __name = "some type" })
expect.error(redstone.setOutput, value):eq("bad argument #1 (string expected, got some type)")
end)
end)

View File

@ -10,17 +10,17 @@ describe("cc.expect", function()
expect(e.expect(1, "test", "string")):eq("test")
expect(e.expect(1, 2, "number")):eq(2)
expect.error(e.expect, 1, nil, "string"):eq("bad argument #1 (expected string, got nil)")
expect.error(e.expect, 2, 1, "nil"):eq("bad argument #2 (expected nil, got number)")
expect.error(e.expect, 1, nil, "string"):eq("bad argument #1 (string expected, got nil)")
expect.error(e.expect, 2, 1, "nil"):eq("bad argument #2 (nil expected, got number)")
end)
it("checks multiple types", function()
expect(e.expect(1, "test", "string", "number")):eq("test")
expect(e.expect(1, 2, "string", "number")):eq(2)
expect.error(e.expect, 1, nil, "string", "number"):eq("bad argument #1 (expected string or number, got nil)")
expect.error(e.expect, 1, nil, "string", "number"):eq("bad argument #1 (string or number expected, got nil)")
expect.error(e.expect, 2, false, "string", "table", "number", "nil")
:eq("bad argument #2 (expected string, table or number, got boolean)")
:eq("bad argument #2 (string, table or number expected, got boolean)")
end)
it("includes the function name", function()
@ -31,13 +31,13 @@ describe("cc.expect", function()
worker()
end
expect.error(trampoline):str_match("^[^:]*expect_spec.lua:31: bad argument #1 to 'worker' %(expected string, got nil%)$")
expect.error(trampoline):str_match("^[^:]*expect_spec.lua:31: bad argument #1 to 'worker' %(string expected, got nil%)$")
end)
it("supports custom type names", function()
local value = setmetatable({}, { __name = "some type" })
expect.error(e.expect, 1, value, "string"):eq("bad argument #1 (expected string, got some type)")
expect.error(e.expect, 1, value, "string"):eq("bad argument #1 (string expected, got some type)")
end)
end)
@ -47,7 +47,7 @@ describe("cc.expect", function()
expect(e.field({ k = 2 }, "k", "number")):eq(2)
expect.error(e.field, { k = nil }, "k", "string"):eq("field 'k' missing from table")
expect.error(e.field, { l = 1 }, "l", "nil"):eq("bad field 'l' (expected nil, got number)")
expect.error(e.field, { l = 1 }, "l", "nil"):eq("bad field 'l' (nil expected, got number)")
end)
it("checks multiple types", function()
@ -57,7 +57,7 @@ describe("cc.expect", function()
expect.error(e.field, { k = nil }, "k", "string", "number")
:eq("field 'k' missing from table")
expect.error(e.field, { l = false }, "l", "string", "table", "number", "nil")
:eq("bad field 'l' (expected string, table or number, got boolean)")
:eq("bad field 'l' (string, table or number expected, got boolean)")
end)
end)

View File

@ -10,7 +10,7 @@ describe("cc.image.nft", function()
describe("parse", function()
it("validates arguments", function()
nft.parse("")
expect.error(nft.parse, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(nft.parse, nil):eq("bad argument #1 (string expected, got nil)")
end)
it("parses an empty string", function()
@ -44,7 +44,7 @@ describe("cc.image.nft", function()
describe("load", function()
it("validates arguments", function()
nft.load("")
expect.error(nft.load, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(nft.load, nil):eq("bad argument #1 (string expected, got nil)")
end)
it("loads from a file", function()
@ -65,10 +65,10 @@ describe("cc.image.nft", function()
describe("draw", function()
it("validates arguments", function()
expect.error(nft.draw, nil):eq("bad argument #1 (expected table, got nil)")
expect.error(nft.draw, {}, nil):eq("bad argument #2 (expected number, got nil)")
expect.error(nft.draw, {}, 1, nil):eq("bad argument #3 (expected number, got nil)")
expect.error(nft.draw, {}, 1, 1, false):eq("bad argument #4 (expected table, got boolean)")
expect.error(nft.draw, nil):eq("bad argument #1 (table expected, got nil)")
expect.error(nft.draw, {}, nil):eq("bad argument #2 (number expected, got nil)")
expect.error(nft.draw, {}, 1, nil):eq("bad argument #3 (number expected, got nil)")
expect.error(nft.draw, {}, 1, 1, false):eq("bad argument #4 (table expected, got boolean)")
end)
it("draws an image", function()

View File

@ -21,8 +21,8 @@ describe("cc.pretty", function()
end)
it("validates arguments", function()
expect.error(pp.text, 123):eq("bad argument #1 (expected string, got number)")
expect.error(pp.text, "", ""):eq("bad argument #2 (expected number, got string)")
expect.error(pp.text, 123):eq("bad argument #1 (string expected, got number)")
expect.error(pp.text, "", ""):eq("bad argument #2 (number expected, got string)")
end)
it("produces text documents", function()
@ -62,8 +62,8 @@ describe("cc.pretty", function()
end)
it("validates arguments", function()
expect.error(pp.concat, 123):eq("bad argument #1 (expected document, got number)")
expect.error(pp.concat, "", {}):eq("bad argument #2 (expected document, got table)")
expect.error(pp.concat, 123):eq("bad argument #1 (document expected, got number)")
expect.error(pp.concat, "", {}):eq("bad argument #2 (document expected, got table)")
end)
it("can be used as an operator", function()

View File

@ -9,8 +9,8 @@ describe("cc.pretty", function()
it("validates arguments", function()
str.wrap("test string is long")
str.wrap("test string is long", 11)
expect.error(str.wrap, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(str.wrap, "", false):eq("bad argument #2 (expected number, got boolean)")
expect.error(str.wrap, nil):eq("bad argument #1 (string expected, got nil)")
expect.error(str.wrap, "", false):eq("bad argument #2 (number expected, got boolean)")
end)
it("wraps lines", function()
@ -31,8 +31,8 @@ describe("cc.pretty", function()
it("validates arguments", function()
str.wrap("test string is long")
str.wrap("test string is long", 11)
expect.error(str.ensure_width, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(str.ensure_width, "", false):eq("bad argument #2 (expected number, got boolean)")
expect.error(str.ensure_width, nil):eq("bad argument #1 (string expected, got nil)")
expect.error(str.ensure_width, "", false):eq("bad argument #2 (number expected, got boolean)")
end)
it("pads lines", function()

View File

@ -6,29 +6,29 @@ describe("The multishell program", function()
describe("multishell.setFocus", function()
it("validates arguments", function()
multishell.setFocus(multishell.getFocus())
expect.error(multishell.setFocus, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(multishell.setFocus, nil):eq("bad argument #1 (number expected, got nil)")
end)
end)
describe("multishell.getTitle", function()
it("validates arguments", function()
multishell.getTitle(1)
expect.error(multishell.getTitle, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(multishell.getTitle, nil):eq("bad argument #1 (number expected, got nil)")
end)
end)
describe("multishell.setTitle", function()
it("validates arguments", function()
multishell.setTitle(1, multishell.getTitle(1))
expect.error(multishell.setTitle, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(multishell.setTitle, 1, nil):eq("bad argument #2 (expected string, got nil)")
expect.error(multishell.setTitle, nil):eq("bad argument #1 (number expected, got nil)")
expect.error(multishell.setTitle, 1, nil):eq("bad argument #2 (string expected, got nil)")
end)
end)
describe("multishell.launch", function()
it("validates arguments", function()
expect.error(multishell.launch, nil):eq("bad argument #1 (expected table, got nil)")
expect.error(multishell.launch, _ENV, nil):eq("bad argument #2 (expected string, got nil)")
expect.error(multishell.launch, nil):eq("bad argument #1 (table expected, got nil)")
expect.error(multishell.launch, _ENV, nil):eq("bad argument #2 (string expected, got nil)")
end)
end)
end)

View File

@ -8,7 +8,7 @@ describe("The shell", function()
describe("require", function()
it("validates arguments", function()
require("math")
expect.error(require, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(require, nil):eq("bad argument #1 (string expected, got nil)")
end)
end)
@ -98,7 +98,7 @@ describe("The shell", function()
describe("shell.setDir", function()
it("validates arguments", function()
shell.setDir(shell.dir())
expect.error(shell.setDir, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(shell.setDir, nil):eq("bad argument #1 (string expected, got nil)")
end)
it("not existing directory", function()
@ -109,63 +109,63 @@ describe("The shell", function()
describe("shell.setPath", function()
it("validates arguments", function()
shell.setPath(shell.path())
expect.error(shell.setPath, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(shell.setPath, nil):eq("bad argument #1 (string expected, got nil)")
end)
end)
describe("shell.resolve", function()
it("validates arguments", function()
shell.resolve("")
expect.error(shell.resolve, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(shell.resolve, nil):eq("bad argument #1 (string expected, got nil)")
end)
end)
describe("shell.resolveProgram", function()
it("validates arguments", function()
shell.resolveProgram("ls")
expect.error(shell.resolveProgram, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(shell.resolveProgram, nil):eq("bad argument #1 (string expected, got nil)")
end)
end)
describe("shell.complete", function()
it("validates arguments", function()
shell.complete("ls")
expect.error(shell.complete, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(shell.complete, nil):eq("bad argument #1 (string expected, got nil)")
end)
end)
describe("shell.setCompletionFunction", function()
it("validates arguments", function()
expect.error(shell.setCompletionFunction, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(shell.setCompletionFunction, "", nil):eq("bad argument #2 (expected function, got nil)")
expect.error(shell.setCompletionFunction, nil):eq("bad argument #1 (string expected, got nil)")
expect.error(shell.setCompletionFunction, "", nil):eq("bad argument #2 (function expected, got nil)")
end)
end)
describe("shell.setCompletionFunction", function()
it("validates arguments", function()
expect.error(shell.setCompletionFunction, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(shell.setCompletionFunction, "", nil):eq("bad argument #2 (expected function, got nil)")
expect.error(shell.setCompletionFunction, nil):eq("bad argument #1 (string expected, got nil)")
expect.error(shell.setCompletionFunction, "", nil):eq("bad argument #2 (function expected, got nil)")
end)
end)
describe("shell.setAlias", function()
it("validates arguments", function()
shell.setAlias("sl", "ls")
expect.error(shell.setAlias, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(shell.setAlias, "", nil):eq("bad argument #2 (expected string, got nil)")
expect.error(shell.setAlias, nil):eq("bad argument #1 (string expected, got nil)")
expect.error(shell.setAlias, "", nil):eq("bad argument #2 (string expected, got nil)")
end)
end)
describe("shell.clearAlias", function()
it("validates arguments", function()
shell.clearAlias("sl")
expect.error(shell.clearAlias, nil):eq("bad argument #1 (expected string, got nil)")
expect.error(shell.clearAlias, nil):eq("bad argument #1 (string expected, got nil)")
end)
end)
describe("shell.switchTab", function()
it("validates arguments", function()
expect.error(shell.switchTab, nil):eq("bad argument #1 (expected number, got nil)")
expect.error(shell.switchTab, nil):eq("bad argument #1 (number expected, got nil)")
end)
end)