On Tue, 2008-09-30 at 14:20 +0200, Brice Figureau wrote:
> On Mon, 2008-09-29 at 13:09 -0500, Luke Kanies wrote:
> > On Sep 27, 2008, at 4:21 AM, Brice Figureau wrote:
> > > +
> > > +    it "should return 3 for 1 + 2" do
> > > +        operator =  
> > > Puppet::Parser::AST::ArithmeticOperator.new :lval => @one, :operator  
> > > => "+", :rval => @two
> > > +        operator.evaluate(@scope).should == 3
> > > +    end
> > 
> > It *might* be better here to just test that the appropriate methods  
> > are called on the numbers, rather than test the outcome.  Not that the  
> > outcome is likely to change, mind you, but our real test is that we're  
> > passing through to someone else, not that a specific number shows up.
> 
> Unfortunately the following doesn't work:
> 
>   it "should return 3 for 1 + 2" do
>       operator =  AST::ArithmeticOperator.new :lval => @one, :operator => 
> "+", :rval => @two
>       1.expects(:+).with(3)
>       operator.evaluate(@scope)
>  end
> 
> It doesn't seem possible to pose expectations on Fixnums.
> I tried every possible ways, like:
>  Fixnum.expects(:+)
> or (since that's really send that is called)
>  1.expects(:send) 
> or 
>  Fixnum.expects(:send)
> 
> The error message is:
> "no virtual class for Fixnum"

I workarounded (if that word exists) with the following:
    it "should call Puppet::Parser::Scope.number?" do
        Puppet::Parser::Scope.expects(:number?).with(1).returns(1)
        Puppet::Parser::Scope.expects(:number?).with(2).returns(2)
                                
        AST::ArithmeticOperator.new(:lval => @one, :operator => "+", :rval => 
@two).evaluate(@scope)
    end

    %w{ + - * / << >>}.each do |op|
        it "should call ruby Numeric '#{op}'" do
            one = stub 'one'
            two = stub 'two'
            operator = AST::ArithmeticOperator.new :lval => @one, :operator => 
op, :rval => @two
            Puppet::Parser::Scope.stubs(:number?).with(1).returns(one)
            Puppet::Parser::Scope.stubs(:number?).with(2).returns(two)
            one.expects(:send).with(op,two)
            operator.evaluate(@scope)
        end
    end

which I don't find really satifying, since it imposes that the test has
knowledge of the inner working of AST::ArithmeticOperator :-(
-- 
Brice Figureau <[EMAIL PROTECTED]>


--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to