From d37e071ab7b3de63053675520ed25763d37582b7 Mon Sep 17 00:00:00 2001 From: Ian Kronquist Date: Wed, 1 Jul 2015 18:47:54 -0700 Subject: [PATCH] (PDOC-37) Test errors are output properly Also comment out a statement which we frequently use for debugging which snuck in by accident. --- lib/puppet/face/strings.rb | 6 +- .../yard/puppet_4x_function_handler_spec.rb | 23 +++++--- .../strings/yard/template_helper_spec.rb | 59 +++++++++++++++++++ 3 files changed, 80 insertions(+), 8 deletions(-) create mode 100644 spec/unit/puppet_x/puppetlabs/strings/yard/template_helper_spec.rb diff --git a/lib/puppet/face/strings.rb b/lib/puppet/face/strings.rb index 48d6300..26953bb 100644 --- a/lib/puppet/face/strings.rb +++ b/lib/puppet/face/strings.rb @@ -50,7 +50,11 @@ Puppet::Face.define(:strings, '0.0.1') do # For now, assume the remaining positional args are a list of manifest # and ruby files to parse. yard_args = (args.empty? ? MODULE_SOURCEFILES : args) - class YARD::Logger; def progress(*args); end; end + + # This line monkeypatches yard's progress indicator so it doesn't write + # all over the terminal. This should definitely not be in real code, but + # it's very handy for debugging with pry + #class YARD::Logger; def progress(*args); end; end yardoc_actions.generate_documentation(*yard_args) end diff --git a/spec/unit/puppet_x/puppetlabs/strings/yard/puppet_4x_function_handler_spec.rb b/spec/unit/puppet_x/puppetlabs/strings/yard/puppet_4x_function_handler_spec.rb index 14720e3..c59821c 100644 --- a/spec/unit/puppet_x/puppetlabs/strings/yard/puppet_4x_function_handler_spec.rb +++ b/spec/unit/puppet_x/puppetlabs/strings/yard/puppet_4x_function_handler_spec.rb @@ -54,12 +54,21 @@ describe PuppetX::PuppetLabs::Strings::YARD::Handlers::Puppet4xFunctionHandler d expect(the_namespace).to document_a(:type => :puppetnamespace) end - it "should not add anything to the Registry if incorrect ruby code is present" do - parse <<-RUBY - # The summary - This is not ruby code - RUBY - - expect(YARD::Registry.all).to be_empty + it "should issue a warning if the parameter names do not match the docstring" do + expected_output_not_a_param = "[warn]: @param tag has unknown parameter" + + " name: not_a_param \n in file `(stdin)' near line 3" + expected_output_also_not_a_param = "[warn]: @param tag has unknown " + + "parameter name: also_not_a_param \n in file `(stdin)' near line 3" + expect { + parse <<-RUBY + # @param not_a_param [Integer] the first number to be compared + # @param also_not_a_param [Integer] the second number to be compared + Puppet::Functions.create_function(:max) do + def max(num_a, num_b) + num_a >= num_b ? num_a : num_b + end + end + RUBY + }.to output("#{expected_output_not_a_param}\n#{expected_output_also_not_a_param}\n").to_stdout_from_any_process end end diff --git a/spec/unit/puppet_x/puppetlabs/strings/yard/template_helper_spec.rb b/spec/unit/puppet_x/puppetlabs/strings/yard/template_helper_spec.rb new file mode 100644 index 0000000..1f3a4b4 --- /dev/null +++ b/spec/unit/puppet_x/puppetlabs/strings/yard/template_helper_spec.rb @@ -0,0 +1,59 @@ +require 'spec_helper' +require 'puppet_x/puppetlabs/strings/yard/templates/default/template_helper' +require 'puppet_x/puppetlabs/strings/yard/code_objects/puppet_namespace_object' +require 'strings_spec/parsing' + +describe TemplateHelper do + it "should not print any warning if the tags and parameters match" do + th = TemplateHelper.new + + # Case 0: If the documented tags do include the parameter, + # nothing is printed + tag0 = YARD::Tags::Tag.new(:param, 'a_parameter') + tag0.name = 'a_parameter' + obj0 = PuppetX::PuppetLabs::Strings::YARD::CodeObjects::PuppetNamespaceObject.new(:root, 'Puppet3xFunctions') + obj0.add_tag tag0 + obj0.parameters = [['a_parameter']] + expect { th.check_parameters_match_docs obj0 }.to output("").to_stderr_from_any_process + + # The docstring is still alive between tests. Clear the tags registered with + # it so the tags won't persist between tests. + obj0.docstring.instance_variable_set("@tags", []) + end + + it "should print the warning with no location data if the tags and " + + "parameters differ and the location data is not properly formed" do + th = TemplateHelper.new + # Case 1: If the parameter and tag differ and the location is not properly + # formed, print out the warning with no location data + tag1 = YARD::Tags::Tag.new(:param, 'aa_parameter') + tag1.name = 'aa_parameter' + obj1 = PuppetX::PuppetLabs::Strings::YARD::CodeObjects::PuppetNamespaceObject.new(:root, 'Puppet3xFunctions') + obj1.add_tag tag1 + obj1.parameters = [['b_parameter']] + expect { th.check_parameters_match_docs obj1 }.to output("[warn]: The parameter aa_parameter is documented, but doesn't exist in your code. Sorry, the file and line number could not be determined.\n").to_stderr_from_any_process + + # The docstring is still alive between tests. Clear the tags registered with + # it so the tags won't persist between tests. + obj1.docstring.instance_variable_set("@tags", []) + end + + it "should print the warning with location data if the tags and parameters " + + "differ and the location data is properly formed" do + th = TemplateHelper.new + # Case 2: If the parameter and tag differ and the location is properly + # formed, print out the warning with no location data + tag2 = YARD::Tags::Tag.new(:param, 'aaa_parameter') + tag2.name = 'aaa_parameter' + obj2 = PuppetX::PuppetLabs::Strings::YARD::CodeObjects::PuppetNamespaceObject.new(:root, 'Puppet3xFunctions') + obj2.files = [['some_file.pp', 42]] + obj2.add_tag tag2 + obj2.parameters = [['b_parameter']] + expect { th.check_parameters_match_docs obj2 }.to output("[warn]: The parameter aaa_parameter is documented, but doesn't exist in your code, in file some_file.pp near line 42\n").to_stderr_from_any_process + + # The docstring is still alive between tests. Clear the tags registered with + # it so the tags won't persist between tests. + obj2.docstring.instance_variable_set("@tags", []) + end + +end