shared_examples_for "signature" do before do YARD::Registry.clear @options = Templates::TemplateOptions.new @options.reset_defaults stub!(:options).and_return(@options) end it "should show signature for regular instance method" do YARD.parse_string "def foo; end" signature(Registry.at('#foo')).should == @results[:regular] end it "should allow default return type to be changed" do @options.default_return = "Hello" YARD.parse_string "def foo; end" signature(Registry.at('#foo')).should == @results[:default_return] end it "should allow default return type to be omitted" do @options.default_return = "" YARD.parse_string "def foo; end" signature(Registry.at('#foo')).should == @results[:no_default_return] end it "should show signature for private class method" do YARD.parse_string "class A; private; def self.foo; end end" signature(Registry.at('A.foo')).should == @results[:private_class] end it "should show return type for single type" do YARD.parse_string <<-'eof' # @return [String] def foo; end eof signature(Registry.at('#foo')).should == @results[:single] end it "should show return type for 2 types" do YARD.parse_string <<-'eof' # @return [String, Symbol] def foo; end eof signature(Registry.at('#foo')).should == @results[:two_types] end it "should show return type for 2 types over multiple tags" do YARD.parse_string <<-'eof' # @return [String] # @return [Symbol] def foo; end eof signature(Registry.at('#foo')).should == @results[:two_types_multitag] end it "should show 'Type?' if return types are [Type, nil]" do YARD.parse_string <<-'eof' # @return [Type, nil] def foo; end eof signature(Registry.at('#foo')).should == @results[:type_nil] end it "should show 'Type?' if return types are [Type, nil, nil] (extra nil)" do YARD.parse_string <<-'eof' # @return [Type, nil] # @return [nil] def foo; end eof signature(Registry.at('#foo')).should == @results[:type_nil] end it "should show 'Type+' if return types are [Type, Array]" do YARD.parse_string <<-'eof' # @return [Type, ] def foo; end eof signature(Registry.at('#foo')).should == @results[:type_array] end it "should (Type, ...) for more than 2 return types" do YARD.parse_string <<-'eof' # @return [Type, ] # @return [AnotherType] def foo; end eof signature(Registry.at('#foo')).should == @results[:multitype] end it "should show (void) for @return [void] by default" do YARD.parse_string <<-'eof' # @return [void] def foo; end eof signature(Registry.at('#foo')).should == @results[:void] end it "should not show return for @return [void] if :hide_void_return is true" do @options.hide_void_return = true YARD.parse_string <<-'eof' # @return [void] def foo; end eof signature(Registry.at('#foo')).should == @results[:hide_void] end it "should show block for method with yield" do YARD.parse_string <<-'eof' def foo; yield(a, b, c) end eof signature(Registry.at('#foo')).should == @results[:block] end it "should use regular return tag if the @overload is empty" do YARD.parse_string <<-'eof' # @overload foobar # Hello world # @return [String] def foo; end eof signature(Registry.at('#foo').tag(:overload)).should == @results[:empty_overload] end end