blob: 87ddcde30135040dc58fddc7c32782713f48fb16 [file] [log] [blame]
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
'''Tests for the DTD parser.
'''
import unittest
import re
from compare_locales.parser import getParser
from compare_locales.tests import ParserTestMixin
class TestDTD(ParserTestMixin, unittest.TestCase):
'''Tests for the DTD Parser.'''
filename = 'foo.dtd'
def test_one_entity(self):
self._test('''<!ENTITY foo.label "stuff">''',
(('foo.label', 'stuff'),))
quoteContent = '''<!ENTITY good.one "one">
<!ENTITY bad.one "bad " quote">
<!ENTITY good.two "two">
<!ENTITY bad.two "bad "quoted" word">
<!ENTITY good.three "three">
<!ENTITY good.four "good ' quote">
<!ENTITY good.five "good 'quoted' word">
'''
quoteRef = (
('good.one', 'one'),
('_junk_\\d_25-56$', '<!ENTITY bad.one "bad " quote">'),
('good.two', 'two'),
('_junk_\\d_82-119$', '<!ENTITY bad.two "bad "quoted" word">'),
('good.three', 'three'),
('good.four', 'good \' quote'),
('good.five', 'good \'quoted\' word'),)
def test_quotes(self):
self._test(self.quoteContent, self.quoteRef)
def test_apos(self):
qr = re.compile('[\'"]', re.M)
def quot2apos(s):
return qr.sub(lambda m: m.group(0) == '"' and "'" or '"', s)
self._test(quot2apos(self.quoteContent),
map(lambda t: (t[0], quot2apos(t[1])), self.quoteRef))
def test_parsed_ref(self):
self._test('''<!ENTITY % fooDTD SYSTEM "chrome://brand.dtd">
%fooDTD;
''',
(('fooDTD', '"chrome://brand.dtd"'),))
def test_trailing_comment(self):
self._test('''<!ENTITY first "string">
<!ENTITY second "string">
<!--
<!ENTITY commented "out">
-->
''',
(('first', 'string'), ('second', 'string')))
def test_license_header(self):
p = getParser('foo.dtd')
p.readContents(self.resource('triple-license.dtd'))
for e in p:
self.assertEqual(e.key, 'foo')
self.assertEqual(e.val, 'value')
self.assert_('MPL' in p.header)
p.readContents('''\
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this file,
- You can obtain one at http://mozilla.org/MPL/2.0/. -->
<!ENTITY foo "value">
''')
for e in p:
self.assertEqual(e.key, 'foo')
self.assertEqual(e.val, 'value')
self.assert_('MPL' in p.header)
if __name__ == '__main__':
unittest.main()