| #!/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))) } |
| |
| ' |