| """Tests for ninja_utils.""" |
| |
| from __future__ import absolute_import |
| import os |
| import sys |
| import unittest |
| |
| # Allow imports from cq/scripts folder |
| sys.path.insert(0, os.path.realpath(os.path.join( |
| os.path.dirname(__file__), os.pardir))) |
| from helpers import ninja_utils |
| |
| |
| class NinjaUtilsTest(unittest.TestCase): |
| |
| def testSingleError(self): |
| """Test the comments generated for a single error.""" |
| ninja_output = ( |
| '[1/230] CXX obj/test/test.o\n' |
| 'FAILED: obj test/test.o\n' |
| '../prebuilt/toolchain/mips32r1/bin/mipsel-buildroot-linux-uclibc-g++' |
| ' -MMD -MF obj/test/test1.o -DV8 -fno\n' |
| 'In file included from ../../path/to/file:58:0,\n' |
| 'This line is expected.\n' |
| 'This line is also expected.\n' |
| '[2/230] CXX obj/test/test.o\n') |
| |
| expected_comments = ['This line is expected.\nThis line is also expected.'] |
| self.assertEqual(expected_comments, |
| ninja_utils.ninja_failure_to_comments(ninja_output)) |
| |
| def testMultipleErrors(self): |
| """Test the comments generated from multiple different errors.""" |
| ninja_output = ( |
| '[1/230] CXX obj/test/test.o\n' |
| 'FAILED: obj test/test1.o\n' |
| '../prebuilt/toolchain/mips32r1/bin/mipsel-buildroot-linux-uclibc-g++' |
| ' -MMD -MF obj/test/test1.o -DV8 -fno\n' |
| 'In file included from ../../path/to/file:58:0,\n' |
| 'This line is expected.\n' |
| 'This line is also expected.\n' |
| '[2/230] CXX obj/test/test.o\n' |
| 'FAILED: obj test/test2.o\n' |
| '../prebuilt/toolchain/mips32r1/bin/mipsel-buildroot-linux-uclibc-g++' |
| ' -MMD -MF obj/test/test1.o -DV8 -fno\n' |
| 'In file included from ../../path/to/file:58:0,\n' |
| 'This line is expected again.\n' |
| 'This line is also expected again.\n' |
| '[3/230] CXX obj/test/test3.o\n') |
| expected_comments = [ |
| 'This line is expected.\nThis line is also expected.', |
| 'This line is expected again.\nThis line is also expected again.' |
| ] |
| self.assertEqual( |
| set(expected_comments), |
| set(ninja_utils.ninja_failure_to_comments(ninja_output))) |
| |
| def testNoErrors(self): |
| """Test that no comments are generated if there are no errors.""" |
| ninja_output = ( |
| '[1/230] CXX obj/test/test.o\n' |
| '[2/230] CXX obj/test/test.o\n' |
| 'Unknown warming that is not handled.\n' |
| 'file: error something failed\n') |
| expected_comments = [] |
| self.assertEqual(expected_comments, |
| ninja_utils.ninja_failure_to_comments(ninja_output)) |
| |
| def testMaxErrors(self): |
| """Test that max_errors limits the errors correctly.""" |
| ninja_output = ( |
| 'FAILED: obj test/test1.o\n' |
| 'This line might be in the comments.\n' |
| '[2/230] CXX obj/test/test.o\n' |
| 'FAILED: obj test/test2.o\n' |
| 'This line might be in the comments. (But not both lines!).\n' |
| '[3/230] CXX obj/test/test3.o\n') |
| # Note that the particular comments that are saved are random. |
| actual_comments = ninja_utils.ninja_failure_to_comments(ninja_output, |
| max_errors=1) |
| self.assertEqual(2, len(actual_comments)) |
| self.assertEqual(ninja_utils.NINJA_TOO_MANY_ERRORS_MSG, actual_comments[-1]) |
| |
| if __name__ == '__main__': |
| unittest.main() |