/* 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.io.File;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
import junit.framework.TestCase;
public class VersionTest extends TestCase {
public static void main(String[] args) {
junit.textui.TestRunner.run(VersionTest.class);
}
public void testGetFileVersion() {
String systemRoot = System.getenv("SystemRoot");
assertNotNull("Missing system root environment variable", systemRoot);
File file = new File(systemRoot + File.separator + "regedit.exe");
if (!file.exists()) {
fail("Can't obtain file version, file " + file + " is missing");
}
String filePath = file.getAbsolutePath();
int size = Version.INSTANCE.GetFileVersionInfoSize(filePath, null);
assertTrue("GetFileVersionInfoSize(" + filePath + ")", size > 0);
Pointer buffer = Kernel32.INSTANCE.LocalAlloc(WinBase.LMEM_ZEROINIT, size);
assertTrue("LocalAlloc(" + size + ")", !buffer.equals(Pointer.NULL));
try {
assertTrue("GetFileVersionInfo(" + filePath + ")",
Version.INSTANCE.GetFileVersionInfo(filePath, 0, size, buffer));
IntByReference outputSize = new IntByReference();
PointerByReference pointer = new PointerByReference();
assertTrue("VerQueryValue",
Version.INSTANCE.VerQueryValue(buffer, "\\", pointer, outputSize));
VerRsrc.VS_FIXEDFILEINFO fixedFileInfo =
new VerRsrc.VS_FIXEDFILEINFO(pointer.getValue());
assertTrue("dwFileVersionLS", fixedFileInfo.dwFileVersionLS.longValue() > 0);
assertTrue("dwFileVersionMS", fixedFileInfo.dwFileVersionMS.longValue() > 0);
} finally {
Kernel32Util.freeGlobalMemory(buffer);
}
}
}