New mklog script
Martin Liška
mliska@suse.cz
Fri May 15 11:20:15 GMT 2020
On 5/15/20 12:58 PM, David Malcolm wrote:
> On Fri, 2020-05-15 at 10:59 +0200, Martin Liška wrote:
>> Hi.
>>
>> Since we moved to git world and we're in the preparation for
>> ChangeLog messages
>> being in git commit messages, I think it's the right time to also
>> simplify mklog
>> script.
>>
>> I'm sending a new version (which should eventually replace
>> contrib/mklog and contrib/mklog.pl).
>> Changes made in the version:
>>
>> - the script uses unifdiff - it rapidly simplifies parsing of the '+-
>> !' lines that is done
>> in contrib/mklog
>> - no author nor date stamp is used - that all can be get from git
>> - --inline option is not supported - I don't see a use-case for it
>> now
>> - the new script has a unit tests (just few of them for now)
>>
>> I compares results in between the old Python script for last 80
>> commits and it's very close,
>> in some cases it does even better.
>>
>> I'm planning to maintain and improve the script for the future.
>>
>> Thoughts?
>> Martin
>
>> +class TestMklog(unittest.TestCase):
>> + def test_macro_definition(self):
>> + changelog = generate_changelog(PATCH1)
>> + assert changelog == EXPECTED1
>> +
>> + def test_changed_argument(self):
>> + changelog = generate_changelog(PATCH2)
>> + assert changelog == EXPECTED2
>> +
>> + def test_enum_and_struct(self):
>> + changelog = generate_changelog(PATCH3)
>> + assert changelog == EXPECTED3
>> +
>> + def test_no_function(self):
>> + changelog = generate_changelog(PATCH3, True)
>> + assert changelog == EXPECTED3B
Thank you David for review.
However I see the same output for both operator== and assertEqual. Probably
because of usage of pytest version 4?
assertEqual:
$ pytest contrib/test_mklog_ng.py
Test session starts (platform: linux, Python 3.8.2, pytest 4.6.9, pytest-sugar 0.9.3)
benchmark: 3.2.3 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
rootdir: /home/marxin/Programming/gcc
plugins: xdist-1.32.0, sugar-0.9.3, forked-1.1.3, benchmark-3.2.3, aspectlib-1.5.0, cov-2.8.1, flake8-1.0.5
collecting ...
contrib/test_mklog_ng.py ✓ 25% ██▌
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― TestMklog.test_enum_and_struct ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
self = <test_mklog_ng.TestMklog testMethod=test_enum_and_struct>
def test_enum_and_struct(self):
changelog = generate_changelog(PATCH3)
> self.assertEqual(changelog, EXPECTED3)
E AssertionError: 'libc[23 chars]clude/cpplib.h (enum c_lang):\n\t(struct cpp_options):\n\n' != 'libc[23 chars]clude/cppli22b.h (enum c_lang):\n\t(struct cpp_optio44ns):\n\n'
E libcpp/ChangeLog:
E
E - * include/cpplib.h (enum c_lang):
E + * include/cppli22b.h (enum c_lang):
E ? ++
E - (struct cpp_options):
E + (struct cpp_optio44ns):
E ? ++
contrib/test_mklog_ng.py:154: AssertionError
operator==:
pytest contrib/test_mklog_ng.py
Test session starts (platform: linux, Python 3.8.2, pytest 4.6.9, pytest-sugar 0.9.3)
benchmark: 3.2.3 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
rootdir: /home/marxin/Programming/gcc
plugins: xdist-1.32.0, sugar-0.9.3, forked-1.1.3, benchmark-3.2.3, aspectlib-1.5.0, cov-2.8.1, flake8-1.0.5
collecting ...
contrib/test_mklog_ng.py ✓ 25% ██▌
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― TestMklog.test_enum_and_struct ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
self = <test_mklog_ng.TestMklog testMethod=test_enum_and_struct>
def test_enum_and_struct(self):
changelog = generate_changelog(PATCH3)
> assert changelog == EXPECTED3
E AssertionError: assert 'libcpp/Chang...options):\n\n' == 'libcpp/Change...tio44ns):\n\n'
E libcpp/ChangeLog:
E
E - * include/cpplib.h (enum c_lang):
E + * include/cppli22b.h (enum c_lang):
E ? ++
E - (struct cpp_options):
E + (struct cpp_optio44ns):...
E
E ...Full output truncated (3 lines hidden), use '-vv' to show
Martin
>
> Use self.assertEqual(a, b) rather than assert a == b, so that if it
> fails you get a multiline diff:
>
> e.g.:
>
> import unittest
>
> class TestMklog(unittest.TestCase):
> def test_macro_definition(self):
> self.assertEqual('''
> first
> second
> third''', '''
> first
> SECOND
> third''')
>
> unittest.main()
>
>
> has this output:
>
> F
> ======================================================================
> FAIL: test_macro_definition (__main__.TestMklog)
> ----------------------------------------------------------------------
> Traceback (most recent call last):
> File "/tmp/foo.py", line 11, in test_macro_definition
> third''')
> AssertionError: '\nfirst\nsecond\nthird' != '\nfirst\nSECOND\nthird'
>
> first
> - second
> + SECOND
> third
>
> ----------------------------------------------------------------------
> Ran 1 test in 0.000s
>
> FAILED (failures=1)
>
> which is much easier to debug than the output from assert a == b, which
> is just:
>
> F
> ======================================================================
> FAIL: test_macro_definition (__main__.TestMklog)
> ----------------------------------------------------------------------
> Traceback (most recent call last):
> File "/tmp/foo.py", line 11, in test_macro_definition
> third''')
> AssertionError
>
> ----------------------------------------------------------------------
> Ran 1 test in 0.000s
>
> FAILED (failures=1)
>
More information about the Gcc
mailing list