def test_attributes_no_domain_without_domain_filter(): global source source = b'''<html xmlns:i18n="http://xml.zope.org/namespaces/i18n"> <dummy i18n:attributes="title" title="test title"/> </html>''' messages = list(extract_xml('filename', _options())) assert len(messages) == 1
def test_curly_brace_in_python_attribute_expression(): global source source = b'''\ <html> <a href="${request.route_url('set_locale', _query={'locale': 'de'})}"></a> </html> ''' list(extract_xml('filename', _options()))
def test_translate_entities_in_python_expression(): global source source = b'''\ <html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <div class="${' disabled' if 1 < 2 else None}"/> </html> ''' list(extract_xml('filename', _options()))
def test_curly_brace_related_syntax_error(): global source source = b'''\ <html> <a href="${request.route_url('set_locale', _}"></a> </html> ''' with pytest.raises(SystemExit): list(extract_xml('filename', _options()))
def test_translate_call_in_python_expression_in_attribute(): global source source = b'''\ <html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <dummy title="${_(u'foo')}"></dummy> </html> ''' messages = list(extract_xml('filename', _options())) assert messages[0].msgid == u'foo'
def test_ignore_dynamic_message(): global source source = b'''\ <html xmlns="http://www.w3.org/1999/xhtml" xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <p i18n:translate="">${'dummy'}</p> </html> ''' assert list(extract_xml('filename', _options())) == []
def test_html_entities(): global source source = b'''\ <html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <button i18n:translate="">Lock & load </button> </html> ''' messages = list(extract_xml('filename', _options())) assert messages[0].msgid == u'Lock & load '
def test_attributes_multiple_attributes(): global source source = u'''<html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <dummy i18n:attributes="title ; alt" title="tést title" alt="test ålt"/> </html>'''.encode('utf-8') messages = list(extract_xml('filename', _options())) assert len(messages) == 2 assert [m.msgid for m in messages] == [u'tést title', u'test ålt']
def test_translate_structure_as_keyword(): global source source = b'''\ <html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <div tal:content="structure 123"></div> </html> ''' messages = list(extract_xml('filename', _options())) assert len(messages) == 0
def test_translate_minimal(): global source source = u'''\ <html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <dummy i18n:translate="">Dummy téxt</dummy> </html>'''.encode('utf-8') messages = list(extract_xml('filename', _options())) assert len(messages) == 1 assert messages[0].msgid == u'Dummy téxt'
def test_translate_repeat_expression(): global source source = b'''\ <html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <div tal:repeat="(key, value) dict(a=1).iteritems()"></div> </html> ''' messages = list(extract_xml('filename', _options())) assert len(messages) == 0
def test_attributes_plain(): global source source = u'''<html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <dummy i18n:attributes="title" title="tést title"/> </html> '''.encode('utf-8') messages = list(extract_xml('filename', _options())) assert len(messages) == 1 assert messages[0].msgid == u'tést title'
def test_ignore_structure_in_replace(): global source source = b'''\ <html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <dummy tal:replace="structure _('foo')">Dummy</dummy> </html> ''' messages = list(extract_xml('filename', _options())) assert messages[0].msgid == u'foo'
def test_multiple_expressions_with_translate_calls(): global source source = b'''\ <html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <dummy title="${_(u'foo')} ${_(u'bar')}"></dummy> </html> ''' messages = list(extract_xml('filename', _options())) assert messages[0].msgid == u'foo' assert messages[1].msgid == u'bar'
def test_attributes_explicit_MessageId(): global source source = u'''<html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <dummy i18n:attributes="title msg_title" title="test tïtle"/> </html> '''.encode('utf-8') messages = list(extract_xml('filename', _options())) assert len(messages) == 1 assert messages[0].msgid == 'msg_title' assert messages[0].comment == u'Default: test tïtle'
def test_translate_multiple_defines(): global source source = b'''\ <html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <tal:analytics define="isAnon _('one'); account _('two')"> </tal:analytics> </html> ''' messages = list(extract_xml('filename', _options())) assert messages[0].msgid == u'one' assert messages[1].msgid == u'two'
def test_strip_trailing_and_leading_whitespace(): global source source = b'''\ <html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <dummy i18n:translate=""> Dummy text </dummy> </html> ''' messages = list(extract_xml('filename', _options())) assert messages[0].msgid == u'Dummy text'
def test_translate_python_expressions(): global source source = b'''\ <html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <div tal:content="_(u'Foo')|_(u'Bar')"></div> <div tal:replace="python:_(u'Fuz')|python:_(u'Baz')"></div> </html> ''' messages = list(extract_xml('filename', _options())) assert len(messages) == 4 assert {m.msgid for m in messages} == {u'Foo', u'Bar', u'Fuz', u'Baz'}
def test_ignore_undeclared_namespace(): global source source = b'''\ <html xmlns="http://www.w3.org/1999/xhtml" xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <tal:block/> <p i18n:translate="">Test</p> </html> ''' messages = list(extract_xml('filename', _options())) assert messages[0].msgid == u'Test'
def test_translate_ignore_other_expression_engine(): global source source = b'''\ <html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <tal:analytics define="layout load:layout.pt; account _('two')"> </tal:analytics> </html> ''' messages = list(extract_xml('filename', _options())) assert len(messages) == 1 assert messages[0].msgid == u'two'
def test_translate_named_subelement(): global source source = u'''\ <html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <dummy i18n:translate="msgid_dummy">Dummy <strong i18n:name="text">téxt</strong> demø</dummy> </html> '''.encode('utf-8') messages = list(extract_xml('filename', _options())) assert len(messages) == 1 assert messages[0].msgid == u'msgid_dummy' assert messages[0].comment == u'Default: Dummy ${text} demø'
def test_translate_explicit_python_expression_engine(): global source source = b'''\ <html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <tal:analytics define="layout python:_('one'); account _('two')"> </tal:analytics> </html> ''' messages = list(extract_xml('filename', _options())) assert len(messages) == 2 assert messages[0].msgid == u'one' assert messages[1].msgid == u'two'
def test_translate_prefixed_expressions(): global source source = b'''\ <html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="lingua"> <div tal:content="string:Foobar"></div> <div tal:content="structure:123"></div> <div tal:content="python:2 + 2"></div> ${string:Foobar} ${structure:123} </html> ''' messages = list(extract_xml('filename', _options())) assert len(messages) == 0
def test_custom_i18n_namespace(): global source source = b'''<html i18n:domain="other"> <dummy i18n:translate="">Foo</dummy> <other xmlns:i="http://xml.zope.org/namespaces/i18n" i:domain="lingua"> <dummy i:translate="">Foo</dummy> </other> <dummy i18n:translate="">Foo</dummy> <dummy i18n:translate="">Foo</dummy> </html> ''' messages = list(extract_xml('filename', _options())) assert len(messages) == 4 assert [m.msgid for m in messages] == [u'Foo'] * 4
def extract(self, snippet): from lingua.extractors.xml import extract_xml from StringIO import StringIO snippet = StringIO(snippet) return list(extract_xml(snippet, None, None, None))
def test_abort_on_syntax_error(): global source source = b'''\xff\xff\xff''' with pytest.raises(SystemExit): list(extract_xml('filename', _options()))
def test_empty_xml(): global source source = b'''<html/>''' assert list(extract_xml('filename', _options())) == []