Sha256: 6fa23492a99c9465006f99ddcfcad1d32dc7f67b7778c85d0dae651348c3bf6d
Contents?: true
Size: 1.84 KB
Versions: 2
Compression:
Stored size: 1.84 KB
Contents
# frozen_string_literal: true desc 'Run all bacon specs with pretty output' task :bacon do require 'open3' require 'matrix' require 'fileutils' specs = PROJECT_SPECS some_failed = false specs_size = specs.size len = specs.map(&:size).max totals = Vector[0, 0, 0, 0] red = "\e[31m%s\e[0m" yellow = "\e[33m%s\e[0m" green = "\e[32m%s\e[0m" left_format = "%4d/%d: %-#{len + 11}s" spec_format = /(?<specifications>\d+) specifications \((?<requirements>\d+) requirements\), (?<failures>\d+) failures, (?<errors>\d+) errors/ specs.each_with_index do |spec, idx| print(format(left_format, idx + 1, specs_size, spec)) Open3.popen3(FileUtils::RUBY, '-w', spec) do |_sin, sout, serr| out = sout.read.strip err = serr.read.strip # this is conventional, see spec/innate/state/fiber.rb for usage if out =~ /^Bacon::Error: (needed .*)/ puts(yellow % format('%6s %s', '', Regexp.last_match(1))) else total = nil out.each_line do |line| next unless spec_format =~ line total = Vector[*$~[1..-1].map(&:to_i)] break end if total totals += total tests, assertions, failures, errors = total.to_a if tests.positive? && (failures + errors).zero? puts((green % '%6d passed') % tests) else some_failed = true puts(red % ' failed') puts out unless out.empty? puts err unless err.empty? end else some_failed = true puts(red % ' failed') puts out unless out.empty? puts err unless err.empty? end end end end total_color = some_failed ? red : green puts(total_color % ('%d specifications (%d requirements), %d failures, %d errors' % totals.to_a)) exit 1 if some_failed end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
pgpass-2023.01.01 | tasks/bacon.rake |
pgpass-2022.07.27 | tasks/bacon.rake |