@@ -718,6 +718,76 @@ def test_expand_lang(self):
718
718
self .assertEqual (gettext ._expand_lang (locale ), expanded )
719
719
720
720
721
+ class FindTestCase (unittest .TestCase ):
722
+
723
+ def setUp (self ):
724
+ self .env = self .enterContext (os_helper .EnvironmentVarGuard ())
725
+ self .tempdir = self .enterContext (os_helper .temp_cwd ())
726
+
727
+ for key in ('LANGUAGE' , 'LC_ALL' , 'LC_MESSAGES' , 'LANG' ):
728
+ self .env .unset (key )
729
+
730
+ def create_mo_file (self , lang ):
731
+ locale_dir = os .path .join (self .tempdir , "locale" )
732
+ mofile_dir = os .path .join (locale_dir , lang , "LC_MESSAGES" )
733
+ os .makedirs (mofile_dir )
734
+ mo_file = os .path .join (mofile_dir , "mofile.mo" )
735
+ with open (mo_file , "wb" ) as f :
736
+ f .write (GNU_MO_DATA )
737
+ return mo_file
738
+
739
+ def test_find_with_env_vars (self ):
740
+ # test that find correctly finds the environment variables
741
+ # when languages are not supplied
742
+ mo_file = self .create_mo_file ("ga_IE" )
743
+ for var in ('LANGUAGE' , 'LC_ALL' , 'LC_MESSAGES' , 'LANG' ):
744
+ self .env .set (var , 'ga_IE' )
745
+ result = gettext .find ("mofile" ,
746
+ localedir = os .path .join (self .tempdir , "locale" ))
747
+ self .assertEqual (result , mo_file )
748
+ self .env .unset (var )
749
+
750
+ def test_find_with_languages (self ):
751
+ # test that passed languages are used
752
+ self .env .set ('LANGUAGE' , 'pt_BR' )
753
+ mo_file = self .create_mo_file ("ga_IE" )
754
+
755
+ result = gettext .find ("mofile" ,
756
+ localedir = os .path .join (self .tempdir , "locale" ),
757
+ languages = ['ga_IE' ])
758
+ self .assertEqual (result , mo_file )
759
+
760
+ @unittest .mock .patch ('gettext._expand_lang' )
761
+ def test_find_with_no_lang (self , patch_expand_lang ):
762
+ # no language can be found
763
+ gettext .find ('foo' )
764
+ patch_expand_lang .assert_called_with ('C' )
765
+
766
+ @unittest .mock .patch ('gettext._expand_lang' )
767
+ def test_find_with_c (self , patch_expand_lang ):
768
+ # 'C' is already in languages
769
+ self .env .set ('LANGUAGE' , 'C' )
770
+ gettext .find ('foo' )
771
+ patch_expand_lang .assert_called_with ('C' )
772
+
773
+ def test_find_all (self ):
774
+ # test that all are returned when all is set
775
+ paths = []
776
+ for lang in ["ga_IE" , "es_ES" ]:
777
+ paths .append (self .create_mo_file (lang ))
778
+ result = gettext .find ('mofile' ,
779
+ localedir = os .path .join (self .tempdir , "locale" ),
780
+ languages = ["ga_IE" , "es_ES" ], all = True )
781
+ self .assertEqual (sorted (result ), sorted (paths ))
782
+
783
+ def test_find_deduplication (self ):
784
+ # test that find removes duplicate languages
785
+ mo_file = [self .create_mo_file ('ga_IE' )]
786
+ result = gettext .find ("mofile" , localedir = os .path .join (self .tempdir , "locale" ),
787
+ languages = ['ga_IE' , 'ga_IE' ], all = True )
788
+ self .assertEqual (result , mo_file )
789
+
790
+
721
791
class MiscTestCase (unittest .TestCase ):
722
792
def test__all__ (self ):
723
793
support .check__all__ (self , gettext ,
0 commit comments