Ejemplo n.º 1
0
    def test_write_string(self):
        w0 = wad.WadFile(self.buff, 'w')
        w0.writestr('test.cfg', b'bind ALT +strafe')
        w0.writestr(wad.WadInfo('readme.txt'), 'test')

        info = wad.WadInfo('bytes')
        info.file_size = len(b'bytes')
        info.type = wad.TYPE_LUMP
        w0.writestr(info, io.BytesIO(b'bytes'))

        w0.close()

        self.buff.seek(0)

        w1 = wad.WadFile(self.buff, 'r')

        self.assertTrue('test.cfg' in w1.namelist(), 'Cfg file should be in Wad file')
        self.assertTrue('readme.txt' in w1.namelist(), 'Txt file should be in Wad file')
        self.assertTrue('bytes' in w1.namelist(), 'Bytes should be in Wad file')
        self.assertEqual(w1.read('test.cfg'), b'bind ALT +strafe', 'Cfg file content should not change')
        self.assertEqual(w1.read('readme.txt').decode('ascii'), 'test', 'Txt file content should not change')
        self.assertEqual(w1.read('bytes'), b'bytes', 'Bytes content should not change')

        w1.close()
        self.buff.close()
Ejemplo n.º 2
0
    def test_empty_pak_file(self):
        with wad.WadFile(self.buff, 'w'):
            pass

        self.buff.seek(0)

        with wad.WadFile(self.buff, 'r') as wad_file:
            self.assertEqual(len(wad_file.namelist()), 0, 'Wad file should have not entries')
            self.assertEqual(wad_file.start_of_directory, 12, 'Directory should start immediately after header')
Ejemplo n.º 3
0
    def test_zero_byte_file(self):
        with wad.WadFile(self.buff, 'w') as wad_file:
            wad_file.writestr('zero.txt', b'')

        self.buff.seek(0)

        with wad.WadFile(self.buff) as wad_file:
            info = wad_file.getinfo('zero.txt')
            self.assertEqual(info.file_offset, 12, 'File Info offset of test file should be 12')
            self.assertEqual(info.file_size, 0, 'File Info size of test file should be 0')

            data = wad_file.read('zero.txt')
            self.assertEqual(len(data), 0, 'Length of bytes read should be zero.')
Ejemplo n.º 4
0
    def test_context_manager(self):
        with wad.WadFile('./test_data/test.wad', 'r') as wad_file:
            self.assertFalse(wad_file.fp.closed, 'File should be open')
            self.assertEqual(wad_file.mode, 'r', 'File mode should be \'r\'')
            fp = wad_file.fp
            wad_file._did_modify = False

        self.assertTrue(fp.closed, 'File should be closed')
        self.assertIsNone(wad_file.fp, 'File pointer should be cleaned up')
Ejemplo n.º 5
0
    def test_append(self):
        f = open('./test_data/test.wad', 'rb')
        buff = io.BytesIO(f.read(-1))
        f.close()

        wad_file = wad.WadFile(buff, 'a')
        wad_file.write('./test_data/test.bsp')
        wad_file.close()

        buff.seek(0)

        wad_file = wad.WadFile(buff, 'r')
        self.assertTrue('test.bsp' in wad_file.namelist(), 'Appended file should be in Wad file')

        fp = wad_file.fp
        wad_file.close()

        self.assertFalse(buff.closed, 'Wad file should not close passed file-like object')

        buff.close()
Ejemplo n.º 6
0
    def test_write(self):
        wad_file = wad.WadFile(self.buff, 'w')
        self.assertFalse(wad_file.fp.closed, 'File should be open')

        wad_file.write('./test_data/test.mdl')
        wad_file.write('./test_data/test.bsp', 'e1m1.bsp')

        self.assertTrue('test.mdl' in wad_file.namelist(), 'Mdl file should be in Wad file')
        self.assertTrue('e1m1.bsp' in wad_file.namelist(), 'Bsp file should be in Wad file')

        fp = wad_file.fp
        wad_file.close()
        self.assertFalse(fp.closed, 'File should be open')
        self.assertIsNone(wad_file.fp, 'File pointer should be cleaned up')

        self.buff.close()
Ejemplo n.º 7
0
    def test_read(self):
        wad_file = wad.WadFile('./test_data/test.wad', 'r')
        self.assertFalse(wad_file.fp.closed, 'File should be open')

        info = wad_file.getinfo('test')
        self.assertIsNotNone(info, 'FileInfo should not be None')
        self.assertEqual(info.filename, 'test')
        self.assertEqual(info.file_size, 5480, 'FileInfo size of test file should be 5480')
        self.assertEqual(info.file_offset, 12, 'FileInfo offset of test file should be 12')
        self.assertEqual(info.type, wad.TYPE_MIPTEX, 'FileInfo type of test file should be MIPTEX')

        file = wad_file.open('test')
        self.assertIsNotNone(file, 'File should not be None')
        file.close()

        fp = wad_file.fp
        wad_file.close()
        self.assertTrue(fp.closed, 'File should be closed')
        self.assertIsNone(wad_file.fp, 'File pointer should be cleaned up')
Ejemplo n.º 8
0
                        '--version',
                        dest='version',
                        action='version',
                        help=argparse.SUPPRESS,
                        version='{} version {}'.format(parser.prog,
                                                       __version__))

    args = parser.parse_args()

    if not wad.is_wadfile(args.file):
        print('{0}: cannot find or open {1}'.format(parser.prog, args.file),
              file=sys.stderr)
        sys.exit(1)

    if args.list:
        with wad.WadFile(args.file) as wad_file:
            info_list = sorted(wad_file.infolist(), key=lambda i: i.filename)

            lump_types = {
                0: 'NONE',
                1: 'LABEL',
                64: 'LUMP',
                65: 'QTEX',
                66: 'QPIC',
                67: 'SOUND',
                68: 'MIPTEX'
            }

            def lump_type(num):
                if num in lump_types:
                    return lump_types[num]
Ejemplo n.º 9
0
    if args.dest == os.getcwd():
        wad_path = os.path.dirname(file)

        if len(args.list) == 1:
            wad_name = os.path.basename(file).split('.')[0] + '.wad'
        else:
            wad_name = 'out.wad'

        args.dest = os.path.join(wad_path, wad_name)

    dir = os.path.dirname(args.dest) or '.'
    if not os.path.exists(dir):
        os.makedirs(dir)

    with wad.WadFile(args.dest, mode='w') as wad_file:
        if not args.quiet:
            print('Archive: %s' % os.path.basename(args.dest))

        for miptex in miptextures:
            if not miptex:
                continue

            buff = io.BytesIO()
            bsp_file.Miptexture.write(buff, miptex)
            buff.seek(0)

            info = wad.WadInfo(miptex.name)
            info.file_size = 40 + len(miptex.pixels)
            info.disk_size = info.file_size
            info.compression = wad.CMP_NONE
Ejemplo n.º 10
0
                        version='{} version {}'.format(parser.prog, __version__))

    args = parser.parse_args()

    if not args.list:
        parser.error('the following arguments are required: list')

    dir = os.path.dirname(args.file) or '.'
    if not os.path.exists(dir):
        os.makedirs(dir)

    filemode = 'a'
    if not os.path.isfile(args.file):
        filemode = 'w'

    with wad.WadFile(args.file, filemode) as wad_file:
        if not args.quiet:
            print('Archive: %s' % os.path.basename(args.file))

        # Flatten out palette
        palette = []
        for p in bsp.default_palette:
            palette += p

        # Create palette image for Image.quantize()
        palette_image = Image.frombytes('P', (16, 16), bytes(palette))
        palette_image.putpalette(palette)

        # Process input files
        for file in args.list:
            if args.type == 'LUMP':