Sha256: d2f66c294bf5057522f7f8baf048fc88bb6dab6329709a891f5c8772ee5ac8ab
Contents?: true
Size: 1.28 KB
Versions: 8
Compression:
Stored size: 1.28 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 if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.0.0') assert_no_warnings($stderr.warnings) end 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(:include?)) self end def warnings @warnings.dup.freeze end end end end
Version data entries
8 entries across 8 versions & 2 rubygems