spec/handlers/ruby/legacy/base_spec.rb in yard-0.9.18 vs spec/handlers/ruby/legacy/base_spec.rb in yard-0.9.19

- old
+ new

@@ -1,84 +1,84 @@ -# frozen_string_literal: true - -include Parser::Ruby::Legacy - -RSpec.describe YARD::Handlers::Ruby::Legacy::Base, "#handles and inheritance" do - before do - allow(Handlers::Ruby::Legacy::Base).to receive(:inherited) - if RUBY_VERSION > '1.8.7' - allow(Handlers::Ruby::Legacy::MixinHandler).to receive(:inherited) # fixes a Ruby1.9 issue - end - @processor = Handlers::Processor.new(OpenStruct.new(:parser_type => :ruby18)) - end - - after(:all) do - Handlers::Base.clear_subclasses - end - - def stmt(string) - Statement.new(TokenList.new(string)) - end - - it "only handles Handlers inherited from Ruby::Legacy::Base class" do - class IgnoredHandler < Handlers::Base - handles "hello" - end - class NotIgnoredHandlerLegacy < Handlers::Ruby::Legacy::Base - handles "hello" - end - allow(Handlers::Base).to receive(:subclasses).and_return [IgnoredHandler, NotIgnoredHandlerLegacy] - expect(@processor.find_handlers(stmt("hello world"))).to eq [NotIgnoredHandlerLegacy] - end - - it "handles a string input" do - class TestStringHandler < Handlers::Ruby::Legacy::Base - handles "hello" - end - - expect(TestStringHandler.handles?(stmt("hello world"))).to be true - expect(TestStringHandler.handles?(stmt("nothello world"))).to be false - end - - it "handles regex input" do - class TestRegexHandler < Handlers::Ruby::Legacy::Base - handles(/^nothello$/) - end - - expect(TestRegexHandler.handles?(stmt("nothello"))).to be true - expect(TestRegexHandler.handles?(stmt("not hello hello"))).to be false - end - - it "handles token input" do - class TestTokenHandler < Handlers::Ruby::Legacy::Base - handles TkMODULE - end - - expect(TestTokenHandler.handles?(stmt("module"))).to be true - expect(TestTokenHandler.handles?(stmt("if"))).to be false - end - - it "parses a do/end or { } block with #parse_block" do - class MyBlockHandler < Handlers::Ruby::Legacy::Base - handles(/\AmyMethod\b/) - def process - parse_block(:owner => "test") - end - end - - class MyBlockInnerHandler < Handlers::Ruby::Legacy::Base - handles "inner" - def self.reset; @@reached = false end - def self.reached?; @@reached ||= false end - def process; @@reached = true end - end - - allow(Handlers::Base).to receive(:subclasses).and_return [MyBlockHandler, MyBlockInnerHandler] - Parser::SourceParser.parser_type = :ruby18 - Parser::SourceParser.parse_string "myMethod do inner end" - expect(MyBlockInnerHandler).to be_reached - MyBlockInnerHandler.reset - Parser::SourceParser.parse_string "myMethod { inner }" - expect(MyBlockInnerHandler).to be_reached - Parser::SourceParser.parser_type = :ruby - end -end +# frozen_string_literal: true + +include Parser::Ruby::Legacy + +RSpec.describe YARD::Handlers::Ruby::Legacy::Base, "#handles and inheritance" do + before do + allow(Handlers::Ruby::Legacy::Base).to receive(:inherited) + if RUBY_VERSION > '1.8.7' + allow(Handlers::Ruby::Legacy::MixinHandler).to receive(:inherited) # fixes a Ruby1.9 issue + end + @processor = Handlers::Processor.new(OpenStruct.new(:parser_type => :ruby18)) + end + + after(:all) do + Handlers::Base.clear_subclasses + end + + def stmt(string) + Statement.new(TokenList.new(string)) + end + + it "only handles Handlers inherited from Ruby::Legacy::Base class" do + class IgnoredHandler < Handlers::Base + handles "hello" + end + class NotIgnoredHandlerLegacy < Handlers::Ruby::Legacy::Base + handles "hello" + end + allow(Handlers::Base).to receive(:subclasses).and_return [IgnoredHandler, NotIgnoredHandlerLegacy] + expect(@processor.find_handlers(stmt("hello world"))).to eq [NotIgnoredHandlerLegacy] + end + + it "handles a string input" do + class TestStringHandler < Handlers::Ruby::Legacy::Base + handles "hello" + end + + expect(TestStringHandler.handles?(stmt("hello world"))).to be true + expect(TestStringHandler.handles?(stmt("nothello world"))).to be false + end + + it "handles regex input" do + class TestRegexHandler < Handlers::Ruby::Legacy::Base + handles(/^nothello$/) + end + + expect(TestRegexHandler.handles?(stmt("nothello"))).to be true + expect(TestRegexHandler.handles?(stmt("not hello hello"))).to be false + end + + it "handles token input" do + class TestTokenHandler < Handlers::Ruby::Legacy::Base + handles TkMODULE + end + + expect(TestTokenHandler.handles?(stmt("module"))).to be true + expect(TestTokenHandler.handles?(stmt("if"))).to be false + end + + it "parses a do/end or { } block with #parse_block" do + class MyBlockHandler < Handlers::Ruby::Legacy::Base + handles(/\AmyMethod\b/) + def process + parse_block(:owner => "test") + end + end + + class MyBlockInnerHandler < Handlers::Ruby::Legacy::Base + handles "inner" + def self.reset; @@reached = false end + def self.reached?; @@reached ||= false end + def process; @@reached = true end + end + + allow(Handlers::Base).to receive(:subclasses).and_return [MyBlockHandler, MyBlockInnerHandler] + Parser::SourceParser.parser_type = :ruby18 + Parser::SourceParser.parse_string "myMethod do inner end" + expect(MyBlockInnerHandler).to be_reached + MyBlockInnerHandler.reset + Parser::SourceParser.parse_string "myMethod { inner }" + expect(MyBlockInnerHandler).to be_reached + Parser::SourceParser.parser_type = :ruby + end +end