| #!/usr/bin/env python |
| # Copyright (c) 2019 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Script used to test subprocess2.""" |
| |
| import optparse |
| import os |
| import sys |
| import time |
| |
| |
| if sys.platform == 'win32': |
| # Annoying, make sure the output is not translated on Windows. |
| # pylint: disable=no-member,import-error |
| import msvcrt |
| msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) |
| msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY) |
| |
| parser = optparse.OptionParser() |
| parser.add_option( |
| '--fail', |
| dest='return_value', |
| action='store_const', |
| default=0, |
| const=64) |
| parser.add_option( |
| '--crlf', action='store_const', const='\r\n', dest='eol', default='\n') |
| parser.add_option( |
| '--cr', action='store_const', const='\r', dest='eol') |
| parser.add_option('--stdout', action='store_true') |
| parser.add_option('--stderr', action='store_true') |
| parser.add_option('--read', action='store_true') |
| options, args = parser.parse_args() |
| if args: |
| parser.error('Internal error') |
| |
| def do(string): |
| if options.stdout: |
| if sys.version_info.major == 2: |
| sys.stdout.write(string.upper()) |
| sys.stdout.write(options.eol) |
| else: |
| sys.stdout.buffer.write(string.upper().encode('utf-8')) |
| sys.stdout.buffer.write(options.eol.encode('utf-8')) |
| if options.stderr: |
| if sys.version_info.major == 2: |
| sys.stderr.write(string.lower()) |
| sys.stderr.write(options.eol) |
| else: |
| sys.stderr.buffer.write(string.lower().encode('utf-8')) |
| sys.stderr.buffer.write(options.eol.encode('utf-8')) |
| sys.stderr.flush() |
| |
| |
| do('A') |
| do('BB') |
| do('CCC') |
| if options.read: |
| assert options.return_value == 0 |
| try: |
| while sys.stdin.read(1): |
| options.return_value += 1 |
| except OSError: |
| pass |
| |
| sys.exit(options.return_value) |