class TestFileHelper(TestCase): def setUp(self): self.viewer = FileViewer(make_file(1, get_file('dictionary-test.xpi'))) def tearDown(self): self.viewer.cleanup() def test_files_not_extracted(self): eq_(self.viewer.is_extracted(), False) def test_files_extracted(self): self.viewer.extract() eq_(self.viewer.is_extracted(), True) def test_recurse_extract(self): self.viewer.src = get_file('recurse.xpi') self.viewer.extract() eq_(self.viewer.is_extracted(), True) def test_recurse_contents(self): self.viewer.src = get_file('recurse.xpi') self.viewer.extract() files = self.viewer.get_files() nm = ['recurse/recurse.xpi/chrome/test-root.txt', 'recurse/somejar.jar/recurse/recurse.xpi/chrome/test.jar', 'recurse/somejar.jar/recurse/recurse.xpi/chrome/test.jar/test'] for name in nm: eq_(name in files, True, 'File %r not extracted' % name) def test_cleanup(self): self.viewer.extract() self.viewer.cleanup() eq_(self.viewer.is_extracted(), False) def test_truncate(self): truncate = self.viewer.truncate for x, y in (['foo.rdf', 'foo.rdf'], ['somelongfilename.rdf', 'somelongfilenam...rdf'], [u'unicode삮.txt', u'unicode\uc0ae.txt'], [u'unicodesomelong삮.txt', u'unicodesomelong...txt'], ['somelongfilename.somelongextension', 'somelongfilenam...somelonge..'],): eq_(truncate(x), y) def test_get_files_not_extracted(self): assert not self.viewer.get_files() def test_get_files_size(self): self.viewer.extract() files = self.viewer.get_files() eq_(len(files), 14) def test_get_files_directory(self): self.viewer.extract() files = self.viewer.get_files() eq_(files['install.js']['directory'], False) eq_(files['install.js']['binary'], False) eq_(files['__MACOSX']['directory'], True) eq_(files['__MACOSX']['binary'], False) def test_url_file(self): self.viewer.extract() files = self.viewer.get_files() url = reverse('mkt.files.list', args=[self.viewer.file.id, 'file', 'install.js']) assert files['install.js']['url'].endswith(url) def test_get_files_depth(self): self.viewer.extract() files = self.viewer.get_files() eq_(files['dictionaries/license.txt']['depth'], 1) def test_bom(self): dest = os.path.join(settings.TMP_PATH, 'test_bom') open(dest, 'w').write('foo'.encode('utf-16')) self.viewer.select('foo') self.viewer.selected = {'full': dest, 'size': 1} eq_(self.viewer.read_file(), u'foo') os.remove(dest) def test_syntax(self): for filename, syntax in [('foo.rdf', 'xml'), ('foo.xul', 'xml'), ('foo.json', 'js'), ('foo.jsm', 'js'), ('foo.js', 'js'), ('manifest.webapp', 'js'), ('foo.html', 'html'), ('foo.css', 'css'), ('foo.bar', 'plain')]: eq_(self.viewer.get_syntax(filename), syntax) def test_file_order(self): self.viewer.extract() dest = self.viewer.dest open(os.path.join(dest, 'chrome.manifest'), 'w') subdir = os.path.join(dest, 'chrome') os.mkdir(subdir) open(os.path.join(subdir, 'foo'), 'w') cache.clear() files = self.viewer.get_files().keys() rt = files.index(u'chrome') eq_(files[rt:rt + 3], [u'chrome', u'chrome/foo', u'dictionaries']) @patch.object(settings, 'FILE_VIEWER_SIZE_LIMIT', 5) def test_file_size(self): self.viewer.extract() self.viewer.get_files() self.viewer.select('install.js') res = self.viewer.read_file() eq_(res, '') assert self.viewer.selected['msg'].startswith('File size is') @patch.object(settings, 'FILE_VIEWER_SIZE_LIMIT', 5) def test_file_size_unicode(self): with self.activate(locale='he'): self.viewer.extract() self.viewer.get_files() self.viewer.select('install.js') res = self.viewer.read_file() eq_(res, '') assert self.viewer.selected['msg'].startswith('File size is') @patch.object(settings, 'FILE_UNZIP_SIZE_LIMIT', 5) def test_contents_size(self): self.assertRaises(forms.ValidationError, self.viewer.extract) def test_default(self): eq_(self.viewer.get_default(None), 'manifest.webapp') def test_delete_mid_read(self): self.viewer.extract() self.viewer.select('install.js') os.remove(os.path.join(self.viewer.dest, 'install.js')) res = self.viewer.read_file() eq_(res, '') assert self.viewer.selected['msg'].startswith('That file no') @patch('mkt.files.helpers.get_md5') def test_delete_mid_tree(self, get_md5): get_md5.side_effect = IOError('ow') self.viewer.extract() eq_({}, self.viewer.get_files())
class TestFileHelper(amo.tests.TestCase): def setUp(self): self.viewer = FileViewer(make_file(1, get_file('dictionary-test.xpi'))) def tearDown(self): self.viewer.cleanup() def test_files_not_extracted(self): eq_(self.viewer.is_extracted(), False) def test_files_extracted(self): self.viewer.extract() eq_(self.viewer.is_extracted(), True) def test_recurse_extract(self): self.viewer.src = get_file('recurse.xpi') self.viewer.extract() eq_(self.viewer.is_extracted(), True) def test_recurse_contents(self): self.viewer.src = get_file('recurse.xpi') self.viewer.extract() files = self.viewer.get_files() nm = [ 'recurse/recurse.xpi/chrome/test-root.txt', 'recurse/somejar.jar/recurse/recurse.xpi/chrome/test.jar', 'recurse/somejar.jar/recurse/recurse.xpi/chrome/test.jar/test' ] for name in nm: eq_(name in files, True, 'File %r not extracted' % name) def test_cleanup(self): self.viewer.extract() self.viewer.cleanup() eq_(self.viewer.is_extracted(), False) def test_truncate(self): truncate = self.viewer.truncate for x, y in ( ['foo.rdf', 'foo.rdf'], ['somelongfilename.rdf', 'somelongfilenam...rdf'], [u'unicode삮.txt', u'unicode\uc0ae.txt'], [u'unicodesomelong삮.txt', u'unicodesomelong...txt'], [ 'somelongfilename.somelongextension', 'somelongfilenam...somelonge..' ], ): eq_(truncate(x), y) def test_get_files_not_extracted(self): assert not self.viewer.get_files() def test_get_files_size(self): self.viewer.extract() files = self.viewer.get_files() eq_(len(files), 14) def test_get_files_directory(self): self.viewer.extract() files = self.viewer.get_files() eq_(files['install.js']['directory'], False) eq_(files['install.js']['binary'], False) eq_(files['__MACOSX']['directory'], True) eq_(files['__MACOSX']['binary'], False) def test_url_file(self): self.viewer.extract() files = self.viewer.get_files() url = reverse('mkt.files.list', args=[self.viewer.file.id, 'file', 'install.js']) assert files['install.js']['url'].endswith(url) def test_get_files_depth(self): self.viewer.extract() files = self.viewer.get_files() eq_(files['dictionaries/license.txt']['depth'], 1) def test_bom(self): dest = os.path.join(settings.TMP_PATH, 'test_bom') open(dest, 'w').write('foo'.encode('utf-16')) self.viewer.select('foo') self.viewer.selected = {'full': dest, 'size': 1} eq_(self.viewer.read_file(), u'foo') os.remove(dest) def test_syntax(self): for filename, syntax in [('foo.rdf', 'xml'), ('foo.xul', 'xml'), ('foo.json', 'js'), ('foo.jsm', 'js'), ('foo.js', 'js'), ('manifest.webapp', 'js'), ('foo.html', 'html'), ('foo.css', 'css'), ('foo.bar', 'plain')]: eq_(self.viewer.get_syntax(filename), syntax) def test_file_order(self): self.viewer.extract() dest = self.viewer.dest open(os.path.join(dest, 'chrome.manifest'), 'w') subdir = os.path.join(dest, 'chrome') os.mkdir(subdir) open(os.path.join(subdir, 'foo'), 'w') cache.clear() files = self.viewer.get_files().keys() rt = files.index(u'chrome') eq_(files[rt:rt + 3], [u'chrome', u'chrome/foo', u'dictionaries']) @patch.object(settings, 'FILE_VIEWER_SIZE_LIMIT', 5) def test_file_size(self): self.viewer.extract() self.viewer.get_files() self.viewer.select('install.js') res = self.viewer.read_file() eq_(res, '') assert self.viewer.selected['msg'].startswith('File size is') @patch.object(settings, 'FILE_VIEWER_SIZE_LIMIT', 5) def test_file_size_unicode(self): with self.activate(locale='he'): self.viewer.extract() self.viewer.get_files() self.viewer.select('install.js') res = self.viewer.read_file() eq_(res, '') assert self.viewer.selected['msg'].startswith('File size is') @patch.object(settings, 'FILE_UNZIP_SIZE_LIMIT', 5) def test_contents_size(self): self.assertRaises(forms.ValidationError, self.viewer.extract) def test_default(self): eq_(self.viewer.get_default(None), 'manifest.webapp') def test_delete_mid_read(self): self.viewer.extract() self.viewer.select('install.js') os.remove(os.path.join(self.viewer.dest, 'install.js')) res = self.viewer.read_file() eq_(res, '') assert self.viewer.selected['msg'].startswith('That file no') @patch('mkt.files.helpers.get_md5') def test_delete_mid_tree(self, get_md5): get_md5.side_effect = IOError('ow') self.viewer.extract() eq_({}, self.viewer.get_files())
class TestFileHelper(TestCase): def setUp(self): fn = get_file('dictionary-test.xpi') if storage_is_remote(): copy_stored_file(fn, fn, src_storage=local_storage) self.viewer = FileViewer(make_file(1, fn)) def tearDown(self): self.viewer.cleanup() def test_files_not_extracted(self): eq_(self.viewer.is_extracted(), False) def test_files_extracted(self): self.viewer.extract() eq_(self.viewer.is_extracted(), True) def test_cleanup(self): self.viewer.extract() self.viewer.cleanup() eq_(self.viewer.is_extracted(), False) def test_truncate(self): truncate = self.viewer.truncate for x, y in ( ['foo.rdf', 'foo.rdf'], ['somelongfilename.rdf', 'somelongfilenam...rdf'], [u'unicode삮.txt', u'unicode\uc0ae.txt'], [u'unicodesomelong삮.txt', u'unicodesomelong...txt'], [ 'somelongfilename.somelongextension', 'somelongfilenam...somelonge..' ], ): eq_(truncate(x), y) def test_get_files_not_extracted(self): assert not self.viewer.get_files() def test_get_files_size(self): self.viewer.extract() files = self.viewer.get_files() eq_(len(files), 15) def test_get_files_directory(self): self.viewer.extract() files = self.viewer.get_files() eq_(files['install.js']['directory'], False) eq_(files['install.js']['binary'], False) eq_(files['__MACOSX']['directory'], True) eq_(files['__MACOSX']['binary'], False) def test_url_file(self): self.viewer.extract() files = self.viewer.get_files() url = reverse('mkt.files.list', args=[self.viewer.file.id, 'file', 'install.js']) assert files['install.js']['url'].endswith(url) def test_get_files_depth(self): self.viewer.extract() files = self.viewer.get_files() eq_(files['dictionaries/license.txt']['depth'], 1) def test_bom(self): dest = os.path.join(settings.TMP_PATH, 'test_bom') with storage.open(dest, 'w') as f: f.write('foo'.encode('utf-16')) self.viewer.select('foo') self.viewer.selected = {'full': dest, 'size': 1} eq_(self.viewer.read_file(), u'foo') storage.delete(dest) def test_syntax(self): for filename, syntax in [('foo.rdf', 'xml'), ('foo.xul', 'xml'), ('foo.json', 'js'), ('foo.jsm', 'js'), ('foo.js', 'js'), ('manifest.webapp', 'js'), ('foo.html', 'html'), ('foo.css', 'css'), ('foo.bar', 'plain')]: eq_(self.viewer.get_syntax(filename), syntax) def test_file_order(self): self.viewer.extract() dest = self.viewer.dest storage.open(os.path.join(dest, 'manifest.webapp'), 'w').close() subdir = os.path.join(dest, 'chrome') with storage.open(os.path.join(subdir, 'foo'), 'w') as f: f.write('.') if not storage.exists(subdir): # Might be on S3, which doesn't have directories (and # django-storages doesn't support empty files). with storage.open(subdir, 'w') as f: f.write('.') cache.clear() files = self.viewer.get_files().keys() rt = files.index(u'chrome') eq_(files[rt:rt + 3], [u'chrome', u'chrome/foo', u'dictionaries']) @patch.object(settings, 'FILE_VIEWER_SIZE_LIMIT', 5) def test_file_size(self): self.viewer.extract() self.viewer.get_files() self.viewer.select('install.js') res = self.viewer.read_file() eq_(res, '') assert self.viewer.selected['msg'].startswith('File size is') @patch.object(settings, 'FILE_VIEWER_SIZE_LIMIT', 5) def test_file_size_unicode(self): with self.activate(locale='he'): self.viewer.extract() self.viewer.get_files() self.viewer.select('install.js') res = self.viewer.read_file() eq_(res, '') assert self.viewer.selected['msg'].startswith('File size is') @patch.object(settings, 'FILE_UNZIP_SIZE_LIMIT', 5) def test_contents_size(self): self.assertRaises(forms.ValidationError, self.viewer.extract) def test_default(self): eq_(self.viewer.get_default(None), 'manifest.webapp') def test_delete_mid_read(self): self.viewer.extract() self.viewer.select('install.js') storage.delete(os.path.join(self.viewer.dest, 'install.js')) res = self.viewer.read_file() eq_(res, '') assert self.viewer.selected['msg'].startswith('That file no') @patch('mkt.files.helpers.get_md5') def test_delete_mid_tree(self, get_md5): get_md5.side_effect = IOError('ow') self.viewer.extract() eq_({}, self.viewer.get_files())
class TestFileHelper(TestCase): def setUp(self): fn = get_file('dictionary-test.xpi') if storage_is_remote(): copy_stored_file( fn, fn, src_storage=local_storage, dst_storage=private_storage) self.viewer = FileViewer(make_file(1, fn)) def tearDown(self): self.viewer.cleanup() def test_files_not_extracted(self): eq_(self.viewer.is_extracted(), False) def test_files_extracted(self): self.viewer.extract() eq_(self.viewer.is_extracted(), True) def test_cleanup(self): self.viewer.extract() self.viewer.cleanup() eq_(self.viewer.is_extracted(), False) def test_truncate(self): truncate = self.viewer.truncate for x, y in (['foo.rdf', 'foo.rdf'], ['somelongfilename.rdf', 'somelongfilenam...rdf'], [u'unicode삮.txt', u'unicode\uc0ae.txt'], [u'unicodesomelong삮.txt', u'unicodesomelong...txt'], ['somelongfilename.somelongextension', 'somelongfilenam...somelonge..'],): eq_(truncate(x), y) def test_get_files_not_extracted(self): assert not self.viewer.get_files() def test_get_files_size(self): self.viewer.extract() files = self.viewer.get_files() eq_(len(files), 15) def test_get_files_directory(self): self.viewer.extract() files = self.viewer.get_files() eq_(files['install.js']['directory'], False) eq_(files['install.js']['binary'], False) eq_(files['__MACOSX']['directory'], True) eq_(files['__MACOSX']['binary'], False) def test_url_file(self): self.viewer.extract() files = self.viewer.get_files() url = reverse('mkt.files.list', args=[self.viewer.file.id, 'file', 'install.js']) assert files['install.js']['url'].endswith(url) def test_get_files_depth(self): self.viewer.extract() files = self.viewer.get_files() eq_(files['dictionaries/license.txt']['depth'], 1) def test_bom(self): dest = os.path.join(settings.TMP_PATH, 'test_bom') with private_storage.open(dest, 'w') as f: f.write('foo'.encode('utf-16')) self.viewer.select('foo') self.viewer.selected = {'full': dest, 'size': 1} eq_(self.viewer.read_file(), u'foo') private_storage.delete(dest) def test_syntax(self): for filename, syntax in [('foo.rdf', 'xml'), ('foo.xul', 'xml'), ('foo.json', 'js'), ('foo.jsm', 'js'), ('foo.js', 'js'), ('manifest.webapp', 'js'), ('foo.html', 'html'), ('foo.css', 'css'), ('foo.bar', 'plain')]: eq_(self.viewer.get_syntax(filename), syntax) def test_file_order(self): self.viewer.extract() dest = self.viewer.dest private_storage.open(os.path.join(dest, 'manifest.webapp'), 'w').close() subdir = os.path.join(dest, 'chrome') with private_storage.open(os.path.join(subdir, 'foo'), 'w') as f: f.write('.') if not private_storage.exists(subdir): # Might be on S3, which doesn't have directories (and # django-storages doesn't support empty files). with private_storage.open(subdir, 'w') as f: f.write('.') cache.clear() files = self.viewer.get_files().keys() rt = files.index(u'chrome') eq_(files[rt:rt + 3], [u'chrome', u'chrome/foo', u'dictionaries']) @patch.object(settings, 'FILE_VIEWER_SIZE_LIMIT', 5) def test_file_size(self): self.viewer.extract() self.viewer.get_files() self.viewer.select('install.js') res = self.viewer.read_file() eq_(res, '') assert self.viewer.selected['msg'].startswith('File size is') @patch.object(settings, 'FILE_VIEWER_SIZE_LIMIT', 5) def test_file_size_unicode(self): with self.activate(locale='he'): self.viewer.extract() self.viewer.get_files() self.viewer.select('install.js') res = self.viewer.read_file() eq_(res, '') assert self.viewer.selected['msg'].startswith('File size is') @patch.object(settings, 'FILE_UNZIP_SIZE_LIMIT', 5) def test_contents_size(self): self.assertRaises(forms.ValidationError, self.viewer.extract) def test_default(self): eq_(self.viewer.get_default(None), 'manifest.webapp') def test_delete_mid_read(self): self.viewer.extract() self.viewer.select('install.js') private_storage.delete(os.path.join(self.viewer.dest, 'install.js')) res = self.viewer.read_file() eq_(res, '') assert self.viewer.selected['msg'].startswith('That file no') @patch('mkt.files.helpers.get_md5') def test_delete_mid_tree(self, get_md5): get_md5.side_effect = IOError('ow') self.viewer.extract() eq_({}, self.viewer.get_files())