diff options
author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-08-22 21:27:11 +0000 |
---|---|---|
committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-08-22 21:27:11 +0000 |
commit | 1b2ee4bb9d9fef44bdf8217f45d6893b7609a432 (patch) | |
tree | eeab100adbabf62c809082f8a9ee0b469d017bec /test | |
parent | ea32a38d73dc4c1dec030c2c52d339e8976b881b (diff) | |
download | puppet-1b2ee4bb9d9fef44bdf8217f45d6893b7609a432.tar.gz puppet-1b2ee4bb9d9fef44bdf8217f45d6893b7609a432.tar.xz puppet-1b2ee4bb9d9fef44bdf8217f45d6893b7609a432.zip |
Adding "if/else" constructs. No operators, no elsif, but it is a good start, anyway.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1483 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'test')
-rwxr-xr-x | test/language/ast.rb | 52 | ||||
-rw-r--r-- | test/language/parser.rb | 19 | ||||
-rwxr-xr-x | test/language/scope.rb | 12 |
3 files changed, 83 insertions, 0 deletions
diff --git a/test/language/ast.rb b/test/language/ast.rb index caa9cf156..5bf0c1e4f 100755 --- a/test/language/ast.rb +++ b/test/language/ast.rb @@ -16,6 +16,25 @@ require 'puppettest' class TestAST < Test::Unit::TestCase include ParserTesting + # A fake class that we can use for testing evaluation. + class FakeAST + attr_writer :evaluate + + def evaluate(*args) + return @evaluate + end + + def initialize(val = nil) + if val + @evaluate = val + end + end + + def safeevaluate(*args) + evaluate() + end + end + # Test that classes behave like singletons def test_classsingleton parent = child1 = child2 = nil @@ -888,6 +907,39 @@ class TestAST < Test::Unit::TestCase objects = scope.evaluate(:ast => top) } end + + def test_if + astif = nil + astelse = nil + fakeelse = FakeAST.new(:else) + faketest = FakeAST.new(true) + fakeif = FakeAST.new(:if) + + assert_nothing_raised { + astelse = AST::Else.new(:statements => fakeelse) + } + assert_nothing_raised { + astif = AST::IfStatement.new( + :test => faketest, + :statements => fakeif, + :else => astelse + ) + } + + # We initialized it to true, so we should get that first + ret = nil + assert_nothing_raised { + ret = astif.evaluate(:scope => "yay") + } + assert_equal(:if, ret) + + # Now set it to false and check that + faketest.evaluate = false + assert_nothing_raised { + ret = astif.evaluate(:scope => "yay") + } + assert_equal(:else, ret) + end end # $Id$ diff --git a/test/language/parser.rb b/test/language/parser.rb index 722d95d95..4328096b5 100644 --- a/test/language/parser.rb +++ b/test/language/parser.rb @@ -481,6 +481,25 @@ file { "/tmp/yayness": parser.parse } end + + def test_parsingif + parser = Puppet::Parser::Parser.new() + exec = proc do |val| + %{exec { "/bin/echo #{val}": logoutput => true }} + end + str1 = %{if true { #{exec.call("true")} }} + ret = nil + assert_nothing_raised { + ret = parser.parse(str1) + } + assert_instance_of(Puppet::Parser::AST::IfStatement, ret) + str2 = %{if true { #{exec.call("true")} } else { #{exec.call("false")} }} + assert_nothing_raised { + ret = parser.parse(str2) + } + assert_instance_of(Puppet::Parser::AST::IfStatement, ret) + assert_instance_of(Puppet::Parser::AST::Else, ret.else) + end end # $Id$ diff --git a/test/language/scope.rb b/test/language/scope.rb index 7fdfdfd90..bf5eadd8d 100755 --- a/test/language/scope.rb +++ b/test/language/scope.rb @@ -707,6 +707,18 @@ class TestScope < Test::Unit::TestCase assert_equal("parentfoo", flat[0]["owner"], "default did not take") end + # Make sure we know what we consider to be truth. + def test_truth + assert_equal(true, Puppet::Parser::Scope.true?("a string"), + "Strings not considered true") + assert_equal(true, Puppet::Parser::Scope.true?(true), + "True considered true") + assert_equal(false, Puppet::Parser::Scope.true?(""), + "Empty strings considered true") + assert_equal(false, Puppet::Parser::Scope.true?(false), + "false considered true") + end + if defined? ActiveRecord # Verify that we recursively mark as collectable the results of collectable # components. |