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