[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Recommended way to get file directory
- From: "J.Jørgen von Bargen" <jjvb.primus@...>
- Date: Thu, 24 Feb 2011 14:04:56 +0100
Hi, folks
The problem lies in nested scripts that do not (and should not) know
the absolute position of the required sub-scripts (relative to "/" or
to the running application).
I have a similar problem with loading libraries for our testing system.
The layout is about this (well, with lot's more of files)
testlib/database/client.lua
testlib/communication/client.lua
testlib/communication/jxml.lua
testlib/api/client.lua
testlib/path.lua
in testlib/path.lua I simply have
local package=package
module("testlib.path")
package.path=package.path..";testlib/?.lua"
(because the way module/require works, this will only be executed once,
no matter how often require"testlib.path" is used)
I a testenvironment I copy the testlib into a subfolder (well, really I
check it out from a subversion repository, but that does not matter
here, and there are *many* testenvironments, which share the testlib in
this way)
So it looks like this
testfordevicexyz/testlib/database/client.lua
testfordevicexyz/testlib/communication/client.lua
testfordevicexyz/testlib/communication/jxml.lua
testfordevicexyz/testlib/api/client.lua
testfordevicexyz/testlib/path.lua
testfordevicexyz/testcase1.lua
testfordevicexyz/testcase2.lua
testfordevicexyz/testcase3.lua
testfordevicexyz/testcase4.lua
The testcases then look like this
require"testlib.path" -- get path to the testlib
require"communication.client" -- load the client
--
-- connect to device
--
local dev=communication.client.Connect("DeviceXYZ")
--
-- call some functions
--
local result=dev:InvokeMethodXyz("SomeTestParameter")
This works nearly fine but one problem remains:
In communication/client.lua I do a require"communication.jxml", which is
ok when called from testcaseX, because the path is set accordingly.
But when I want use the client.lua and jxml.lua somewhere else, the
require will fail, so I have to do
package.path=package.path..";../?.lua" in the client.lua to get it
working, which doesnt make me happy.
On the other hand, when I do require"jxml", the client will work
standalone, but will not be usable in the testlib, because the require
then will fail.
Any suggestions to solve this better?
Regards, Jørgen