@@ -540,32 +540,62 @@ def handle_error(self):
540540
541541
542542class HandlerTests (TestCase ):
543-
544- def checkEnvironAttrs (self , handler ):
545- env = handler .environ
546- for attr in [
547- 'version' ,'multithread' ,'multiprocess' ,'run_once' ,'file_wrapper'
548- ]:
549- if attr == 'file_wrapper' and handler .wsgi_file_wrapper is None :
550- continue
551- self .assertEqual (getattr (handler ,'wsgi_' + attr ),env ['wsgi.' + attr ])
552-
553- def checkOSEnviron (self ,handler ):
554- empty = {}; setup_testing_defaults (empty )
555- env = handler .environ
556- from os import environ
557- for k ,v in environ .items ():
558- if k not in empty :
559- self .assertEqual (env [k ],v )
560- for k ,v in empty .items ():
561- self .assertIn (k , env )
543+ # testEnviron() can produce long error message
544+ maxDiff = 80 * 50
562545
563546 def testEnviron (self ):
564- h = TestHandler (X = "Y" )
565- h .setup_environ ()
566- self .checkEnvironAttrs (h )
567- self .checkOSEnviron (h )
568- self .assertEqual (h .environ ["X" ],"Y" )
547+ os_environ = {
548+ # very basic environment
549+ 'HOME' : '/my/home' ,
550+ 'PATH' : '/my/path' ,
551+ 'LANG' : 'fr_FR.UTF-8' ,
552+
553+ # set some WSGI variables
554+ 'SCRIPT_NAME' : 'test_script_name' ,
555+ 'SERVER_NAME' : 'test_server_name' ,
556+ }
557+
558+ with support .swap_attr (TestHandler , 'os_environ' , os_environ ):
559+ # override X and HOME variables
560+ handler = TestHandler (X = "Y" , HOME = "/override/home" )
561+ handler .setup_environ ()
562+
563+ # Check that wsgi_xxx attributes are copied to wsgi.xxx variables
564+ # of handler.environ
565+ for attr in ('version' , 'multithread' , 'multiprocess' , 'run_once' ,
566+ 'file_wrapper' ):
567+ self .assertEqual (getattr (handler , 'wsgi_' + attr ),
568+ handler .environ ['wsgi.' + attr ])
569+
570+ # Test handler.environ as a dict
571+ expected = {}
572+ setup_testing_defaults (expected )
573+ # Handler inherits os_environ variables which are not overriden
574+ # by SimpleHandler.add_cgi_vars() (SimpleHandler.base_env)
575+ for key , value in os_environ .items ():
576+ if key not in expected :
577+ expected [key ] = value
578+ expected .update ({
579+ # X doesn't exist in os_environ
580+ "X" : "Y" ,
581+ # HOME is overriden by TestHandler
582+ 'HOME' : "/override/home" ,
583+
584+ # overriden by setup_testing_defaults()
585+ "SCRIPT_NAME" : "" ,
586+ "SERVER_NAME" : "127.0.0.1" ,
587+
588+ # set by BaseHandler.setup_environ()
589+ 'wsgi.input' : handler .get_stdin (),
590+ 'wsgi.errors' : handler .get_stderr (),
591+ 'wsgi.version' : (1 , 0 ),
592+ 'wsgi.run_once' : False ,
593+ 'wsgi.url_scheme' : 'http' ,
594+ 'wsgi.multithread' : True ,
595+ 'wsgi.multiprocess' : True ,
596+ 'wsgi.file_wrapper' : util .FileWrapper ,
597+ })
598+ self .assertDictEqual (handler .environ , expected )
569599
570600 def testCGIEnviron (self ):
571601 h = BaseCGIHandler (None ,None ,None ,{})
0 commit comments