Browse Source

[tests] factor out marker handling in display tests

Simon Krajewski 6 years ago
parent
commit
ddc34ff435
3 changed files with 25 additions and 14 deletions
  1. 1 0
      tests/display/build.hxml
  2. 21 0
      tests/display/src-shared/Marker.hx
  3. 3 14
      tests/display/src/Macro.hx

+ 1 - 0
tests/display/build.hxml

@@ -1,4 +1,5 @@
 -p src
+-p src-shared
 --main Main
 -lib utest
 -lib haxeserver

+ 21 - 0
tests/display/src-shared/Marker.hx

@@ -0,0 +1,21 @@
+class Marker {
+	static var markerRe = ~/{-(\d+)-}/g;
+
+	static public function extractMarkers(doc:String) {
+		var markers = #if macro [] #else new Map() #end;
+		var posAcc = 0;
+		var src = markerRe.map(doc, function(r) {
+			var p = r.matchedPos();
+			var name = r.matched(1);
+			var pos = p.pos - posAcc;
+			posAcc += p.len;
+			#if macro
+			markers.push(macro $v{Std.parseInt(name)} => $v{pos});
+			#else
+			markers.set(Std.parseInt(name), pos);
+			#end
+			return "";
+		});
+		return {source: src, markers: markers};
+	}
+}

+ 3 - 14
tests/display/src/Macro.hx

@@ -9,12 +9,8 @@ using StringTools;
 class Macro {
 	static function buildTestCase():Array<Field> {
 		var fields = Context.getBuildFields();
-		var markerRe = ~/{-(\d+)-}/g;
-		var testCases = [];
 		var c = Context.getLocalClass().get();
 		for (field in fields) {
-			var markers = [];
-			var posAcc = 0;
 			if (field.doc == null) {
 				continue;
 			}
@@ -24,15 +20,8 @@ class Macro {
 			} else {
 				doc += field.doc;
 			}
-			var src = markerRe.map(doc, function(r) {
-				var p = r.matchedPos();
-				var name = r.matched(1);
-				var pos = p.pos - posAcc;
-				posAcc += p.len;
-				markers.push(macro $v{Std.parseInt(name)} => $v{pos});
-				return "";
-			});
-			var markers = markers.length > 0 ? macro $a{markers} : macro new Map();
+			var transform = Marker.extractMarkers(doc);
+			var markers = transform.markers.length > 0 ? macro $a{transform.markers} : macro new Map();
 			var filename = Context.getPosInfos(c.pos).file;
 			for (meta in field.meta) {
 				if (meta.name == ":filename") {
@@ -48,7 +37,7 @@ class Macro {
 			switch (field.kind) {
 				case FFun(f) if (f.expr != null):
 					f.expr = macro @:pos(f.expr.pos) {
-						ctx = new DisplayTestContext($v{filename}, $v{field.name}, $v{src}, $markers);
+						ctx = new DisplayTestContext($v{filename}, $v{field.name}, $v{transform.source}, $markers);
 						${f.expr}
 					};
 				case _: