blob: 61526a2c5118e369cba4eda1f1116c86430c9237 [file] [log] [blame]
#!/usr/bin/python
# Copyright 2012. Jurko Gospodnetic
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
# Test Boost Jam parser's source line tracking & reporting.
import BoostBuild
def test_eof_in_string():
t = BoostBuild.Tester(pass_toolset=False)
t.write("file.jam", '\n\n\naaa = "\n\n\n\n\n\n')
t.run_build_system(["-ffile.jam"], status=1)
t.expect_output_lines('file.jam:4: unmatched " in string at keyword =')
t.expect_output_lines("file.jam:4: syntax error at EOF")
t.cleanup()
def test_error_missing_argument(eof):
"""
This use case used to cause a missing argument error to be reported in
module '(builtin)' in line -1 when the input file did not contain a
trailing newline.
"""
t = BoostBuild.Tester(pass_toolset=False)
t.write("file.jam", """\
rule f ( param ) { }
f ;%s""" % __trailing_newline(eof))
t.run_build_system(["-ffile.jam"], status=1)
t.expect_output_lines("file.jam:2: in module scope")
t.expect_output_lines("file.jam:1:see definition of rule 'f' being called")
t.cleanup()
def test_error_syntax(eof):
t = BoostBuild.Tester(pass_toolset=False)
t.write("file.jam", "ECHO%s" % __trailing_newline(eof))
t.run_build_system(["-ffile.jam"], status=1)
t.expect_output_lines("file.jam:1: syntax error at EOF")
t.cleanup()
def test_traceback():
t = BoostBuild.Tester(pass_toolset=False)
t.write("file.jam", """\
NOTFILE all ;
ECHO [ BACKTRACE ] ;""")
t.run_build_system(["-ffile.jam"])
t.expect_output_lines("file.jam 2 module scope")
t.cleanup()
def __trailing_newline(eof):
"""
Helper function returning an empty string or a newling character to
append to the current output line depending on whether we want that line to
be the last line in the file (eof == True) or not (eof == False).
"""
if eof:
return ""
return "\n"
test_error_missing_argument(eof=False)
test_error_missing_argument(eof=True)
test_error_syntax(eof=False)
test_error_syntax(eof=True)
test_traceback()
test_eof_in_string()