summaryrefslogtreecommitdiffstats
path: root/test/language/ast/resource_reference.rb
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2007-09-06 18:53:00 -0500
committerLuke Kanies <luke@madstop.com>2007-09-06 18:53:00 -0500
commitb7f42441b91c921cd31f3d8c7875ce98bdedf786 (patch)
tree07ef5bf2d42027914704d0305a353741d191cc90 /test/language/ast/resource_reference.rb
parent653c1514b613f27cb22d24b4bdd7b6c118047566 (diff)
downloadpuppet-b7f42441b91c921cd31f3d8c7875ce98bdedf786.tar.gz
puppet-b7f42441b91c921cd31f3d8c7875ce98bdedf786.tar.xz
puppet-b7f42441b91c921cd31f3d8c7875ce98bdedf786.zip
Renaming some ast resource classes and files so they make a lot more sense.
Diffstat (limited to 'test/language/ast/resource_reference.rb')
-rwxr-xr-xtest/language/ast/resource_reference.rb93
1 files changed, 93 insertions, 0 deletions
diff --git a/test/language/ast/resource_reference.rb b/test/language/ast/resource_reference.rb
new file mode 100755
index 000000000..e8883afb9
--- /dev/null
+++ b/test/language/ast/resource_reference.rb
@@ -0,0 +1,93 @@
+#!/usr/bin/env ruby
+#
+# Created by Luke A. Kanies on 2007-07-8.
+# Copyright (c) 2007. All rights reserved.
+
+$:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
+
+require 'puppettest'
+require 'puppettest/parsertesting'
+
+class TestASTResourceReference < Test::Unit::TestCase
+ include PuppetTest
+ include PuppetTest::ParserTesting
+ AST = Puppet::Parser::AST
+
+ def newref(type, title)
+ AST::ResourceReference.new(:type => type, :title => AST::String.new(:value => title))
+ end
+
+ def setup
+ super
+ @scope = mkscope
+ @parser = @scope.compile.parser
+ end
+
+ def test_evaluate
+ @parser.newdefine "one::two"
+ @parser.newdefine "one-two"
+ [%w{file /tmp/yay}, %w{one::two three}, %w{one-two three}].each do |type, title|
+ ref = newref(type, title)
+
+ evaled = nil
+ assert_nothing_raised("Could not evaluate resource ref") do
+ evaled = ref.evaluate(:scope => @scope)
+ end
+
+ assert_equal(type, evaled.type, "Type did not translate correctly")
+ assert_equal(title, evaled.title, "Title did not translate correctly")
+ end
+ end
+
+ # Related to #706, make sure resource references correctly translate to qualified types.
+ def test_scoped_references
+ @parser.newdefine "one"
+ @parser.newdefine "one::two"
+ @parser.newdefine "three"
+ twoscope = @scope.newscope(:namespace => "one")
+ assert(twoscope.finddefine("two"), "Could not find 'two' definition")
+ title = "title"
+
+ # First try a qualified type
+ assert_equal("one::two", newref("two", title).evaluate(:scope => twoscope).type,
+ "Defined type was not made fully qualified")
+
+ # Then try a type that does not need to be qualified
+ assert_equal("one", newref("one", title).evaluate(:scope => twoscope).type,
+ "Unqualified defined type was not handled correctly")
+
+ # Then an unqualified type from within the one namespace
+ assert_equal("three", newref("three", title).evaluate(:scope => twoscope).type,
+ "Defined type was not made fully qualified")
+
+ # Then a builtin type
+ assert_equal("file", newref("file", title).evaluate(:scope => twoscope).type,
+ "Builtin type was not handled correctly")
+
+ # Now try a type that does not exist, which should throw an error.
+ assert_raise(Puppet::ParseError, "Did not fail on a missing type in a resource reference") do
+ newref("nosuchtype", title).evaluate(:scope => twoscope)
+ end
+
+ # Now run the same tests, but with the classes
+ @parser.newclass "four"
+ @parser.newclass "one::five"
+
+ # First try an unqualified type
+ assert_equal("four", newref("class", "four").evaluate(:scope => twoscope).title,
+ "Unqualified class was not found")
+
+ # Then a qualified class
+ assert_equal("one::five", newref("class", "five").evaluate(:scope => twoscope).title,
+ "Class was not made fully qualified")
+
+ # Then try a type that does not need to be qualified
+ assert_equal("four", newref("class", "four").evaluate(:scope => twoscope).title,
+ "Unqualified class was not handled correctly")
+
+ # Now try a type that does not exist, which should throw an error.
+ assert_raise(Puppet::ParseError, "Did not fail on a missing type in a resource reference") do
+ newref("class", "nosuchclass").evaluate(:scope => twoscope)
+ end
+ end
+end