Skip to content

Commit ed58a64

Browse files
committed
[tests] make @:variant work with @:async
1 parent 0d13d84 commit ed58a64

File tree

1 file changed

+50
-51
lines changed

1 file changed

+50
-51
lines changed

tests/server/src/utils/macro/TestBuilder.macro.hx

Lines changed: 50 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -16,68 +16,67 @@ class TestBuilder {
1616
continue;
1717
}
1818
switch (field.kind) {
19-
case FFun(f) if (field.meta.exists(m -> m.name == ":async")):
20-
// Async is already manually handled, nothing to do
21-
2219
case FFun(f):
20+
var isProcessed = field.meta.exists(m -> m.name == ":async");
2321
var variants = field.meta.filter(m -> m.name == ":variant");
2422
if (variants.length == 0) {
25-
makeAsyncTest(f, field.pos);
26-
} else {
27-
// TODO: support functions that define their own async arg (not named `_` or `async`)
28-
var args = f.args.copy();
29-
f.args = [];
30-
makeAsyncTest(f, field.pos);
23+
if (!isProcessed) makeAsyncTest(f, field.pos);
24+
continue;
25+
}
3126

32-
// Ignore original field; generate variants instead
33-
removedFields.push(field);
27+
var args = f.args.copy();
28+
f.args = [];
29+
if (!isProcessed) makeAsyncTest(f, field.pos);
3430

35-
for (variant in variants) {
36-
if (variant.params.length == 0) {
37-
Context.error('Unexpected amount of variant parameters.', variant.pos);
38-
}
39-
40-
var nameParam = variant.params.shift();
41-
var name:String = try haxe.macro.ExprTools.getValue(nameParam) catch(e) {
42-
Context.error('Variant first parameter should be a String (variant name)', nameParam.pos);
43-
};
31+
// Ignore original field; generate variants instead
32+
removedFields.push(field);
4433

45-
var inits = [for (arg in args) {
46-
var name = arg.name;
47-
var ct = arg.type;
34+
for (variant in variants) {
35+
if (variant.params.length == 0) {
36+
Context.error('Unexpected amount of variant parameters.', variant.pos);
37+
}
4838

49-
if (variant.params.length == 0) {
50-
Context.error('Unexpected amount of variant parameters.', variant.pos);
51-
}
39+
var nameParam = variant.params.shift();
40+
var name:String = try haxe.macro.ExprTools.getValue(nameParam) catch(e) {
41+
Context.error('Variant first parameter should be a String (variant name)', nameParam.pos);
42+
};
5243

53-
var param = variant.params.shift();
54-
macro @:pos(param.pos) var $name:$ct = (($name:$ct) -> $i{name})(${param});
55-
}];
44+
var inits = [for (arg in args) {
45+
var name = arg.name;
46+
if (isProcessed && name == "async") continue;
47+
var ct = arg.type;
5648

57-
if (variant.params.length > 0) {
58-
Context.error('Unexpected amount of variant parameters.', variant.params[0].pos);
49+
if (variant.params.length == 0) {
50+
Context.error('Unexpected amount of variant parameters.', variant.pos);
5951
}
6052

61-
switch (f.expr.expr) {
62-
case EBlock(b):
63-
var ff = {
64-
ret: f.ret,
65-
params: f.params,
66-
expr: {pos: variant.pos, expr: EBlock(inits.concat(b))},
67-
args: [{name: "async", type: macro:utest.Async}]
68-
};
69-
70-
newFields.push({
71-
pos: variant.pos,
72-
name: field.name + name,
73-
meta: field.meta.filter(m -> m.name != ":variant"),
74-
kind: FFun(ff),
75-
doc: field.doc,
76-
access : field.access
77-
});
78-
79-
case _:
80-
}
53+
var param = variant.params.shift();
54+
macro @:pos(param.pos) var $name:$ct = (($name:$ct) -> $i{name})(${param});
55+
}];
56+
57+
if (variant.params.length > 0) {
58+
Context.error('Unexpected amount of variant parameters.', variant.params[0].pos);
59+
}
60+
61+
switch (f.expr.expr) {
62+
case EBlock(b):
63+
var ff = {
64+
ret: f.ret,
65+
params: f.params,
66+
expr: {pos: variant.pos, expr: EBlock(inits.concat(b))},
67+
args: [{name: "async", type: macro:utest.Async}]
68+
};
69+
70+
newFields.push({
71+
pos: variant.pos,
72+
name: field.name + name,
73+
meta: field.meta.filter(m -> m.name != ":variant"),
74+
kind: FFun(ff),
75+
doc: field.doc,
76+
access : field.access
77+
});
78+
79+
case _:
8180
}
8281
}
8382
case _:

0 commit comments

Comments
 (0)