Ver Fonte

[ci] gracefully fail on async exceptions in server tests

Aleksandr Kuzmenko há 5 anos atrás
pai
commit
7a88055773
1 ficheiros alterados com 19 adições e 9 exclusões
  1. 19 9
      tests/server/src/utils/macro/TestBuilder.macro.hx

+ 19 - 9
tests/server/src/utils/macro/TestBuilder.macro.hx

@@ -38,7 +38,7 @@ class TestBuilder {
 							el.push(macro @:pos(pos) $i{asyncName}.done());
 							f.expr = macro {
 								$i{asyncName}.setTimeout(10000);
-								${transformHaxeCalls(el)};
+								${transformHaxeCalls(asyncName, el)};
 							}
 						case _:
 							Context.error("Block expression expected", f.expr.pos);
@@ -49,29 +49,39 @@ class TestBuilder {
 		return fields;
 	}
 
-	static function transformHaxeCalls(el:Array<Expr>) {
+	static function transformHaxeCalls(asyncName:String, el:Array<Expr>) {
 		var e0 = el.shift();
 		if (el.length == 0) {
 			return e0;
 		} else {
 			var e = switch e0 {
 				case macro runHaxe($a{args}):
-					var e = transformHaxeCalls(el);
-					args.push(macro() -> $e);
+					var e = transformHaxeCalls(asyncName, el);
+					args.push(macro() -> ${failOnException(asyncName, e)});
 					macro runHaxe($a{args});
 				case macro runHaxeJson($a{args}):
-					var e = transformHaxeCalls(el);
-					args.push(macro() -> $e);
+					var e = transformHaxeCalls(asyncName, el);
+					args.push(macro() -> ${failOnException(asyncName, e)});
 					macro runHaxeJson($a{args});
 				case macro complete($a{args}):
-					var e = transformHaxeCalls(el);
-					args.push(macro function(response, markers) $e);
+					var e = transformHaxeCalls(asyncName, el);
+					args.push(macro function(response, markers) ${failOnException(asyncName, e)});
 					macro complete($a{args});
 				case _:
-					macro {$e0; ${transformHaxeCalls(el)}};
+					macro {$e0; ${transformHaxeCalls(asyncName, el)}};
 			}
 			e.pos = e0.pos;
 			return e;
 		}
 	}
+
+	static function failOnException(asyncName:String, e:Expr):Expr {
+		return macro try {
+			$e;
+		} catch(e) {
+			Assert.fail(e.details());
+			$i{asyncName}.done();
+			return;
+		}
+	}
 }