0
Files
src/build/check_gn_headers_unittest.py
wychen 8cc3123c31 Print detailed info in check_gn_headers.py
When --verbose is given, print more detailed info to help debugging.
The dependency of offending header files and the obj files they affect
should help determine which files to fix. The number of affected
object files can be a proxy of seriousness.

If the whitelist is not given, the extra detail would be very long.

BUG=661774
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_chromium_dbg_ng

Review-Url: https://codereview.chromium.org/2932153002
Cr-Commit-Position: refs/heads/master@{#478956}
2017-06-13 10:21:23 +00:00

102 lines
2.2 KiB
Python
Executable File

#!/usr/bin/env python
# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import logging
import json
import unittest
import check_gn_headers
ninja_input = r'''
obj/a.o: #deps 1, deps mtime 123 (VALID)
../../a.cc
../../dir/path/b.h
../../c.hh
obj/b.o: #deps 1, deps mtime 123 (STALE)
../../b.cc
../../dir2/path/b.h
../../c2.hh
obj/c.o: #deps 1, deps mtime 123 (VALID)
../../c.cc
../../build/a.h
gen/b.h
../../out/Release/gen/no.h
../../dir3/path/b.h
../../c3.hh
'''
gn_input = json.loads(r'''
{
"others": [],
"targets": {
"//:All": {
},
"//:base": {
"public": [ "//base/p.h" ],
"sources": [ "//base/a.cc", "//base/a.h", "//base/b.hh" ],
"visibility": [ "*" ]
},
"//:star_public": {
"public": "*",
"sources": [ "//base/c.h", "//tmp/gen/a.h" ],
"visibility": [ "*" ]
}
}
}
''')
whitelist = r'''
white-front.c
a/b/c/white-end.c # comment
dir/white-both.c #more comment
# empty line above
a/b/c
'''
class CheckGnHeadersTest(unittest.TestCase):
def testNinja(self):
headers = check_gn_headers.ParseNinjaDepsOutput(
ninja_input.split('\n'), 'out/Release', False)
expected = {
'dir/path/b.h': ['obj/a.o'],
'c.hh': ['obj/a.o'],
'dir3/path/b.h': ['obj/c.o'],
'c3.hh': ['obj/c.o'],
}
self.assertEquals(headers, expected)
def testGn(self):
headers = check_gn_headers.ParseGNProjectJSON(gn_input,
'out/Release', 'tmp')
expected = set([
'base/a.h',
'base/b.hh',
'base/c.h',
'base/p.h',
'out/Release/gen/a.h',
])
self.assertEquals(headers, expected)
def testWhitelist(self):
output = check_gn_headers.ParseWhiteList(whitelist)
expected = set([
'white-front.c',
'a/b/c/white-end.c',
'dir/white-both.c',
'a/b/c',
])
self.assertEquals(output, expected)
if __name__ == '__main__':
logging.getLogger().setLevel(logging.DEBUG)
unittest.main(verbosity=2)