Andrew Geissler | 23e0279 | 2023-07-21 09:06:10 -0500 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | xtest | awk ' |
| 3 | |
| 4 | # Escapes the special characters in a string so that, when |
| 5 | # included in a regex, it represents a literal match |
| 6 | function regx_escape_literal(str, ret) { |
| 7 | ret = str |
| 8 | gsub(/[\[\]\^\$\.\*\?\+\{\}\\\(\)\|]/ , "\\\\&", str) |
| 9 | return str |
| 10 | } |
| 11 | |
| 12 | # Returns the simple test formatted name |
| 13 | function name(n, ret) { |
| 14 | ret = n |
| 15 | gsub(/\./, " ", ret) |
| 16 | return ret |
| 17 | } |
| 18 | |
| 19 | # Returns the simple test formatted result |
| 20 | function result(res) { |
| 21 | if(res ~ /OK/) { |
| 22 | return "PASS" |
| 23 | } else if(res ~ /FAILED/) { |
| 24 | return "FAIL" |
| 25 | } |
| 26 | } |
| 27 | |
| 28 | function parse(name, description, has_subtests, result_line) { |
| 29 | has_subtests = 0 |
| 30 | |
| 31 | # Consume every line up to the result line |
| 32 | result_line = " " regx_escape_literal(name) " (OK|FAILED)" |
| 33 | do { |
| 34 | getline |
| 35 | |
| 36 | # If this is a subtest (denoted by an "o" bullet) then subparse |
| 37 | if($0 ~ /^o /) { |
| 38 | parse($2, description " : " substr($0, index($0, $3))) |
| 39 | has_subtests = 1 |
| 40 | } |
| 41 | } while ($0 !~ result_line) |
| 42 | |
| 43 | # Only print the results for the deepest nested subtests |
| 44 | if(!has_subtests) { |
| 45 | print result($2) ": " name(name) " - " description |
| 46 | } |
| 47 | } |
| 48 | |
| 49 | # Start parsing at the beginning of every test (denoted by a "*" bullet) |
| 50 | /^\* / { parse($2, substr($0, index($0, $3))) } |
| 51 | |
| 52 | ' |