@@ -797,6 +797,62 @@ def test_cache(self):
797797        self .assertEqual (t .__class__ , DummyGNUTranslations )
798798
799799
800+ class  FallbackTranslations (gettext .NullTranslations ):
801+     def  gettext (self , message ):
802+         return  f'gettext: { message }  ' 
803+ 
804+     def  ngettext (self , msgid1 , msgid2 , n ):
805+         return  f'ngettext: { msgid1 }  , { msgid2 }  , { n }  ' 
806+ 
807+     def  pgettext (self , context , message ):
808+         return  f'pgettext: { context }  , { message }  ' 
809+ 
810+     def  npgettext (self , context , msgid1 , msgid2 , n ):
811+         return  f'npgettext: { context }  , { msgid1 }  , { msgid2 }  , { n }  ' 
812+ 
813+ 
814+ class  FallbackTestCase (GettextBaseTest ):
815+     def  test_null_translations_fallback (self ):
816+         t  =  gettext .NullTranslations ()
817+         t .add_fallback (FallbackTranslations ())
818+         self .assertEqual (t .gettext ('foo' ), 'gettext: foo' )
819+         self .assertEqual (t .ngettext ('foo' , 'foos' , 1 ),
820+                          'ngettext: foo, foos, 1' )
821+         self .assertEqual (t .pgettext ('context' , 'foo' ),
822+                          'pgettext: context, foo' )
823+         self .assertEqual (t .npgettext ('context' , 'foo' , 'foos' , 1 ),
824+                          'npgettext: context, foo, foos, 1' )
825+ 
826+     def  test_gnu_translations_fallback (self ):
827+         with  open (MOFILE , 'rb' ) as  fp :
828+             t  =  gettext .GNUTranslations (fp )
829+         t .add_fallback (FallbackTranslations ())
830+         self .assertEqual (t .gettext ('foo' ), 'gettext: foo' )
831+         self .assertEqual (t .ngettext ('foo' , 'foos' , 1 ),
832+                          'ngettext: foo, foos, 1' )
833+         self .assertEqual (t .pgettext ('context' , 'foo' ),
834+                          'pgettext: context, foo' )
835+         self .assertEqual (t .npgettext ('context' , 'foo' , 'foos' , 1 ),
836+                          'npgettext: context, foo, foos, 1' )
837+ 
838+     def  test_nested_fallbacks (self ):
839+         class  NestedFallback (gettext .NullTranslations ):
840+             def  gettext (self , message ):
841+                 if  message  ==  'foo' :
842+                     return  'fallback' 
843+                 return  super ().gettext (message )
844+ 
845+         fallback1  =  NestedFallback ()
846+         fallback2  =  FallbackTranslations ()
847+         t  =  gettext .NullTranslations ()
848+         t .add_fallback (fallback1 )
849+         t .add_fallback (fallback2 )
850+ 
851+         self .assertEqual (fallback1 .gettext ('bar' ), 'gettext: bar' )
852+         self .assertEqual (t .gettext ('foo' ), 'fallback' )
853+         self .assertEqual (t .gettext ('bar' ), 'gettext: bar' )
854+ 
855+ 
800856class  ExpandLangTestCase (unittest .TestCase ):
801857    def  test_expand_lang (self ):
802858        # Test all combinations of territory, charset and 
0 commit comments