mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 01:07:15 +03:00
fa1c4e5ebe
Many tests didn't change back from subdirectories at the end of the tests ... and they don't have to. The missing 'cd ..' could always be added when another test case is added to the test file. This change do that tests (99.5%) consistently end up in $TESTDIR where they started, thus making it simpler to extend them or move them around.
83 lines
2.3 KiB
Perl
83 lines
2.3 KiB
Perl
Tests if hgweb can run without touching sys.stdin, as is required
|
|
by the WSGI standard and strictly implemented by mod_wsgi.
|
|
|
|
$ hg init repo
|
|
$ cd repo
|
|
$ echo foo > bar
|
|
$ hg add bar
|
|
$ hg commit -m "test"
|
|
$ cat > request.py <<EOF
|
|
> from mercurial import dispatch
|
|
> from mercurial.hgweb.hgweb_mod import hgweb
|
|
> from mercurial.ui import ui
|
|
> from mercurial import hg
|
|
> from StringIO import StringIO
|
|
> import os, sys
|
|
>
|
|
> class FileLike(object):
|
|
> def __init__(self, real):
|
|
> self.real = real
|
|
> def fileno(self):
|
|
> print >> sys.__stdout__, 'FILENO'
|
|
> return self.real.fileno()
|
|
> def read(self):
|
|
> print >> sys.__stdout__, 'READ'
|
|
> return self.real.read()
|
|
> def readline(self):
|
|
> print >> sys.__stdout__, 'READLINE'
|
|
> return self.real.readline()
|
|
>
|
|
> sys.stdin = FileLike(sys.stdin)
|
|
> errors = StringIO()
|
|
> input = StringIO()
|
|
> output = StringIO()
|
|
>
|
|
> def startrsp(status, headers):
|
|
> print '---- STATUS'
|
|
> print status
|
|
> print '---- HEADERS'
|
|
> print [i for i in headers if i[0] != 'ETag']
|
|
> print '---- DATA'
|
|
> return output.write
|
|
>
|
|
> env = {
|
|
> 'wsgi.version': (1, 0),
|
|
> 'wsgi.url_scheme': 'http',
|
|
> 'wsgi.errors': errors,
|
|
> 'wsgi.input': input,
|
|
> 'wsgi.multithread': False,
|
|
> 'wsgi.multiprocess': False,
|
|
> 'wsgi.run_once': False,
|
|
> 'REQUEST_METHOD': 'GET',
|
|
> 'SCRIPT_NAME': '',
|
|
> 'PATH_INFO': '',
|
|
> 'QUERY_STRING': '',
|
|
> 'SERVER_NAME': '127.0.0.1',
|
|
> 'SERVER_PORT': os.environ['HGPORT'],
|
|
> 'SERVER_PROTOCOL': 'HTTP/1.0'
|
|
> }
|
|
>
|
|
> i = hgweb('.')
|
|
> i(env, startrsp)
|
|
> print '---- ERRORS'
|
|
> print errors.getvalue()
|
|
> print '---- OS.ENVIRON wsgi variables'
|
|
> print sorted([x for x in os.environ if x.startswith('wsgi')])
|
|
> print '---- request.ENVIRON wsgi variables'
|
|
> print sorted([x for x in i.repo.ui.environ if x.startswith('wsgi')])
|
|
> EOF
|
|
$ python request.py
|
|
---- STATUS
|
|
200 Script output follows
|
|
---- HEADERS
|
|
[('Content-Type', 'text/html; charset=ascii')]
|
|
---- DATA
|
|
---- ERRORS
|
|
|
|
---- OS.ENVIRON wsgi variables
|
|
[]
|
|
---- request.ENVIRON wsgi variables
|
|
['wsgi.errors', 'wsgi.input', 'wsgi.multiprocess', 'wsgi.multithread', 'wsgi.run_once', 'wsgi.url_scheme', 'wsgi.version']
|
|
|
|
$ cd ..
|