spec/templates/engine_spec.rb in yard-0.9.18 vs spec/templates/engine_spec.rb in yard-0.9.19

- old
+ new

@@ -1,131 +1,131 @@ -# frozen_string_literal: true -require File.dirname(__FILE__) + '/spec_helper' - -RSpec.describe YARD::Templates::Engine do - before { @paths = Engine.template_paths } - after { Engine.template_paths = @paths } - - describe ".register_template_path" do - it "registers a String path" do - Engine.register_template_path('.') - expect(Engine.template_paths.pop).to eq '.' - end - - it "does not duplicate paths" do - Engine.template_paths = [] - Engine.register_template_path('foo') - Engine.register_template_path('foo') - expect(Engine.template_paths).to eq ['foo'] - end - end - - describe ".template!" do - it "creates a module including Template" do - mod = Engine.template!('path/to/template') - expect(mod).to include(Template) - expect(mod.full_path.to_s).to eq 'path/to/template' - end - - it "creates a module including Template with full_path" do - mod = Engine.template!('path/to/template2', '/full/path/to/template2') - expect(mod).to include(Template) - expect(mod.full_path.to_s).to eq '/full/path/to/template2' - end - end - - describe ".template" do - it "raises an error if the template is not found" do - expect { Engine.template(:a, :b, :c) }.to raise_error(ArgumentError) - end - - it "creates a module including Template" do - mock = double(:template) - expect(Engine).to receive(:find_template_paths).with(nil, 'template/name').and_return(['/full/path/template/name']) - expect(Engine).to receive(:template!).with('template/name', ['/full/path/template/name']).and_return(mock) - expect(Engine.template('template/name')).to eq mock - end - - it "creates a Template from a relative Template path" do - expect(Engine).to receive(:template_paths).and_return([]) - expect(File).to receive(:directory?).with("/full/path/template/notname").and_return(true) - start_template = double(:start_template, - :full_path => '/full/path/template/name', - :full_paths => ['/full/path/template/name']) - expect(start_template).to receive(:is_a?).with(Template).and_return(true) - mod = Engine.template(start_template, '..', 'notname') - expect(mod).to include(Template) - expect(mod.full_path.to_s).to eq "/full/path/template/notname" - end - - it "creates a Template including other matching templates in path" do - paths = ['/full/path/template/name', '/full/path2/template/name'] - expect(Engine).to receive(:find_template_paths).with(nil, 'template').at_least(1).times.and_return([]) - expect(Engine).to receive(:find_template_paths).with(nil, 'template/name').and_return(paths) - ancestors = Engine.template('template/name').ancestors.map(&:class_name) - expect(ancestors).to include("Template__full_path2_template_name") - end - - it "includes parent directories before other template paths" do - paths = ['/full/path/template/name', '/full/path2/template/name'] - expect(Engine).to receive(:find_template_paths).with(nil, 'template/name').and_return(paths) - ancestors = Engine.template('template/name').ancestors.map(&:class_name) - expect(ancestors[0, 4]).to eq ["Template__full_path_template_name", "Template__full_path_template", - "Template__full_path2_template_name", "Template__full_path2_template"] - end - end - - describe ".generate" do - it "generates with fulldoc template" do - mod = double(:template) - options = TemplateOptions.new - options.reset_defaults - options.objects = [:a, :b, :c] - options.object = Registry.root - expect(mod).to receive(:run).with(options) - expect(Engine).to receive(:template).with(:default, :fulldoc, :text).and_return(mod) - Engine.generate([:a, :b, :c]) - end - end - - describe ".render" do - def loads_template(*args) - expect(Engine).to receive(:template).with(*args).and_return(@template) - end - - before(:all) do - @object = CodeObjects::MethodObject.new(:root, :method) - end - - before do - @options = TemplateOptions.new - @options.reset_defaults - @options.object = @object - @options.type = @object.type - @template = double(:template, :include => nil) - expect(@template).to receive(:run).with(@options) - end - - it "accepts method call with no parameters" do - loads_template(:default, :method, :text) - @object.format - end - - it "allows template key to be changed" do - loads_template(:javadoc, :method, :text) - @options.template = :javadoc - @object.format(:template => :javadoc) - end - - it "allows type key to be changed" do - loads_template(:default, :fulldoc, :text) - @options.type = :fulldoc - @object.format(:type => :fulldoc) - end - - it "allows format key to be changed" do - loads_template(:default, :method, :html) - @options.format = :html - @object.format(:format => :html) - end - end -end +# frozen_string_literal: true +require File.dirname(__FILE__) + '/spec_helper' + +RSpec.describe YARD::Templates::Engine do + before { @paths = Engine.template_paths } + after { Engine.template_paths = @paths } + + describe ".register_template_path" do + it "registers a String path" do + Engine.register_template_path('.') + expect(Engine.template_paths.pop).to eq '.' + end + + it "does not duplicate paths" do + Engine.template_paths = [] + Engine.register_template_path('foo') + Engine.register_template_path('foo') + expect(Engine.template_paths).to eq ['foo'] + end + end + + describe ".template!" do + it "creates a module including Template" do + mod = Engine.template!('path/to/template') + expect(mod).to include(Template) + expect(mod.full_path.to_s).to eq 'path/to/template' + end + + it "creates a module including Template with full_path" do + mod = Engine.template!('path/to/template2', '/full/path/to/template2') + expect(mod).to include(Template) + expect(mod.full_path.to_s).to eq '/full/path/to/template2' + end + end + + describe ".template" do + it "raises an error if the template is not found" do + expect { Engine.template(:a, :b, :c) }.to raise_error(ArgumentError) + end + + it "creates a module including Template" do + mock = double(:template) + expect(Engine).to receive(:find_template_paths).with(nil, 'template/name').and_return(['/full/path/template/name']) + expect(Engine).to receive(:template!).with('template/name', ['/full/path/template/name']).and_return(mock) + expect(Engine.template('template/name')).to eq mock + end + + it "creates a Template from a relative Template path" do + expect(Engine).to receive(:template_paths).and_return([]) + expect(File).to receive(:directory?).with("/full/path/template/notname").and_return(true) + start_template = double(:start_template, + :full_path => '/full/path/template/name', + :full_paths => ['/full/path/template/name']) + expect(start_template).to receive(:is_a?).with(Template).and_return(true) + mod = Engine.template(start_template, '..', 'notname') + expect(mod).to include(Template) + expect(mod.full_path.to_s).to eq "/full/path/template/notname" + end + + it "creates a Template including other matching templates in path" do + paths = ['/full/path/template/name', '/full/path2/template/name'] + expect(Engine).to receive(:find_template_paths).with(nil, 'template').at_least(1).times.and_return([]) + expect(Engine).to receive(:find_template_paths).with(nil, 'template/name').and_return(paths) + ancestors = Engine.template('template/name').ancestors.map(&:class_name) + expect(ancestors).to include("Template__full_path2_template_name") + end + + it "includes parent directories before other template paths" do + paths = ['/full/path/template/name', '/full/path2/template/name'] + expect(Engine).to receive(:find_template_paths).with(nil, 'template/name').and_return(paths) + ancestors = Engine.template('template/name').ancestors.map(&:class_name) + expect(ancestors[0, 4]).to eq ["Template__full_path_template_name", "Template__full_path_template", + "Template__full_path2_template_name", "Template__full_path2_template"] + end + end + + describe ".generate" do + it "generates with fulldoc template" do + mod = double(:template) + options = TemplateOptions.new + options.reset_defaults + options.objects = [:a, :b, :c] + options.object = Registry.root + expect(mod).to receive(:run).with(options) + expect(Engine).to receive(:template).with(:default, :fulldoc, :text).and_return(mod) + Engine.generate([:a, :b, :c]) + end + end + + describe ".render" do + def loads_template(*args) + expect(Engine).to receive(:template).with(*args).and_return(@template) + end + + before(:all) do + @object = CodeObjects::MethodObject.new(:root, :method) + end + + before do + @options = TemplateOptions.new + @options.reset_defaults + @options.object = @object + @options.type = @object.type + @template = double(:template, :include => nil) + expect(@template).to receive(:run).with(@options) + end + + it "accepts method call with no parameters" do + loads_template(:default, :method, :text) + @object.format + end + + it "allows template key to be changed" do + loads_template(:javadoc, :method, :text) + @options.template = :javadoc + @object.format(:template => :javadoc) + end + + it "allows type key to be changed" do + loads_template(:default, :fulldoc, :text) + @options.type = :fulldoc + @object.format(:type => :fulldoc) + end + + it "allows format key to be changed" do + loads_template(:default, :method, :html) + @options.format = :html + @object.format(:format => :html) + end + end +end