def __init__(self, parameters={}): self.cab_filename = parameters.get("cab_filename", None) self.max_data = parameters.get("max_data", 0) self.cabset = parameters.get("cabset", None) self.size = 0 index_in_set = parameters.get("index_in_set", 0) cfdata_reserve = parameters.get("cfdata_reserve", 0) cfheader_reserve = parameters.get("cfheader_reserve", 0) cffolder_reserve = parameters.get("cffolder_reserve", 0) if cfheader_reserve != 0 or cffolder_reserve != 0 or cfdata_reserve != 0: flags = CFHEADER.cfhdrRESERVE_PRESENT else: flags = 0x0000 reserve = { 'cbCFHeader': cfheader_reserve, 'cbCFFolder': cffolder_reserve, 'cbCFData': cfdata_reserve } self.cfheader = CFHEADER(flags=flags, reserve=reserve) self.cfheader.iCabinet = index_in_set self.cffolder_list = [] self.cffile_list = [] self.cfdata_list = [] # This is a help for calculating fields, is not part of the specification self.folder_id = 0
def test_cffolder_add_file(self): reserve = {'cbCFHeader': 0, 'cbCFFolder': 0, 'cbCFData': 0} cfheader = CFHEADER(flags=0, reserve=reserve) cffolder = CFFOLDER(cfheader=cfheader) cffile = CFFILE(cffolder=cffolder, filename="trav.txt") cffolder.add_file(cffile) self.assertEquals(1, cfheader.cFiles)
def test_cfdata_with_reserve(self): data = "this is the data" reserve = {'cbCFHeader': 0, 'cbCFFolder': 0, 'cbCFData': 20} cfheader = CFHEADER(flags=CFHEADER.cfhdrRESERVE_PRESENT, reserve=reserve) cffolder = CFFOLDER(cfheader=cfheader) cfdata = CFDATA(cffolder=cffolder, data=data) self.assertEquals(20, len(cfdata.abReserve)) self.assertEquals(len(cfdata), len(repr(cfdata)))
def test_cffolder_add_data(self): reserve = {'cbCFHeader': 0, 'cbCFFolder': 0, 'cbCFData': 0} cfheader = CFHEADER(flags=0, reserve=reserve) cffolder = CFFOLDER(cfheader=cfheader) cfdata = CFDATA(data="testdata1") cffolder.add_data(cfdata) cfdata = CFDATA(data="testdata2") cffolder.add_data(cfdata) self.assertEquals(2, cffolder.cCFData)
def test_cfheader_signature(self): """ This method checks a cfheader complies with basic specification """ reserve = {'cbCFHeader': 0, 'cbCFFolder': 0, 'cbCFData': 0} cfheader = CFHEADER(flags=0, reserve=reserve) self.assertEquals("MSCF", cfheader.signature) self.assertEquals(0x01, cfheader.versionMajor) self.assertEquals(0x03, cfheader.versionMinor)
def test_cfheader_reserve(self): """ This method checks a cfheader actually reserves the bytes that are specified """ bytes_to_reserve = random.randint(1, 30) reserve = { 'cbCFHeader': bytes_to_reserve, 'cbCFFolder': 0, 'cbCFData': 0 } cfheader = CFHEADER(flags=CFHEADER.cfhdrRESERVE_PRESENT, reserve=reserve) self.assertEquals(CFHEADER.cfhdrRESERVE_PRESENT, cfheader.flags & CFHEADER.cfhdrRESERVE_PRESENT) self.assertEquals(bytes_to_reserve, cfheader.cbCFHeader) self.assertEquals(bytes_to_reserve, len(cfheader.abReserve)) self.assertEquals(len(cfheader), len(repr(cfheader)))
def test_cfheader_add_folder(self): reserve = {'cbCFHeader': 0, 'cbCFFolder': 0, 'cbCFData': 0} cfheader = CFHEADER(flags=0, reserve=reserve) cffolder = CFFOLDER(cfheader=cfheader) cfheader.add_folder(cffolder) self.assertEquals(1, cfheader.cFolders)
def test_cffolder_with_reserve(self): reserve = {'cbCFHeader': 0, 'cbCFFolder': 20, 'cbCFData': 0} cfheader = CFHEADER(flags=CFHEADER.cfhdrRESERVE_PRESENT, reserve=reserve) cffolder = CFFOLDER(cfheader=cfheader) self.assertEquals(20, len(cffolder.abReserve))