/*
* Copyright 2006 Bradley Schatz. All rights reserved.
*
* This file is part of pasco2, the next generation Internet Explorer cache
* and history record parser.
*
* pasco2 is free software; you can redistribute it and/or modify
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* pasco2 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
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with pasco2; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*/
package isi.pasco2;
import isi.pasco2.parser.time.FileTime;
import isi.pasco2.util.StructConverter;
import java.util.Date;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class TestFileTime extends TestCase {
public static TestSuite suite() {
return new TestSuite(TestFileTime.class);
}
public void testFileTime() {
long low = -543274336;
long high = 29744990;
FileTime ft = new FileTime(low, high);
long millis = ft.getTimeAsMillis();
//assertEquals(1130902272657L, millis);
Date d = ft.asDate();
assertEquals("Wed Nov 02 13:31:12 EST 2005", d.toString());
assertEquals("2005-11-02T03:31:12.657Z", ft.toString());
}
public void testBitStuff() {
String hex = "40B3B13F";
byte[] bytes = new byte[4];
for (int i=0 ; i < 4 ; i++) {
bytes[i] = (byte)Integer.parseInt(hex.substring(i*2, i*2+2), 16);
}
long res = StructConverter.bytesIntoInt(bytes,0);
assertEquals(1068610368,res);
long low = Long.parseLong(hex.substring(0,8) , 16);
low = ((low & 0xFF) << 24) | ((low & 0x0FF00) << 8) | ((low & 0xFF0000) >> 8) | ((low & 0xFF000000)>> 24);
assertEquals(1068610368,low);
}
public void testHexLittleEndian() {
String hex = "40B3B13FED2AC001";
FileTime ft = FileTime.parseLittleEndianHex(hex);
//Sat, 30 September 2000 14:46:43 GMT
assertEquals("2000-09-30T14:46:43.060Z", ft.toString());
//Wed, 26 April 2000 22:58:55 GMT
assertEquals("2000-04-26T22:58:55.899Z", FileTime.parseLittleEndianHex("39B1C8FFD2AFBF01").toString());
//Sat, 30 March 2002 05:15:11 GMT
assertEquals("2002-03-30T05:15:11.620Z", FileTime.parseLittleEndianHex("69D8F2DDA9D7C101").toString());
//Mon, 17 October 2005 02:59:22 UTC
assertEquals("2005-10-17T02:59:22.147Z", FileTime.parseLittleEndianHex("308F41C6C6D2C501").toString());
}
public void testHexBigEndian() {
String hex = "01C1D7A9DDF2D869";
FileTime ft = FileTime.parseBigEndianHex(hex);
//Sat, 30 March 2002 05:15:11 GMT
assertEquals("2002-03-30T05:15:11.620Z", ft.toString());
// Sun, 10 March 2002 06:07:32 GMT
assertEquals("2002-03-10T06:07:32.813Z", FileTime.parseBigEndianHex("01C1C7F9DDFBD86F").toString());
// Tue, 20 January 2004 04:58:58 GMT
assertEquals("2004-01-20T04:58:58.985Z", FileTime.parseBigEndianHex("01C3DF121D432432").toString());
}
public void testPassingInts() {
int[] intsLow = { 0x30, 0x8F, 0x41, 0xC6 };
byte[] bytesLow = new byte[4];
for (int i=0 ; i < 4 ; i++) {
bytesLow[i] = (byte) (intsLow[i] & 0xFF);
}
long low = StructConverter.bytesIntoUInt(bytesLow, 0);
long lowA = Long.parseLong("308F41C6", 16);
lowA = ((lowA & 0xFF) << 24) | ((lowA & 0x0FF00) << 8) | ((lowA & 0xFF0000) >> 8) | ((lowA & 0xFF000000)>> 24);
assertEquals(lowA, low);
int[] intsHigh = { 0xC6, 0xD2, 0xC5, 0x01 };
byte[] bytesHigh = new byte[4];
for (int i=0 ; i < 4 ; i++) {
bytesHigh[i] = (byte) (intsHigh[i] & 0xFF);
}
long high = StructConverter.bytesIntoUInt(bytesHigh, 0);
FileTime ft = new FileTime(low, high);
assertEquals("2005-10-17T02:59:22.147Z", ft.toString());
}
}