class LuaInRuby_Test

Public Instance Methods

assert_luastack_clean( lstate ) click to toggle source

asserts that the state's stack is empty incorrectly implemented Lua API blocks will trigger this

# File tests/lua_in_ruby_test.rb, line 498
def assert_luastack_clean( lstate )
    assert_equal 0, lstate.__top
end
assert_pairs_match( key, val, expected_key, expected_val ) click to toggle source

assert that a given key/value pair match an expected key/value pair

# File tests/lua_in_ruby_test.rb, line 503
def assert_pairs_match( key, val, expected_key, expected_val )
    assert_equal(key, expected_key) if val == expected_val
end
test_basic_types() click to toggle source

test the basic types

# File tests/lua_in_ruby_test.rb, line 40
    def test_basic_types
        l = Lua::State.new

        # eval, and basic marshaling
        assert_nil l.eval('return') 
        assert_nil l.eval('return nil') 
        assert_equal 1,     l.eval('return 1') 
        assert_equal 1.1,   l.eval('return 1.1') 
        assert_equal 'abc', l.eval('return "abc"') 
        assert_equal true,  l.eval('return true') 
        assert_equal false, l.eval('return false')
        
        # multi-ret
        a = l.eval_mult( "return" )
        assert_instance_of Array, a
        assert_equal [], a
        assert_equal 0, a.length
        a = l.eval_mult( "return 1" )
        assert_instance_of Array, a
        assert_equal [1], a
        assert_equal 1, a.length
        a = l.eval_mult( "return 1, 2, 3, 4" )
        assert_instance_of Array, a
        assert_equal [1,2,3,4], a
        assert_equal 4, a.length

        # type id
        l.eval <<LUA_END
            f = function() end
            t = {}
            u = io.output() -- userdata
LUA_END
        assert_equal Lua::TFUNCTION, l['f'].__type
        assert_equal Lua::TTABLE,    l.t.__type
        assert_equal Lua::TUSERDATA, l.u.__type
        
       # access queries
        assert_equal true,   l.indexable?
        assert_equal true,   l.new_indexable?
        assert_equal false,  l.callable?
        assert_equal true,   l.t.indexable?
        assert_equal true,   l.t.new_indexable?
        assert_equal false,  l.t.callable?
        assert_equal false,  l['f'].indexable?
        assert_equal false,  l['f'].new_indexable?
        assert_equal true,   l['f'].callable?
        assert_equal true,   l['u'].indexable?
        assert_equal false,  l['u'].new_indexable?
        assert_equal false,  l['u'].callable?

        assert_luastack_clean l
   end
test_classes() click to toggle source

test classes

# File tests/lua_in_ruby_test.rb, line 443
    def test_classes
        l = Lua::State.new

        l.eval <<END_LUA
            Account = {
                balance = 0,
                deposit = function( self, v )
                print "testing testing testing"
                    self.balance = self.balance + v
                end,
            }
END_LUA
        assert_equal Lua::Table, l.Account.class
        assert_equal 0, l.Account.balance
        assert_nothing_thrown { l.Account.deposit! 100 }
        assert_equal 100, l.Account.balance
        # DO WE WANT TO DO ANYTHING LIKE THIS?
        #assert_nothing_thrown { l.Account.!deposit 50 }
        #assert_equal 150, l.Account.balance
        #assert_nothing_thrown { l.Account.!deposit! 25 }
        #assert_equal 175, l.Account.balance

        assert_luastack_clean l
    end
test_construction() click to toggle source

test construction of various entities

# File tests/lua_in_ruby_test.rb, line 20
def test_construction
    l = Lua::State.new

    assert_instance_of Lua::State, l
    assert_instance_of Lua::Table, l.__globals
    assert_instance_of Lua::Table, l.__registry

    assert_equal l, l.__state
    assert_equal l, l.__globals.__state
    assert_equal l, l.__registry.__state

    assert_luastack_clean l
    
    assert_raise TypeError do
        l_bad = Lua::State.new "aa"    
    end
end
test_exceptions() click to toggle source

test exceptions

# File tests/lua_in_ruby_test.rb, line 470
def test_exceptions
    l = Lua::State.new

    assert_raise SyntaxError do
        l.eval( 'if !exclamation_doesnt_work then return 0 end' )
    end
   
    assert_raise RuntimeError do
        l.eval( 'error("42")' )
    end

    assert_luastack_clean l
end
test_garbage_collection() click to toggle source

test garbage collection makes sure various C-based objects are properly cleaned

# File tests/lua_in_ruby_test.rb, line 486
def test_garbage_collection
    50.times do
        l = Lua::State.new
        g = l.__globals
        l = g = nil
        GC.start
    end
end
test_libraries() click to toggle source

test libraries

# File tests/lua_in_ruby_test.rb, line 110
def test_libraries
        # invoking libraries
     l = Lua::State.new
     assert_nothing_thrown do
         STDOUT << "you should see-> Hello from Lua!-> "
         l.eval( 'print "Hello from Lua!"' )
         STDOUT << "you should see-> Hello again from Lua!-> "
         l.print "Hello again from Lua!"
     end
     assert_luastack_clean l                

     # loading libraries
     #####################
     
     l = Lua::State.new   # all
     count = 0 ; l.__globals.each_key { |k| count += 1 }
     assert_equal 39, count 
     assert_instance_of Lua::RefObject, l['ipairs']  # base library check
     assert_instance_of Lua::Table, l.package
     assert_instance_of Lua::Table, l.table
     assert_instance_of Lua::Table, l.io
     assert_instance_of Lua::Table, l.os
     assert_instance_of Lua::Table, l.string
     assert_instance_of Lua::Table, l.math
     assert_instance_of Lua::Table, l.debug

     l = Lua::State.new( :loadlibs => :all )
     count = 0 ; l.__globals.each_key { |k| count += 1 }
     assert_equal 39, count 
     assert_instance_of Lua::RefObject, l['ipairs']  # base library check
     assert_instance_of Lua::Table, l.package
     assert_instance_of Lua::Table, l.table
     assert_instance_of Lua::Table, l.io
     assert_instance_of Lua::Table, l.os
     assert_instance_of Lua::Table, l.string
     assert_instance_of Lua::Table, l.math
     assert_instance_of Lua::Table, l.debug

     l = Lua::State.new( :loadlibs => :none )
     count = 0 ; l.__globals.each_key { |k| count += 1 }
     assert_equal 0, count 
     
     l = Lua::State.new( :loadlibs => :base )
     assert_instance_of Lua::RefObject, l['ipairs']  # base library check
     assert_equal nil, l.string
     l = Lua::State.new( :loadlibs => :package )
     assert_instance_of Lua::Table, l.package
     assert_equal nil, l.string
     l = Lua::State.new( :loadlibs => :table )
     assert_instance_of Lua::Table, l.table
     assert_equal nil, l.string
     l = Lua::State.new( :loadlibs => :io )
     assert_instance_of Lua::Table, l.io
     assert_equal nil, l.string
     l = Lua::State.new( :loadlibs => :os )
     assert_instance_of Lua::Table, l.os
     assert_equal nil, l.string
     l = Lua::State.new( :loadlibs => :string )
     assert_instance_of Lua::Table, l.string
     assert_equal nil, l.io
     l = Lua::State.new( :loadlibs => :math )
     assert_instance_of Lua::Table, l.math
     assert_equal nil, l.string
     l = Lua::State.new( :loadlibs => :debug )
     assert_instance_of Lua::Table, l.debug
      assert_equal nil, l.string
     
     l = Lua::State.new( :loadlibs => [:base, :package, :io] )
     assert_instance_of Lua::RefObject, l['ipairs']  # base library check
     assert_instance_of Lua::Table, l.package
     assert_instance_of Lua::Table, l.io
 end
test_method_dispatch() click to toggle source

test method dispatch

# File tests/lua_in_ruby_test.rb, line 390
    def test_method_dispatch
        l = Lua::State.new        
        l.eval <<END_OF_LUA
            str = "a"
            function uniret() return 1 end
            function uniret2(a) return a end
            function multiret() return 1, 2, 3 end
            function multiret2(a,b) return 1, a, b end
            
            t = {}
            t.str = "a"
            t.uniret = uniret
            t.uniret2 = uniret2
            t.multiret = multiret
            t.multiret2 = multiret2
END_OF_LUA

        assert_equal 'a', l.str
        assert_equal 'a', l.t.str
        assert_equal 'a', l.str()   # ugly, but Ruby 
        assert_equal 'a', l.t.str() # ugly, but Ruby
        assert_kind_of String, l.str
        assert_kind_of String, l.t.str
        assert_raise RuntimeError do l.str_   end
        assert_raise RuntimeError do l.str!   end
        assert_raise RuntimeError do l.str(2) end
        
        assert_kind_of Lua::RefObject, l['uniret']
        assert_kind_of Float, l.uniret
        assert_kind_of Float, l.uniret_
        assert_equal 1, l.uniret()
        assert_equal 1, l.uniret_
        assert_equal 1, l.t.uniret
        assert_equal 1, l.t.uniret()
        assert_equal 2, l.uniret2(2)
        assert_equal 2, l.t.uniret2(2)
        r = l.uniret2 2 ; assert_equal 2, r
        r = l.t.uniret2 2 ; assert_equal 2, r
                                 
        assert_equal [1,2,3], l.multiret
        assert_equal [1,2,3], l.multiret()
        assert_equal [1,2,3], l.t.multiret
        assert_equal [1,2,3], l.t.multiret()
        assert_equal [1,5,6], l.multiret2( 5, 6 )
        assert_equal [1,5,6], l.t.multiret2( 5, 6 )
        r = l.multiret2 5, 6 ; assert_equal [1,5,6], r
        r = l.t.multiret2 5, 6 ; assert_equal [1,5,6], r

        assert_luastack_clean l
    end
test_module() click to toggle source

test module-level entities

# File tests/lua_in_ruby_test.rb, line 11
def test_module
    assert_not_nil( Lua::BRIDGE_VERSION )
    assert_not_nil( Lua::BRIDGE_VERSION_NUM )
    assert_not_nil( Lua::LUA_VERSION )
    assert_not_nil( Lua::LUA_RELEASE )        
end
test_setters() click to toggle source

test setters

# File tests/lua_in_ruby_test.rb, line 95
def test_setters
    l = Lua::State.new
    
    l.v = 5   ; assert_equal 5, l.v
    l.a = {}  ; assert_instance_of Lua::Table, l.a
    l.a.v = 7 ; assert_equal 7, l.a.v

    l['b']   = 6 ; assert_equal 6, l.b               
    l.a['b'] = 7 ; assert_equal 7, l.a.b               
    
   assert_luastack_clean l                
end
test_table_access() click to toggle source

test table accesses

# File tests/lua_in_ruby_test.rb, line 235
    def test_table_access
        l = Lua::State.new
        l.eval <<LUA_END
            a = { 1, 2, 3, 4 }
            h = { a='x', b='y',
                  [true]  = 'a',
                  [false] = 'b',
                  [1.3]   = 'z', }
            h2 = { a='x', b='y', }
LUA_END

        assert_instance_of Lua::Table, l.a
        assert_instance_of Lua::Table, l.h
        assert_instance_of Lua::Table, l.h2
        assert_instance_of Lua::Table, l['a']
        assert_instance_of Lua::Table, l['h']
        assert_instance_of Lua::Table, l['h2']
                 
        assert_nil      l.a[0]
        assert_equal 1, l.a[1]
        assert_equal 2, l.a[2]
        assert_equal 3, l.a[3]
        assert_equal 4, l.a[4]
        assert_equal 4, l.a.__length

        assert_equal 'x', l.h.a
        assert_equal 'y', l.h.b

        assert_nil        l.h[0]
        assert_equal 'x', l.h['a']
        assert_equal 'y', l.h['b']

        assert_equal 'z', l.h[1.3]
        assert_equal 'a', l.h[true]
        assert_equal 'b', l.h[false]
        assert_equal 0,   l.h.__length  # length only applies to Array

        temp = (l.a[10] = 'x')
        assert_equal 'x', temp
        assert_equal 'x', l.a[10]

        assert_instance_of Array,     l.a.to_array
        assert_instance_of Hash,      l.h2.to_hash
        assert_equal( [1,2,3,4],      l.a.to_array)
        assert_equal( {'a' => 'x','b' => 'y'}, l.h2.to_hash)

        assert_luastack_clean l
    end
test_table_creation_from_ruby() click to toggle source

test table creation from ruby

# File tests/lua_in_ruby_test.rb, line 185
def test_table_creation_from_ruby
    l = Lua::State.new

    l.eval( "a = {}")
    assert_instance_of Lua::Table, l.a

    s = "return {1,2,3}"
    assert_instance_of Lua::Table, l.eval(s)
    assert_equal 3, l.eval(s).__length
    assert_equal [1,2,3], l.eval(s).to_array
    
    b = l.new_table_at 'b'
    assert_instance_of Lua::Table, b
    assert_instance_of Lua::Table, l.b

    b = l.a.new_table_at 'b'
    assert_instance_of Lua::Table, b
    assert_instance_of Lua::Table, l.a.b
    
    l.c = []
    assert_instance_of Lua::Table, l.c
    assert_equal 0, l.c.__length
    
    l.d = {}
    assert_instance_of Lua::Table, l.d
    assert_equal 0, l.d.__length
            
    e = [1,2,3,4]
    l.e = e
    assert_equal 1, l.e[1]
    assert_equal 2, l.e[2]
    assert_equal 3, l.e[3]
    assert_equal 4, l.e[4]
    assert_equal e, l.e.to_array
    assert_instance_of Lua::Table, l.e

    f = { 1=>1, 2=>2, 'a'=>3, 'b'=>4 }
    l.f = f
    assert_equal 1, l.f[1]
    assert_equal 2, l.f[2]
    assert_equal 3, l.f['a']
    assert_equal 4, l.f['b']
    assert_equal 2, l.f.__length
    assert_instance_of Lua::Table, l.f
    
    assert_luastack_clean l
end
test_table_iteration() click to toggle source

test table iteration

# File tests/lua_in_ruby_test.rb, line 286
def test_table_iteration
    l = Lua::State.new

    # array integer iteration
    l.eval( "array = { 100, 200, 300, 400 }" )
    assert_instance_of Lua::Table, l.array                
    n = 0 ; l.array.each_ipair { |k,v| n += 1
        assert_pairs_match( k, v, 1, 100 )
        assert_pairs_match( k, v, 2, 200 )
        assert_pairs_match( k, v, 3, 300 )
        assert_pairs_match( k, v, 4, 400 )
    }
    assert_equal(4, n)         

    n = 0 ; l.array.each_ikey { |k| n += 1
        assert_pairs_match( n, k, 1, 1 )
        assert_pairs_match( n, k, 2, 2 )
        assert_pairs_match( n, k, 3, 3 )
        assert_pairs_match( n, k, 4, 4 )
        assert( n <= 4 )
    }
    assert_equal(4, n)

    sumv = n = 0 ; l.array.each_ivalue { |v| n += 1
        sumv += v
        assert_equal(v, n*100)
    }
    assert_equal(4, n) ; assert_equal(1000, sumv)         

    # hash integer iteration
    l.eval( "hsh = { [1]=100, [2]=200, a=300, b=400, }" )
    assert_instance_of Lua::Table, l.hsh
    n = 0 ; l.hsh.each_ipair { |k,v| n += 1
        assert_pairs_match( k, v, 1, 100 )
        assert_pairs_match( k, v, 2, 200 )
        assert_pairs_match( k, v, 'a', 300 )
        assert_pairs_match( k, v, 'b', 400 )
    }
    assert_equal(2, n)         

    sumk = n = 0 ; l.hsh.each_ikey { |k| n += 1
        sumk += k
    }
    assert_equal(2, n) ; assert_equal(3, sumk)         

    sumv = n = 0 ; l.hsh.each_ivalue { |v| n += 1
        sumv += v
        assert_equal(v, n*100)
    }
    assert_equal(2, n) ; assert_equal(300, sumv)         
            
    # array assoc iteration
    l.eval( "array = { 100, 200, 300, 400 }" )
    assert_instance_of Lua::Table, l.array                
    n = 0 ; l.array.each_pair { |k,v| n += 1
        assert_pairs_match( k, v, 1, 100 )
        assert_pairs_match( k, v, 2, 200 )
        assert_pairs_match( k, v, 3, 300 )
        assert_pairs_match( k, v, 4, 400 )
    }
    assert_equal(4, n)         

    sumk = n = 0 ; l.array.each_key { |k| n += 1
        sumk += k
        assert_equal(k, n)
    }
    assert_equal(4, n) ; assert_equal(10, sumk)         

    sumv = n = 0 ; l.array.each_ivalue { |v| n += 1
        sumv += v
        assert_equal(v, n*100)
    }
    assert_equal(4, n) ; assert_equal(1000, sumv)         

    # hash assoc iteration
    l.eval( "hsh = { [1]=100, [2]=200, a=300, b=400, }" )
    assert_instance_of Lua::Table, l.array                
    n = 0 ; l.hsh.each_pair { |k,v| n += 1
        assert_pairs_match( k, v, 1, 100 )
        assert_pairs_match( k, v, 2, 200 )
        assert_pairs_match( k, v, 'a', 300 )
        assert_pairs_match( k, v, 'b', 400 )
    }
    assert_equal( n, 4)

    n = 0 ; l.hsh.each_key { |k| n += 1 
        assert_pairs_match( n, k, 1, 100 )
        assert_pairs_match( n, k, 2, 200 )
        assert_pairs_match( n, k, 3, 'a' )
        assert_pairs_match( n, k, 4, 'b' )
    }
    assert_equal( n, 4)
    
    n = sumv = 0 ; l.hsh.each_value { |v| n += 1
        sumv += v
    }
    assert_equal(4, n) ; assert_equal( sumv, 1000)

    # done iteration tests
    assert_luastack_clean l
end