def testFileFromPlaceholder(self): mujoco = self._mujoco contents = b'Fake contents' extension = '.whatever' expected_xml = hashlib.sha1(contents).hexdigest() + extension placeholder = attribute.Asset(contents=contents, extension=extension) text_file = mujoco.files.add('text', file=placeholder) self.assertEqual(text_file.file, placeholder) self.assertXMLStringEqual(text_file, 'file', expected_xml) self.assertCanBeCleared(text_file, 'file')
def testFileFromAssetsDict(self): prefix = 'fake_filename' extension = '.whatever' path = 'invalid/path/' + prefix + extension contents = 'Fake contents' assets = {path: contents} mujoco = element.RootElement(assets=assets) text_file = mujoco.files.add('text', file=path) expected_value = attribute.Asset( contents=contents, extension=extension, prefix=prefix) self.assertEqual(text_file.file, expected_value)
def testFileFromPath(self, basepath, value): mujoco = self._mujoco full_path = os.path.join(basepath, value) with open(full_path, 'rb') as f: contents = f.read() _, basename = os.path.split(value) prefix, extension = os.path.splitext(basename) expected_xml = prefix + '-' + hashlib.sha1(contents).hexdigest() + extension mujoco.files.text_path = basepath text_file = mujoco.files.add('text', file=value) expected_value = attribute.Asset( contents=contents, extension=extension, prefix=prefix) self.assertEqual(text_file.file, expected_value) self.assertXMLStringEqual(text_file, 'file', expected_xml) self.assertCanBeCleared(text_file, 'file') self.assertCanBeCleared(mujoco.files, 'text_path')
def testFileNameTrimming(self): original_filename = ( 'THIS_IS_AN_EXTREMELY_LONG_FILENAME_THAT_WOULD_CAUSE_MUJOCO_TO_COMPLAIN' '_THAT_ITS_INTERNAL_LENGTH_LIMIT_IS_EXCEEDED_IF_NOT_TRIMMED_DOWN') extension = '.some_extension' asset = attribute.Asset( contents='', extension=extension, prefix=original_filename) vfs_filename = asset.get_vfs_filename() self.assertLen(vfs_filename, constants.MAX_VFS_FILENAME_LENGTH) vfs = types.MJVFS() mjlib.mj_defaultVFS(vfs) success_code = 0 retval = mjlib.mj_makeEmptyFileVFS( vfs, util.to_binary_string(vfs_filename), 1) self.assertEqual(retval, success_code) mjlib.mj_deleteVFS(vfs)