| 
									
										
										
										
											2015-04-16 12:15:09 -04:00
										 |  |  | """Tests to cover the Tools/i18n package""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import os | 
					
						
							|  |  |  | import unittest | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-06 07:01:52 +03:00
										 |  |  | from test.support.script_helper import assert_python_ok | 
					
						
							| 
									
										
										
										
											2015-04-16 12:15:09 -04:00
										 |  |  | from test.test_tools import toolsdir | 
					
						
							|  |  |  | from test.support import temp_cwd | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Test_pygettext(unittest.TestCase): | 
					
						
							|  |  |  |     """Tests for the pygettext.py tool""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     script = os.path.join(toolsdir,'i18n', 'pygettext.py') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def get_header(self, data): | 
					
						
							|  |  |  |         """ utility: return the header of a .po file as a dictionary """ | 
					
						
							|  |  |  |         headers = {} | 
					
						
							|  |  |  |         for line in data.split('\n'): | 
					
						
							|  |  |  |             if not line or line.startswith(('#', 'msgid','msgstr')): | 
					
						
							|  |  |  |                 continue | 
					
						
							|  |  |  |             line = line.strip('"') | 
					
						
							|  |  |  |             key, val = line.split(':',1) | 
					
						
							|  |  |  |             headers[key] = val.strip() | 
					
						
							|  |  |  |         return headers | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_header(self): | 
					
						
							|  |  |  |         """Make sure the required fields are in the header, according to:
 | 
					
						
							|  |  |  |            http://www.gnu.org/software/gettext/manual/gettext.html#Header-Entry | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         with temp_cwd(None) as cwd: | 
					
						
							|  |  |  |             assert_python_ok(self.script) | 
					
						
							|  |  |  |             with open('messages.pot') as fp: | 
					
						
							|  |  |  |                 data = fp.read() | 
					
						
							|  |  |  |             header = self.get_header(data) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             self.assertIn("Project-Id-Version", header) | 
					
						
							|  |  |  |             self.assertIn("POT-Creation-Date", header) | 
					
						
							|  |  |  |             self.assertIn("PO-Revision-Date", header) | 
					
						
							|  |  |  |             self.assertIn("Last-Translator", header) | 
					
						
							|  |  |  |             self.assertIn("Language-Team", header) | 
					
						
							|  |  |  |             self.assertIn("MIME-Version", header) | 
					
						
							|  |  |  |             self.assertIn("Content-Type", header) | 
					
						
							|  |  |  |             self.assertIn("Content-Transfer-Encoding", header) | 
					
						
							|  |  |  |             self.assertIn("Generated-By", header) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # not clear if these should be required in POT (template) files | 
					
						
							|  |  |  |             #self.assertIn("Report-Msgid-Bugs-To", header) | 
					
						
							|  |  |  |             #self.assertIn("Language", header) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             #"Plural-Forms" is optional | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_POT_Creation_Date(self): | 
					
						
							|  |  |  |         """ Match the date format from xgettext for POT-Creation-Date """ | 
					
						
							|  |  |  |         from datetime import datetime | 
					
						
							|  |  |  |         with temp_cwd(None) as cwd: | 
					
						
							|  |  |  |             assert_python_ok(self.script) | 
					
						
							|  |  |  |             with open('messages.pot') as fp: | 
					
						
							|  |  |  |                 data = fp.read() | 
					
						
							|  |  |  |             header = self.get_header(data) | 
					
						
							|  |  |  |             creationDate = header['POT-Creation-Date'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # peel off the escaped newline at the end of string | 
					
						
							|  |  |  |             if creationDate.endswith('\\n'): | 
					
						
							|  |  |  |                 creationDate = creationDate[:-len('\\n')] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # This will raise if the date format does not exactly match. | 
					
						
							|  |  |  |             datetime.strptime(creationDate, '%Y-%m-%d %H:%M%z') |