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