| def format_comment_title(product): |
| """Produce a Markdown-formatted string based on a given "product"--a string |
| containing a browser identifier optionally followed by a colon and a |
| release channel. (For example: "firefox" or "chrome:dev".) The generated |
| title string is used both to create new comments and to locate (and |
| subsequently update) previously-submitted comments.""" |
| parts = product.split(":") |
| title = parts[0].title() |
| |
| if len(parts) > 1: |
| title += " (%s)" % parts[1] |
| |
| return "# %s #" % title |
| |
| |
| def markdown_adjust(s): |
| """Escape problematic markdown sequences.""" |
| s = s.replace('\t', u'\\t') |
| s = s.replace('\n', u'\\n') |
| s = s.replace('\r', u'\\r') |
| s = s.replace('`', u'') |
| s = s.replace('|', u'\\|') |
| return s |
| |
| |
| def table(headings, data, log): |
| """Create and log data to specified logger in tabular format.""" |
| cols = range(len(headings)) |
| assert all(len(item) == len(cols) for item in data) |
| max_widths = reduce(lambda prev, cur: [(len(cur[i]) + 2) |
| if (len(cur[i]) + 2) > prev[i] |
| else prev[i] |
| for i in cols], |
| data, |
| [len(item) + 2 for item in headings]) |
| log("|%s|" % "|".join(item.center(max_widths[i]) for i, item in enumerate(headings))) |
| log("|%s|" % "|".join("-" * max_widths[i] for i in cols)) |
| for row in data: |
| log("|%s|" % "|".join(" %s" % row[i].ljust(max_widths[i] - 1) for i in cols)) |
| log("") |
| |
| |
| def err_string(results_dict, iterations): |
| """Create and return string with errors from test run.""" |
| rv = [] |
| total_results = sum(results_dict.values()) |
| for key, value in sorted(results_dict.items()): |
| rv.append("%s%s" % |
| (key, ": %s/%s" % (value, iterations) if value != iterations else "")) |
| if total_results < iterations: |
| rv.append("MISSING: %s/%s" % (iterations - total_results, iterations)) |
| rv = ", ".join(rv) |
| if is_inconsistent(results_dict, iterations): |
| rv = "**%s**" % rv |
| return rv |