#!/bin/sh xtest | awk ' # Escapes the special characters in a string so that, when # included in a regex, it represents a literal match function regx_escape_literal(str, ret) { ret = str gsub(/[\[\]\^\$\.\*\?\+\{\}\\\(\)\|]/ , "\\\\&", str) return str } # Returns the simple test formatted name function name(n, ret) { ret = n gsub(/\./, " ", ret) return ret } # Returns the simple test formatted result function result(res) { if(res ~ /OK/) { return "PASS" } else if(res ~ /FAILED/) { return "FAIL" } } function parse(name, description, has_subtests, result_line) { has_subtests = 0 # Consume every line up to the result line result_line = " " regx_escape_literal(name) " (OK|FAILED)" do { getline # If this is a subtest (denoted by an "o" bullet) then subparse if($0 ~ /^o /) { parse($2, description " : " substr($0, index($0, $3))) has_subtests = 1 } } while ($0 !~ result_line) # Only print the results for the deepest nested subtests if(!has_subtests) { print result($2) ": " name(name) " - " description } } # Start parsing at the beginning of every test (denoted by a "*" bullet) /^\* / { parse($2, substr($0, index($0, $3))) } '