+1 Nice refactor of the tests.
On Aug 8, 2009, at 12:03 PM, Markus Roberts wrote: > > Added tests to confirm the existance of #2493; improved > existing autoload tests (removed inter-test interactions) > and noted (with a TODO) that there was dead code in the > feature loading test; added analogus case sensitivity tests > where apropriate. > > Signed-off-by: Markus Roberts <[email protected]> > --- > spec/integration/parser/functions/require.rb | 47 +++++++++++++++ > spec/integration/util/autoload.rb | 81 +++++++++++++++ > +---------- > spec/integration/util/feature.rb | 2 +- > spec/unit/parser/compiler.rb | 10 +++ > 4 files changed, 107 insertions(+), 33 deletions(-) > > diff --git a/spec/integration/parser/functions/require.rb b/spec/ > integration/parser/functions/require.rb > index 68a1e0b..15ff51b 100755 > --- a/spec/integration/parser/functions/require.rb > +++ b/spec/integration/parser/functions/require.rb > @@ -25,3 +25,50 @@ describe "the require function" do > end > > end > + > +describe "the include function" do > + require 'puppet_spec/files' > + include PuppetSpec::Files > + > + before :each do > + @real_dir = Dir.getwd > + @temp_dir = tmpfile('include_function_integration_test') > + Dir.mkdir @temp_dir > + Dir.chdir @temp_dir > + @parser = Puppet::Parser::Parser.new :Code => "" > + @node = Puppet::Node.new("mynode") > + @compiler = Puppet::Parser::Compiler.new(@node, @parser) > + @compiler.send(:evaluate_main) > + @scope = @compiler.topscope > + # preload our functions > + Puppet::Parser::Functions.function(:include) > + Puppet::Parser::Functions.function(:require) > + end > + > + after :each do > + Dir.chdir @real_dir > + Dir.rmdir @temp_dir > + end > + > + def with_file(filename,contents) > + path = File.join(@temp_dir,filename) > + File.open(path, "w") { |f|f.puts contents } > + yield > + File.delete(path) > + end > + > + it "should add a relationship between the 'included' class and > our class" do > + with_file('includedclass',"class includedclass {}") { > + @scope.function_include("includedclass") > + } > + @compiler.catalog.edge? > (@scope > .resource,@compiler.findresource(:class,"includedclass")).should > be_true > + end > + > + it "should find a file with an all lowercase name given a mixed > case name" do > + with_file('includedclass',"class includedclass {}") { > + @scope.function_include("includedclass") > + } > + @compiler.catalog.edge? > (@scope > .resource,@compiler.findresource(:class,"IncludedClass")).should > be_true > + end > + > +end > diff --git a/spec/integration/util/autoload.rb b/spec/integration/ > util/autoload.rb > index d0858ab..dd9752d 100755 > --- a/spec/integration/util/autoload.rb > +++ b/spec/integration/util/autoload.rb > @@ -24,27 +24,28 @@ require 'puppet_spec/files' > describe Puppet::Util::Autoload do > include PuppetSpec::Files > > - def mkfile(name, path) > + def with_file(name, *path) > + path = File.join(*path) > # Now create a file to load > - File.open(path, "w") do |f| > - f.puts %{ > -AutoloadIntegrator.newthing(:#{name.to_s}) > + File.open(path, "w") { |f| > + f.puts "\nAutoloadIntegrator.newthing(:#{name.to_s})\n" > } > - end > + yield > + File.delete(path) > end > > - def mk_loader(name, path) > + def with_loader(name, path) > dir = tmpfile(name + path) > $: << dir > - > Dir.mkdir(dir) > - > rbdir = File.join(dir, path.to_s) > - > Dir.mkdir(rbdir) > - > loader = Puppet::Util::Autoload.new(name, path) > - return rbdir, loader > + yield rbdir, loader > + Dir.rmdir(rbdir) > + Dir.rmdir(dir) > + $:.pop > + AutoloadIntegrator.clear > end > > it "should make instances available by the loading class" do > @@ -57,35 +58,51 @@ AutoloadIntegrator.newthing(:#{name.to_s}) > end > > it "should load and return true when it successfully loads a > file" do > - dir, loader = mk_loader("foo", "bar") > - path = File.join(dir, "mything.rb") > - mkfile(:mything, path) > - loader.load(:mything).should be_true > - loader.should be_loaded(:mything) > - AutoloadIntegrator.should be_thing(:mything) > + with_loader("foo", "bar") { |dir,loader| > + with_file(:mything, dir, "mything.rb") { > + loader.load(:mything).should be_true > + loader.should be_loaded(:mything) > + AutoloadIntegrator.should be_thing(:mything) > + } > + } > + end > + > + it "should successfully load a file with a mixed case name" do > + on_disk = "MyThing.rb" > + in_code = :mything > + with_loader("foo", "bar") { |dir,loader| > + with_file(in_code, dir, on_disk) { > + loader.load(in_code).should be_true > + loader.should be_loaded(in_code) > + AutoloadIntegrator.should be_thing(in_code) > + } > + } > end > > it "should consider a file loaded when asked for the name > without an extension" do > - dir, loader = mk_loader("foo", "bar") > - path = File.join(dir, "noext.rb") > - mkfile(:noext, path) > - loader.load(:noext) > - loader.should be_loaded(:noext) > + with_loader("foo", "bar") { |dir,loader| > + with_file(:noext, dir, "noext.rb") { > + loader.load(:noext) > + loader.should be_loaded(:noext) > + } > + } > end > > it "should consider a file loaded when asked for the name with > an extension" do > - dir, loader = mk_loader("foo", "bar") > - path = File.join(dir, "withext.rb") > - mkfile(:noext, path) > - loader.load(:withext) > - loader.should be_loaded("withext.rb") > + with_loader("foo", "bar") { |dir,loader| > + with_file(:noext, dir, "withext.rb") { > + loader.load(:withext) > + loader.should be_loaded("withext.rb") > + } > + } > end > > it "should register the fact that the instance is loaded with > the Autoload base class" do > - dir, loader = mk_loader("foo", "bar") > - path = File.join(dir, "baseload.rb") > - mkfile(:baseload, path) > - loader.load(:baseload) > - Puppet::Util::Autoload.should be_loaded("bar/withext.rb") > + with_loader("foo", "bar") { |dir,loader| > + with_file(:baseload, dir, "baseload.rb") { > + loader.load(:baseload) > + Puppet::Util::Autoload.should be_loaded("bar/ > withext.rb") > + } > + } > end > end > diff --git a/spec/integration/util/feature.rb b/spec/integration/ > util/feature.rb > index f1ddd5d..55a3065 100755 > --- a/spec/integration/util/feature.rb > +++ b/spec/integration/util/feature.rb > @@ -25,7 +25,7 @@ describe Puppet::Util::Feature do > $features.should be_able_to_load > end > > - > + # TODO: Make this a spec test or remove it. > def test_dynamic_loading > $features = @features > cleanup { $features = nil } > diff --git a/spec/unit/parser/compiler.rb b/spec/unit/parser/ > compiler.rb > index 0cc6e8a..ad6f351 100755 > --- a/spec/unit/parser/compiler.rb > +++ b/spec/unit/parser/compiler.rb > @@ -423,6 +423,16 @@ describe Puppet::Parser::Compiler do > @compiler.evaluate_classes(%w{myclass}, @scope, false) > end > > + it "should skip classes previously evaluated with different > capitalization" do > + @compiler.catalog.stubs(:tag) > + > @scope.stubs(:find_hostclass).with("MyClass").returns(@class) > + > @compiler.expects(:class_scope).with(@class).returns("something") > + @compiler.expects(:add_resource).never > + @resource.expects(:evaluate).never > + Puppet::Parser::Resource.expects(:new).never > + @compiler.evaluate_classes(%w{MyClass}, @scope, false) > + end > + > it "should return the list of found classes" do > @compiler.catalog.stubs(:tag) > > -- > 1.6.0.4 > > > > -- Finn's Law: Uncertainty is the final test of innovation. --------------------------------------------------------------------- Luke Kanies | http://reductivelabs.com | http://madstop.com --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en -~----------~----~----~----~------~----~------~--~---
