1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
# frozen_string_literal: true
require File.dirname(__FILE__) + '/spec_helper'
RSpec.describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}AliasHandler" do
before(:all) { parse_file :alias_handler_001, __FILE__ }
it "throws alias into namespace object list" do
expect(P(:A).aliases[P("A#b")]).to eq :a
end
['c', 'd?', '[]', '[]=', '-@', '%', '*', 'cstrkey', 'cstrmeth'].each do |a|
it "handles the Ruby 'alias' keyword syntax for method ##{a}" do
expect(P('A#' + a)).to be_instance_of(CodeObjects::MethodObject)
expect(P('A#' + a).is_alias?).to be true
end
end
it "handles keywords as the alias name" do
expect(P('A#for')).to be_instance_of(CodeObjects::MethodObject)
end
it "allows ConstantNames to be specified as aliases" do
expect(P('A#ConstantName')).to be_instance_of(CodeObjects::MethodObject)
end
it "creates a new method object for the alias" do
expect(P("A#b")).to be_instance_of(CodeObjects::MethodObject)
end
it "pulls the method into the current class if it's from another one" do
expect(P(:B).aliases[P("B#q")]).to eq :x
expect(P(:B).aliases[P("B#r?")]).to eq :x
end
it "gracefully fails to pull a method in if the original method cannot be found" do
expect(P(:B).aliases[P("B#s")]).to eq :to_s
end
it "allows complex Ruby expressions after the alias parameters" do
expect(P(:B).aliases[P("B#t")]).to eq :inspect
end
it "shows up in #is_alias? for method" do
expect(P("B#t").is_alias?).to be true
expect(P('B#r?').is_alias?).to be true
end
it "allows operators and keywords to be specified as symbols" do
expect(P('B#<<')).to be_instance_of(CodeObjects::MethodObject)
expect(P('B#for')).to be_instance_of(CodeObjects::MethodObject)
end
it "handles keywords in alias names" do
expect(P('B#do').is_alias?).to be true
expect(P('B#x2').is_alias?).to be true
expect(P(:B).aliases[P('B#do')]).to eq :x
expect(P(:B).aliases[P('B#x2')]).to eq :do
end
it "handles quoted symbols" do
foo = Registry.at('A#foo')
expect(foo).not_to be nil
expect(foo.is_alias?).to be true
expect(Registry.at('A').aliases[foo]).to eq :a
end
it "prepends aliases object's docstring to comments" do
expect(Registry.at('D#a').tag(:return).types).to eq ['Numeric']
expect(Registry.at('D#b').tag(:return).types).to eq ['String']
expect(Registry.at('D#b').docstring).to eq "Foo bar"
end
it "raises an UndocumentableError if only one parameter is passed" do
undoc_error "alias_method :q"
end
it "raises an UndocumentableError if the parameter is not a Symbol or String" do
undoc_error "alias_method CONST, Something"
undoc_error "alias_method variable, ClassName"
undoc_error "alias_method variable, other_variable"
end
end
|