79 lines
2.8 KiB
Lua
79 lines
2.8 KiB
Lua
require("import") -- the import fn
|
|
import("nspace") -- import lib
|
|
|
|
-- catch "undefined" global variables
|
|
local env = _ENV -- Lua 5.2
|
|
if not env then env = getfenv () end -- Lua 5.1
|
|
setmetatable(env, {__index=function (t,i) error("undefined global variable `"..i.."'",2) end})
|
|
|
|
ns = nspace
|
|
|
|
-- Inheritance
|
|
blue1 = ns.Outer.Inner3.Blue()
|
|
|
|
-- blue1:blueInstanceMethod()
|
|
blue1:colorInstanceMethod(60.0)
|
|
blue1.instanceMemberVariable = 4
|
|
assert( blue1.instanceMemberVariable == 4 )
|
|
|
|
-- Constructors
|
|
color1 = ns.Outer.Inner1.Color()
|
|
color2 = ns.Outer.Inner1.Color.create()
|
|
color = ns.Outer.Inner1.Color(color1)
|
|
color3 = ns.Outer.Inner2.Color.create()
|
|
color4 = ns.Outer.Inner2.Color.create()
|
|
color5 = ns.Outer.Inner2.Color.create()
|
|
mwp2 = ns.Outer.MyWorldPart2()
|
|
gc = ns.GlobalClass()
|
|
|
|
nnsp = ns.NoNSpacePlease()
|
|
|
|
-- Class methods
|
|
color:colorInstanceMethod(20.0)
|
|
ns.Outer.Inner1.Color.colorStaticMethod(30.0)
|
|
color3:colorInstanceMethod(40.0)
|
|
ns.Outer.Inner2.Color.colorStaticMethod(50.0)
|
|
color3:colors(color1, color2, color3, color4, color5)
|
|
|
|
gc:gmethod()
|
|
|
|
-- Class variables
|
|
color.instanceMemberVariable = 5
|
|
color1.instanceMemberVariable = 7
|
|
assert( color.instanceMemberVariable == 5 )
|
|
assert( color1.instanceMemberVariable == 7 )
|
|
assert(ns.Outer.Inner1.Color.staticMemberVariable == 0 )
|
|
assert(ns.Outer.Inner2.Color.staticMemberVariable == 0 )
|
|
ns.Outer.Inner1.Color.staticMemberVariable = 9
|
|
ns.Outer.Inner2.Color.staticMemberVariable = 11
|
|
assert(ns.Outer.Inner1.Color.staticMemberVariable == 9)
|
|
assert(ns.Outer.Inner2.Color.staticMemberVariable == 11)
|
|
|
|
-- Class constants
|
|
assert( ns.Outer.Inner1.Color.Specular == 0x20 )
|
|
assert( ns.Outer.Inner2.Color.Specular == 0x40 )
|
|
assert( ns.Outer.Inner1.Color.staticConstMemberVariable == 222 )
|
|
assert( ns.Outer.Inner2.Color.staticConstMemberVariable == 333 )
|
|
assert( ns.Outer.Inner1.Color.staticConstEnumMemberVariable ~= ns.Outer.Inner2.Color.staticConstEnumMemberVariable )
|
|
|
|
|
|
-- Aggregation
|
|
sc = ns.Outer.SomeClass()
|
|
assert( sc:GetInner1ColorChannel() ~= sc:GetInner2Channel() )
|
|
assert( sc:GetInner1Channel() ~= sc:GetInner2Channel() )
|
|
|
|
-- Backward compatibility
|
|
assert(ns.Outer.Inner1.Diffuse ~= nil)
|
|
-- Enums within class within namespace shouldn't have backward compatible name. Same for static methods
|
|
assert(ns.Outer.Inner1.Color_Diffuse == nil)
|
|
assert(ns.Outer.Inner1.Color_colorStaticMethod == nil)
|
|
|
|
-- Enums and static methods of class marked as %nonspace should have backward compatible name
|
|
assert(ns.NoNSpacePlease_noNspaceStaticFunc() == 10)
|
|
assert(ns.Outer.Inner2.NoNSpacePlease_NoNspace == nil)
|
|
-- ReallyNoNSpaceEnum is wrapped into %nonspace and thus handled correctly.
|
|
-- NoNSpaceEnum is not (although both of them are in %nonspace-wrapped class) and thus
|
|
-- handled rather unexpectedly
|
|
assert(ns.NoNSpacePlease_ReallyNoNspace1 == 1)
|
|
assert(ns.NoNSpacePlease.ReallyNoNspace2 == 10)
|
|
|