@@ -766,6 +766,76 @@ def test_expand_lang(self):
766
766
self .assertEqual (gettext ._expand_lang (locale ),expanded )
767
767
768
768
769
+ class FindTestCase (unittest .TestCase ):
770
+
771
+ def setUp (self ):
772
+ self .env = self .enterContext (os_helper .EnvironmentVarGuard ())
773
+ self .tempdir = self .enterContext (os_helper .temp_cwd ())
774
+
775
+ for key in ('LANGUAGE' ,'LC_ALL' ,'LC_MESSAGES' ,'LANG' ):
776
+ self .env .unset (key )
777
+
778
+ def create_mo_file (self ,lang ):
779
+ locale_dir = os .path .join (self .tempdir ,"locale" )
780
+ mofile_dir = os .path .join (locale_dir ,lang ,"LC_MESSAGES" )
781
+ os .makedirs (mofile_dir )
782
+ mo_file = os .path .join (mofile_dir ,"mofile.mo" )
783
+ with open (mo_file ,"wb" )as f :
784
+ f .write (GNU_MO_DATA )
785
+ return mo_file
786
+
787
+ def test_find_with_env_vars (self ):
788
+ # test that find correctly finds the environment variables
789
+ # when languages are not supplied
790
+ mo_file = self .create_mo_file ("ga_IE" )
791
+ for var in ('LANGUAGE' ,'LC_ALL' ,'LC_MESSAGES' ,'LANG' ):
792
+ self .env .set (var ,'ga_IE' )
793
+ result = gettext .find ("mofile" ,
794
+ localedir = os .path .join (self .tempdir ,"locale" ))
795
+ self .assertEqual (result ,mo_file )
796
+ self .env .unset (var )
797
+
798
+ def test_find_with_languages (self ):
799
+ # test that passed languages are used
800
+ self .env .set ('LANGUAGE' ,'pt_BR' )
801
+ mo_file = self .create_mo_file ("ga_IE" )
802
+
803
+ result = gettext .find ("mofile" ,
804
+ localedir = os .path .join (self .tempdir ,"locale" ),
805
+ languages = ['ga_IE' ])
806
+ self .assertEqual (result ,mo_file )
807
+
808
+ @unittest .mock .patch ('gettext._expand_lang' )
809
+ def test_find_with_no_lang (self ,patch_expand_lang ):
810
+ # no language can be found
811
+ gettext .find ('foo' )
812
+ patch_expand_lang .assert_called_with ('C' )
813
+
814
+ @unittest .mock .patch ('gettext._expand_lang' )
815
+ def test_find_with_c (self ,patch_expand_lang ):
816
+ # 'C' is already in languages
817
+ self .env .set ('LANGUAGE' ,'C' )
818
+ gettext .find ('foo' )
819
+ patch_expand_lang .assert_called_with ('C' )
820
+
821
+ def test_find_all (self ):
822
+ # test that all are returned when all is set
823
+ paths = []
824
+ for lang in ["ga_IE" ,"es_ES" ]:
825
+ paths .append (self .create_mo_file (lang ))
826
+ result = gettext .find ('mofile' ,
827
+ localedir = os .path .join (self .tempdir ,"locale" ),
828
+ languages = ["ga_IE" ,"es_ES" ],all = True )
829
+ self .assertEqual (sorted (result ),sorted (paths ))
830
+
831
+ def test_find_deduplication (self ):
832
+ # test that find removes duplicate languages
833
+ mo_file = [self .create_mo_file ('ga_IE' )]
834
+ result = gettext .find ("mofile" ,localedir = os .path .join (self .tempdir ,"locale" ),
835
+ languages = ['ga_IE' ,'ga_IE' ],all = True )
836
+ self .assertEqual (result ,mo_file )
837
+
838
+
769
839
class MiscTestCase (unittest .TestCase ):
770
840
def test__all__ (self ):
771
841
support .check__all__ (self ,gettext ,