package com.technofovea.hllib;
import com.sun.jna.Memory;
import com.technofovea.hllib.enums.PackageType;
import com.technofovea.hllib.masks.FileMode;
import com.technofovea.hllib.masks.FindType;
import com.technofovea.hllib.methods.FullLibrary;
import com.technofovea.hllib.methods.ManagedLibrary;
import java.io.File;
import java.io.FileInputStream;
import java.net.URL;
import junit.framework.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
/**
*
* @author Darien Hager
*/
public class FindingTest {
static ManagedLibrary fixture;
@BeforeClass
public static void BeforeClass() throws Exception {
DllPathFinder.setJnaPathPath();
fixture = HlLib.getLibrary();
}
private HlPackage openFile(ManagedLibrary lib, File target) throws Exception {
FileMode fm = new FileMode();
fm.set(FileMode.INDEX_MODE_READ);
PackageType pt = lib.getPackageTypeFromName(target.getAbsolutePath());
if (pt == PackageType.NONE) {
FileInputStream fis = new FileInputStream(target);
byte[] testHeader = new byte[FullLibrary.HL_DEFAULT_PACKAGE_TEST_BUFFER_SIZE];
int loaded = fis.read(testHeader);
Memory m = new Memory(loaded);
m.write(0, testHeader, 0, loaded);
pt = lib.getPackageTypeFromMemory(m, loaded);
}
HlPackage pkg = lib.createPackage(pt);
Assert.assertNotNull(pkg);
Assert.assertFalse(pkg.isClosed());
boolean r_bind = lib.bindPackage(pkg);
Assert.assertTrue(r_bind);
boolean r_open = lib.packageOpenFile(target.getAbsolutePath(), fm);
Assert.assertTrue(r_open);
return pkg;
}
@Test
public void testGcfListing() throws Exception {
URL testurl = GcfFinder.getTestGcf();
File testfile = new File(testurl.toURI());
HlPackage pkg = openFile(fixture, testfile);
String[] existingItems = new String[]{
"root\\valve\\cl_dlls\\GameUI.dll",
"root\\valve\\cl_dlls\\particleman.dll",
};
String[] absentItems = new String[]{
"root\\valve\\cl_dlls\\MissingFile.txt",
"root\\valve\\particleman.dll",
"root\\PARTICLEMAN.DLL",
"PARTICLEMAN.DLL",
};
DirectoryItem root = fixture.packageGetRoot();
FindType ft = new FindType();
ft.set(FindType.HL_FIND_CASE_SENSITIVE,false);
ft.set(FindType.HL_FIND_FILES);
for(String searchString: existingItems){
String[] bits = searchString.split("\\\\");
String fname = bits[bits.length-1];
DirectoryItem result = fixture.folderGetItemByPath(root, searchString, ft);
Assert.assertEquals(fname,result.getName());
Assert.assertNotNull(result);
Assert.assertTrue(fixture.itemGetSize(result) > 0);
}
for(String searchString: absentItems){
DirectoryItem result = fixture.folderGetItemByPath(root, searchString, ft);
Assert.assertNull(result);
}
fixture.packageRemove(pkg);
}
}