Sha256: 8f1dfab9f78dee47baeea8dee07349262cf8b552f92d3fb57ddd76c3fcfdd145
Contents?: true
Size: 1.2 KB
Versions: 10
Compression:
Stored size: 1.2 KB
Contents
require 'set' require 'delegate' module RegexpParserTest class Warning class UnexpectedWarnings < StandardError MSG = 'Unexpected warnings: %s'.freeze def initialize(warnings) super(MSG % warnings.join("\n")) end end class Filter def initialize(whitelist) @whitelist = whitelist end def assert_expected_warnings_only original = $stderr $stderr = Extractor.new(original, @whitelist) yield assert_no_warnings($stderr.warnings) ensure $stderr = original end private def assert_no_warnings(warnings) fail UnexpectedWarnings, warnings.to_a if warnings.any? end end class Extractor < DelegateClass(IO) PATTERN = /\A(?:.+):(?:\d+): warning: (?:.+)\n\z/.freeze def initialize(io, whitelist) @whitelist = whitelist @warnings = Set.new super(io) end def write(message) return super if PATTERN !~ message warning = message.chomp @warnings << warning if @whitelist.none?(&warning.method(:end_with?)) self end def warnings @warnings.dup.freeze end end end end
Version data entries
10 entries across 10 versions & 1 rubygems