Let os.getenv() return System.getenv() values first for JSE, then fall back to properties

This commit is contained in:
James Roseborough
2015-03-15 23:23:38 +00:00
parent 17ffcc6940
commit 31c13af7b4
4 changed files with 45 additions and 5 deletions

View File

@@ -976,6 +976,7 @@ Files are no longer hosted at LuaForge.
<li>List keyeq() and keyindex() methods as abstract on LuaTable.Entry (issue #37).</li>
<li>Fix return value for table.remove() and table.insert() (fixes issue #39)</li>
<li>Fix aliasing issue for some multiple assignments from varargs return values (fixes issue #38)</li>
<li>Let os.getenv() return System.getenv() values first for JSE, then fall back to properties (fixes issue #25)</li>
</ul></td></tr>
</table></td></tr></table>

View File

@@ -405,7 +405,18 @@ public class OsLib extends TwoArgFunction {
/**
* Returns the value of the process environment variable varname,
* or null if the variable is not defined.
* or the System property value for varname,
* or null if the variable is not defined in either environment.
*
* The default implementation, which is used by the JmePlatform,
* only queryies System.getProperty().
*
* The JsePlatform overrides this behavior and returns the
* environment variable value using System.getenv() if it exists,
* or the System property value if it does not.
*
* A SecurityException may be thrown if access is not allowed
* for 'varname'.
* @param varname
* @return String value, or null if not defined
*/

View File

@@ -84,6 +84,11 @@ public class JseOsLib extends org.luaj.vm2.lib.OsLib {
public JseOsLib() {
}
protected String getenv(String varname) {
String s = System.getenv(varname);
return s != null? s : System.getProperty(varname);
}
protected Varargs execute(String command) {
int exitValue;
try {

View File

@@ -1,21 +1,25 @@
package org.luaj.vm2.lib.jse;
import org.luaj.vm2.LuaValue;
import org.luaj.vm2.lib.OsLib;
import org.luaj.vm2.lib.jme.JmePlatform;
import junit.framework.TestCase;
public class OsLibTest extends TestCase {
OsLib lib;
LuaValue jme_lib;
LuaValue jse_lib;
double time;
public void setUp() {
lib = new OsLib();
jse_lib = JsePlatform.standardGlobals().get("os");;
jme_lib = JmePlatform.standardGlobals().get("os");;
time = new java.util.Date(2001-1900, 7, 23, 14, 55, 02).getTime() / 1000.0;
}
void t(String format, String expected) {
String actual = lib.date(format, time);
String actual = jme_lib.get("date").call(LuaValue.valueOf(format), LuaValue.valueOf(time)).tojstring();
assertEquals(expected, actual);
}
@@ -52,4 +56,23 @@ public class OsLibTest extends TestCase {
public void testStringDate_UW_pos2() { time+=2*DAY; t("%c %U %W", "Sat Aug 25 14:55:02 2001 33 34"); }
public void testStringDate_UW_pos3() { time+=3*DAY; t("%c %U %W", "Sun Aug 26 14:55:02 2001 34 34"); }
public void testStringDate_UW_pos4() { time+=4*DAY; t("%c %U %W", "Mon Aug 27 14:55:02 2001 34 35"); }
public void testJseOsGetenvForEnvVariables() {
LuaValue USER = LuaValue.valueOf("USER");
LuaValue jse_user = jse_lib.get("getenv").call(USER);
LuaValue jme_user = jme_lib.get("getenv").call(USER);
assertFalse(jse_user.isnil());
assertTrue(jme_user.isnil());
System.out.println("User: " + jse_user);
}
public void testJseOsGetenvForSystemProperties() {
System.setProperty("test.key.foo", "test.value.bar");
LuaValue key = LuaValue.valueOf("test.key.foo");
LuaValue value = LuaValue.valueOf("test.value.bar");
LuaValue jse_value = jse_lib.get("getenv").call(key);
LuaValue jme_value = jme_lib.get("getenv").call(key);
assertEquals(value, jse_value);
assertEquals(value, jme_value);
}
}