mirror of
https://github.com/ninja-build/ninja.git
synced 2026-08-07 08:31:58 +00:00
@@ -3,4 +3,9 @@ language: cpp
|
||||
compiler:
|
||||
- gcc
|
||||
- clang
|
||||
script: ./configure.py --bootstrap && ./ninja all && ./ninja_test --gtest_filter=-SubprocessTest.SetWithLots && ./misc/ninja_syntax_test.py
|
||||
script:
|
||||
- ./configure.py --bootstrap
|
||||
- ./ninja all
|
||||
- ./ninja_test --gtest_filter=-SubprocessTest.SetWithLots
|
||||
- ./misc/ninja_syntax_test.py
|
||||
- ./misc/output_test.py
|
||||
|
||||
61
misc/output_test.py
Executable file
61
misc/output_test.py
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
"""Runs ./ninja and checks if the output is correct.
|
||||
|
||||
In order to simulate a smart terminal it uses the 'script' command.
|
||||
"""
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
|
||||
def run(build_ninja, flags='', pipe=False):
|
||||
with tempfile.NamedTemporaryFile('w') as f:
|
||||
f.write(build_ninja)
|
||||
f.flush()
|
||||
ninja_cmd = './ninja {} -f {}'.format(flags, f.name)
|
||||
try:
|
||||
if pipe:
|
||||
output = subprocess.check_output([ninja_cmd], shell=True)
|
||||
else:
|
||||
output = subprocess.check_output(['script', '-qfec', ninja_cmd, '/dev/null'])
|
||||
except subprocess.CalledProcessError as err:
|
||||
sys.stdout.buffer.write(err.output)
|
||||
raise err
|
||||
final_output = ''
|
||||
for line in output.decode('utf-8').splitlines(True):
|
||||
if len(line) > 0 and line[-1] == '\r':
|
||||
continue
|
||||
final_output += line.replace('\r', '')
|
||||
return final_output
|
||||
|
||||
class Output(unittest.TestCase):
|
||||
def test_issue_1214(self):
|
||||
print_red = '''rule echo
|
||||
command = printf '\x1b[31mred\x1b[0m'
|
||||
description = echo $out
|
||||
|
||||
build a: echo
|
||||
'''
|
||||
# Only strip color when ninja's output is piped.
|
||||
self.assertEqual(run(print_red),
|
||||
'''[1/1] echo a\x1b[K
|
||||
\x1b[31mred\x1b[0m
|
||||
''')
|
||||
self.assertEqual(run(print_red, pipe=True),
|
||||
'''[1/1] echo a
|
||||
red
|
||||
''')
|
||||
# Even in verbose mode, colors should still only be stripped when piped.
|
||||
self.assertEqual(run(print_red, flags='-v'),
|
||||
'''[1/1] printf '\x1b[31mred\x1b[0m'
|
||||
\x1b[31mred\x1b[0m
|
||||
''')
|
||||
self.assertEqual(run(print_red, flags='-v', pipe=True),
|
||||
'''[1/1] printf '\x1b[31mred\x1b[0m'
|
||||
red
|
||||
''')
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user