From 7ef52b4c6f3a5f2e57a54c045027516e045b5d67 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Tue, 1 May 2012 18:26:51 -0700 Subject: Fix layout width in ninja_syntax.py. The last line would sometimes be needlessly longer than the layout width. One example is line 67 in the build.ninja generated by ninja's own configure.py: Before this patch, ninja_syntax would create a 81 character line. --- misc/ninja_syntax.py | 2 +- misc/ninja_test.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/misc/ninja_syntax.py b/misc/ninja_syntax.py index 97bd82b..3ecbcee 100644 --- a/misc/ninja_syntax.py +++ b/misc/ninja_syntax.py @@ -101,7 +101,7 @@ class Writer(object): def _line(self, text, indent=0): """Write 'text' word-wrapped at self.width characters.""" leading_space = ' ' * indent - while len(text) > self.width: + while len(leading_space) + len(text) > self.width: # The text is too wide; wrap if possible. # Find the rightmost space that would obey our width constraint and diff --git a/misc/ninja_test.py b/misc/ninja_test.py index 897de72..b56033e 100755 --- a/misc/ninja_test.py +++ b/misc/ninja_test.py @@ -41,6 +41,18 @@ class TestLineWordWrap(unittest.TestCase): INDENT + 'y']) + '\n', self.out.getvalue()) + def test_short_words_indented(self): + # Test that indent is taking into acount when breaking subsequent lines. + # The second line should not be ' to tree', as that's longer than the + # test layout width of 8. + self.n._line('line_one to tree') + self.assertEqual('''\ +line_one $ + to $ + tree +''', + self.out.getvalue()) + def test_few_long_words_indented(self): # Check wrapping in the presence of indenting. self.n._line(' '.join(['x', LONGWORD, 'y']), indent=1) -- cgit v0.12