/* Copyright (c) 2007 Timothy Wall, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.win32;
import java.util.Map;
import java.util.Random;
import org.junit.Test;
import com.sun.jna.Native;
/**
* @author lgoldstein
*/
public class Kernel32EnvironmentVarsTest extends AbstractWin32TestSupport {
public Kernel32EnvironmentVarsTest() {
super();
}
@Test
public void testKernelUtilGetEnvironmentStrings() {
Map<String,String> vars=Kernel32Util.getEnvironmentVariables();
for (Map.Entry<String,String> entry : vars.entrySet()) {
String name=entry.getKey(), expected=entry.getValue();
if("".equals(name)) {
// Empty names are created by and env-entry with name "=C:..."
// as "=" is the split character, this fails here
continue;
}
char[] data=new char[expected.length() + 1];
int size=Kernel32.INSTANCE.GetEnvironmentVariable(name, data, data.length);
assertEquals("Mismatched retrieved length for " + name, data.length - 1 /* w/o the '\0' */, size);
String actual=Native.toString(data);
assertEquals("Mismatched retrieved value for " + name, expected, actual);
}
}
@Test
public void testKernelSetAndGetEnvironmentVariable() {
String name=getCurrentTestName(), expected="42";
assertCallSucceeded("SetEnvironmentVariable", Kernel32.INSTANCE.SetEnvironmentVariable(name, expected));
try {
int size = Kernel32.INSTANCE.GetEnvironmentVariable(name, null, 0);
assertEquals("Mismatched required buffer size", expected.length() + 1, size);
char[] data = new char[size];
assertEquals("Mismatched retrieved variable data length", size - 1, Kernel32.INSTANCE.GetEnvironmentVariable(name, data, size));
String actual=Native.toString(data);
assertEquals("Mismatched retrieved variable value", expected, actual);
} finally {
assertCallSucceeded("Clean up variable", Kernel32.INSTANCE.SetEnvironmentVariable(name, null));
}
}
@Test
public void testKernelUtilGetEnvironmentVariable() {
String name=getCurrentTestName(), expected=Integer.toString(new Random().nextInt());
assertCallSucceeded("SetEnvironmentVariable", Kernel32.INSTANCE.SetEnvironmentVariable(name, expected));
try {
assertEquals("Mismatched retrieved value", expected, Kernel32Util.getEnvironmentVariable(name));
} finally {
assertCallSucceeded("Clean up variable", Kernel32.INSTANCE.SetEnvironmentVariable(name, null));
}
}
}