
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}
102 lines
2.2 KiB
Python
Executable File
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)
|