require 'listener' require 'uri' ROOT = '/home/rubys/cvs/feedvalidator/' class Listener attr_accessor :pass, :desc, :msg, :attrs alias :super_init :initialize def initialize source @pass = false @xmlbase = URI.parse(source.sub(ROOT,'http://www.feedvalidator.org/')) super_init File.new(source) end def log msg, args={} if msg == @msg @pass = @invert.empty? elsif msg.to_s[0..4] != 'Valid' base = self base = self.parent while self.respond_to? :parent puts base.xmlbase puts [msg,args].inspect end end def comment string if string =~ /Description:\s*(.*?)\s*Expect:\s*(!?)(\w*)(?:\{(.*?)\})?/m @desc, @invert, @msg, @attrs = $1, $2, $3, $4 @pass = true unless @invert.empty? @msg = @msg.to_sym end end end Dir[ROOT + 'testcases/atom/*/*.xml'].each do |file| begin results = Listener.new(file) if results.pass print '.' else puts puts file puts "Description: #{results.desc}" puts "Expect: #{results.msg}{#{results.attrs}}" break end rescue Exception puts puts file raise end end