#!/usr/bin/env python
# -*- coding: utf-8 -*-
from translate.storage import factory
from translate.storage.directory import Directory
from translate.misc import wStringIO
from gzip import GzipFile
from bz2 import BZ2File
import os
def classname(filename):
"""returns the classname to ease testing"""
classinstance = factory.getclass(filename)
return str(classinstance.__name__).lower()
def givefile(filename, content):
"""returns a file dummy object with the given content"""
file = wStringIO.StringIO(content)
file.name = filename
return file
class BaseTestFactory:
def setup_method(self, method):
"""sets up a test directory"""
self.testdir = "%s_testdir" % (self.__class__.__name__)
self.cleardir(self.testdir)
os.mkdir(self.testdir)
def teardown_method(self, method):
"""removes the attributes set up by setup_method"""
self.cleardir(self.testdir)
def cleardir(self, dirname):
"""removes the given directory"""
if os.path.exists(dirname):
for dirpath, subdirs, filenames in os.walk(dirname, topdown=False):
for name in filenames:
os.remove(os.path.join(dirpath, name))
for name in subdirs:
os.rmdir(os.path.join(dirpath, name))
if os.path.exists(dirname): os.rmdir(dirname)
assert not os.path.exists(dirname)
cleardir = classmethod(cleardir)
def test_getclass(self):
assert classname("file.po") == "pofile"
assert classname("file.pot") == "pofile"
assert classname("file.dtd.po") == "pofile"
assert classname("file.tmx") == "tmxfile"
assert classname("file.af.tmx") == "tmxfile"
assert classname("file.tbx") == "tbxfile"
assert classname("file.po.xliff") == "xlifffile"
assert not classname("file.po") == "tmxfile"
assert not classname("file.po") == "xlifffile"
assert classname("file.po.gz") == "pofile"
assert classname("file.pot.gz") == "pofile"
assert classname("file.dtd.po.gz") == "pofile"
assert classname("file.tmx.gz") == "tmxfile"
assert classname("file.af.tmx.gz") == "tmxfile"
assert classname("file.tbx.gz") == "tbxfile"
assert classname("file.po.xliff.gz") == "xlifffile"
assert not classname("file.po.gz") == "tmxfile"
assert not classname("file.po.gz") == "xlifffile"
assert classname("file.po.bz2") == "pofile"
assert classname("file.pot.bz2") == "pofile"
assert classname("file.dtd.po.bz2") == "pofile"
assert classname("file.tmx.bz2") == "tmxfile"
assert classname("file.af.tmx.bz2") == "tmxfile"
assert classname("file.tbx.bz2") == "tbxfile"
assert classname("file.po.xliff.bz2") == "xlifffile"
assert not classname("file.po.bz2") == "tmxfile"
assert not classname("file.po.bz2") == "xlifffile"
def test_getobject(self):
"""Tests that we get a valid object."""
fileobj = givefile(self.filename, self.file_content)
store = factory.getobject(fileobj)
assert isinstance(store, self.expected_instance)
def test_get_noname_object(self):
"""Tests that we get a valid object from a file object without a name."""
fileobj = wStringIO.StringIO(self.file_content)
assert not hasattr(fileobj, 'name')
store = factory.getobject(fileobj)
assert isinstance(store, self.expected_instance)
def test_gzfile(self):
"""Test that we can open a gzip file correctly."""
filename = os.path.join(self.testdir, self.filename + '.gz')
gzfile = GzipFile(filename, mode="wb")
gzfile.write(self.file_content)
gzfile.close()
store = factory.getobject(filename)
assert isinstance(store, self.expected_instance)
def test_bz2file(self):
"""Test that we can open a gzip file correctly."""
filename = os.path.join(self.testdir, self.filename + '.bz2')
bz2file = BZ2File(filename, mode="wb")
bz2file.write(self.file_content)
bz2file.close()
store = factory.getobject(filename)
assert isinstance(store, self.expected_instance)
def test_directory(self):
"""Test that a directory is correctly detected."""
object = factory.getobject(self.testdir)
assert isinstance(object, Directory)
class TestPOFactory(BaseTestFactory):
expected_instance = factory.po.pofile
filename = 'dummy.po'
file_content = '''#: test.c\nmsgid "test"\nmsgstr "rest"\n'''
class TestXliffFactory(BaseTestFactory):
expected_instance = factory.xliff.xlifffile
filename = 'dummy.xliff'
file_content = '''
test
rest
'''
class TestPOXliffFactory(BaseTestFactory):
expected_instance = factory.poxliff.PoXliffFile
filename = 'dummy.xliff'
file_content = '''
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
'''