117
117
0x62 , 0x61 , 0x72 , 0x00 , # Message data
118
118
]))
119
119
120
+
121
+ GNU_MO_DATA_BIG_ENDIAN = base64 .b64encode (bytes ([
122
+ 0x95 , 0x04 , 0x12 , 0xDE , # Magic
123
+ 0x00 , 0x00 , 0x00 , 0x00 , # Version
124
+ 0x00 , 0x00 , 0x00 , 0x01 , # Message count
125
+ 0x00 , 0x00 , 0x00 , 0x1C , # Message offset
126
+ 0x00 , 0x00 , 0x00 , 0x24 , # Translation offset
127
+ 0x00 , 0x00 , 0x00 , 0x00 , # Hash table size
128
+ 0x00 , 0x00 , 0x00 , 0x2C , # Hash table offset
129
+ 0x00 , 0x00 , 0x00 , 0x03 , # 1st message length
130
+ 0x00 , 0x00 , 0x00 , 0x2C , # 1st message offset
131
+ 0x00 , 0x00 , 0x00 , 0x03 , # 1st trans length
132
+ 0x00 , 0x00 , 0x00 , 0x30 , # 1st trans offset
133
+ 0x66 , 0x6F , 0x6F , 0x00 , # Message data
134
+ 0x62 , 0x61 , 0x72 , 0x00 , # Message data
135
+ ]))
136
+
120
137
UMO_DATA = b'''\
121
138
3hIElQAAAAADAAAAHAAAADQAAAAAAAAAAAAAAAAAAABMAAAABAAAAE0AAAAQAAAAUgAAAA8BAABj
122
139
AAAABAAAAHMBAAAWAAAAeAEAAABhYsOeAG15Y29udGV4dMOeBGFiw54AUHJvamVjdC1JZC1WZXJz
144
161
MOFILE_BAD_MAJOR_VERSION = os .path .join (LOCALEDIR , 'gettext_bad_major_version.mo' )
145
162
MOFILE_BAD_MINOR_VERSION = os .path .join (LOCALEDIR , 'gettext_bad_minor_version.mo' )
146
163
MOFILE_CORRUPT = os .path .join (LOCALEDIR , 'gettext_corrupt.mo' )
164
+ MOFILE_BIG_ENDIAN = os .path .join (LOCALEDIR , 'gettext_big_endian.mo' )
147
165
UMOFILE = os .path .join (LOCALEDIR , 'ugettext.mo' )
148
166
MMOFILE = os .path .join (LOCALEDIR , 'metadata.mo' )
149
167
@@ -170,6 +188,8 @@ def setUpClass(cls):
170
188
fp .write (base64 .decodebytes (GNU_MO_DATA_BAD_MINOR_VERSION ))
171
189
with open (MOFILE_CORRUPT , 'wb' ) as fp :
172
190
fp .write (base64 .decodebytes (GNU_MO_DATA_CORRUPT ))
191
+ with open (MOFILE_BIG_ENDIAN , 'wb' ) as fp :
192
+ fp .write (base64 .decodebytes (GNU_MO_DATA_BIG_ENDIAN ))
173
193
with open (UMOFILE , 'wb' ) as fp :
174
194
fp .write (base64 .decodebytes (UMO_DATA ))
175
195
with open (MMOFILE , 'wb' ) as fp :
@@ -319,6 +339,12 @@ def test_corrupt_file(self):
319
339
self .assertEqual (exception .strerror , "File is corrupt" )
320
340
self .assertEqual (exception .filename , MOFILE_CORRUPT )
321
341
342
+ def test_big_endian_file (self ):
343
+ with open (MOFILE_BIG_ENDIAN , 'rb' ) as fp :
344
+ t = gettext .GNUTranslations (fp )
345
+
346
+ self .assertEqual (t .gettext ('foo' ), 'bar' )
347
+
322
348
def test_some_translations (self ):
323
349
eq = self .assertEqual
324
350
# test some translations
0 commit comments