summaryrefslogtreecommitdiffstats
path: root/test/language/ast/selector.rb
blob: 0c9a6e675408eda1aa6fe81c988fbea3a46e2a16 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/env ruby
#
#  Created by Luke A. Kanies on 2006-12-22.
#  Copyright (c) 2006. All rights reserved.

require File.dirname(__FILE__) + '/../../lib/puppettest'

require 'puppettest'
require 'puppettest/parsertesting'

class TestSelector < Test::Unit::TestCase
    include PuppetTest
    include PuppetTest::ParserTesting
    AST = Puppet::Parser::AST
    
    def test_evaluate
        scope = mkscope
        upperparam = nameobj("MYPARAM")
        lowerparam = nameobj("myparam")
        
        should = {"MYPARAM" => "upper", "myparam" => "lower"}
        
        maker = Proc.new do
            {
            :default => AST::ResourceParam.new(:param => AST::Default.new(:value => "default"), :value => FakeAST.new("default")),
            :lower => AST::ResourceParam.new(:param => FakeAST.new("myparam"), :value => FakeAST.new("lower")),
            :upper => AST::ResourceParam.new(:param => FakeAST.new("MYPARAM"), :value => FakeAST.new("upper")),
            }
            
        end
        
        # Start out case-sensitive
        Puppet[:casesensitive] = true
        
        %w{MYPARAM myparam}.each do |str|
            param = nameobj(str)
            params = maker.call()
            sel = AST::Selector.new(:param => param, :values => params.values)
            result = nil
            assert_nothing_raised { result = sel.evaluate(scope) }
            assert_equal(should[str], result, "did not case-sensitively match %s" % str)
        end
        
        # then insensitive
        Puppet[:casesensitive] = false
        
        %w{MYPARAM myparam}.each do |str|
            param = nameobj(str)
            params = maker.call()

            # Delete the upper value, since we don't want it to match
            # and it introduces a hash-ordering bug in testing.
            params.delete(:upper)
            sel = AST::Selector.new(:param => param, :values => params.values)
            result = nil
            assert_nothing_raised { result = sel.evaluate(scope) }
            assert_equal("lower", result, "did not case-insensitively match %s" % str)
        end
    end
end