Skip to content

Commit 9a3fb02

Browse files
committed
Add function tests.
1 parent ecf3d1f commit 9a3fb02

File tree

10 files changed

+120
-12
lines changed

10 files changed

+120
-12
lines changed

src/main/java/org/byteskript/skript/compiler/Context.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ public void destroySection() {
182182

183183
public Function getDefaultFunction(String name, int arguments) {
184184
final Function function = this.getFunction(name, arguments);
185-
if (function != null) return function;
185+
if (function != null) return function.copy(arguments); // we pass objects even if types are specified
186186
final Type[] types = new Type[arguments];
187187
Arrays.fill(types, CommonTypes.OBJECT); // assert all types are actually object :)
188188
return new Function(name, this.getType(), CommonTypes.OBJECT, types);

src/main/java/org/byteskript/skript/compiler/FileContext.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,11 @@ public int indent() {
463463

464464
@Override
465465
public Type getType(String name) {
466-
return types.get(name);
466+
final Type type = types.get(name);
467+
if (type != null) return type;
468+
for (final String key : types.keySet()) {
469+
if (name.equalsIgnoreCase(key)) return types.get(key);
470+
}
471+
return null;
467472
}
468473
}

src/main/java/org/byteskript/skript/lang/syntax/flow/execute/RunEffect.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import org.byteskript.skript.lang.element.StandardElements;
1818
import org.byteskript.skript.lang.handler.StandardHandlers;
1919
import org.byteskript.skript.lang.syntax.flow.lambda.RunnableSection;
20-
import org.byteskript.skript.lang.syntax.variable.VariableExpression;
2120
import org.byteskript.skript.runtime.internal.Member;
2221

2322
import java.lang.reflect.Method;
@@ -69,14 +68,14 @@ public void compile(Context context, Pattern.Match match) throws Throwable {
6968
final ElementTree tree = context.getCompileCurrent().nested()[0];
7069
final MethodBuilder method = context.getMethod();
7170
assert method != null;
72-
if (tree.current() instanceof VariableExpression) {
73-
final Method target = RunEffect.class.getMethod("run", Object.class);
74-
this.writeCall(method, target, context);
75-
} else if (tree.current() instanceof RunnableSection) {
71+
if (tree.current() instanceof RunnableSection) {
7672
final Method target = Runnable.class.getMethod("run");
7773
method.writeCode(WriteInstruction.invokeInterface(target));
7874
context.setState(CompileState.CODE_BODY);
7975
return;
76+
} else {
77+
final Method target = RunEffect.class.getMethod("run", Object.class);
78+
this.writeCall(method, target, context);
8079
}
8180
method.writeCode(WriteInstruction.pop());
8281
context.setState(CompileState.CODE_BODY);

src/main/java/org/byteskript/skript/runtime/internal/Member.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,7 @@ public static MethodAccessor<Object> getFunction(Object source, String pattern)
118118
}
119119
if (clean.contains(" from ")) {
120120
final String result = clean.substring(clean.indexOf(" from ") + 6).trim();
121-
try {
122-
owner = Class.forName(result.replace('/', '.'));
123-
} catch (ClassNotFoundException ex) {
124-
throw new ScriptRuntimeError("Unable to find script '" + result + "'", ex);
125-
}
121+
owner = Skript.findAnyClass(result.replace('/', '.'));
126122
} else owner = source;
127123
return findFunction(owner, name, arguments);
128124
}

src/test/java/org/byteskript/skript/test/GenericTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,17 +55,25 @@ public void all() throws Throwable {
5555
final PostCompileClass[] classes;
5656
synchronized (this) {
5757
try {
58+
final long now, then;
59+
now = System.currentTimeMillis();
5860
classes = skript.compileComplexScript(stream, "skript." + name);
61+
then = System.currentTimeMillis();
62+
System.out.println("Parsed " + name + " in " + (then - now) + " milliseconds.");
5963
} catch (Throwable ex) {
6064
System.err.println("Error in '" + name + "':");
6165
ex.printStackTrace(System.err);
6266
failure++;
6367
continue;
6468
}
6569
try {
70+
final long now, then;
6671
final Script script = skript.loadScripts(classes).iterator().next();
72+
now = System.currentTimeMillis();
6773
final boolean result = (boolean) script.getFunction("test").run(skript).get();
74+
then = System.currentTimeMillis();
6875
assert result : "Test failed.";
76+
System.out.println("Run " + name + " in " + (then - now) + " milliseconds.");
6977
} catch (Throwable ex) {
7078
System.err.println("Error in '" + name + "':");
7179
ex.printStackTrace(System.err);
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
function box(a, b):
3+
trigger:
4+
set {!var} to {a} + {b}
5+
6+
function box:
7+
trigger:
8+
set {!var} to 10
9+
10+
function test:
11+
trigger:
12+
set {!var} to 1
13+
assert {!var} is 1
14+
run function "box()"
15+
assert {!var} is 10
16+
set {!var} to 1
17+
assert {!var} is 1
18+
run function "box() from skript/dynamicfunction"
19+
assert {!var} is 10
20+
run function "box(a, b) from skript/dynamicfunction" with (2, 3)
21+
assert {!var} is 5
22+
run function "box(a, b)" with (3, 3)
23+
assert {!var} is 6
24+
delete {!var}
25+
return true
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
2+
function box(a, b):
3+
trigger:
4+
set {!var} to {a} + {b}
5+
6+
function box:
7+
trigger:
8+
set {!var} to 10
9+
10+
function test:
11+
trigger:
12+
set {!var} to 1
13+
assert {!var} is 1
14+
run box() from skript/externalfunction
15+
assert {!var} is 10
16+
run box(2, 3) from skript/externalfunction
17+
assert {!var} is 5
18+
delete {!var}
19+
return true
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
2+
function box(@a, b):
3+
trigger:
4+
set {@a} to {b}
5+
return 3
6+
7+
function box:
8+
trigger:
9+
return 10
10+
11+
function test:
12+
trigger:
13+
assert box() is 10
14+
run box()
15+
assert box(3, 4) is 3
16+
set {@var} to 5
17+
assert box({@var}, 2) is 3
18+
assert {@var} is 2
19+
return true
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
2+
function box(@a, b):
3+
return: integer
4+
trigger:
5+
set {@a} to {b}
6+
return 3
7+
8+
function box:
9+
return: integer
10+
trigger:
11+
return 10
12+
13+
function test:
14+
trigger:
15+
assert box() is 10
16+
run box()
17+
assert box(3, 4) is 3
18+
set {@var} to 5
19+
assert box({@var}, 2) is 3
20+
assert {@var} is 2
21+
return true
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
2+
type Blob:
3+
function test:
4+
return: string
5+
trigger:
6+
return "hello"
7+
8+
function test:
9+
trigger:
10+
set {var} to a new blob
11+
assert {var} exists
12+
assert {var} is a blob
13+
assert test() from {var} is "hello"
14+
set {x} to test() from {var}
15+
assert {x} is "hello"
16+
return true

0 commit comments

Comments
 (0)