|  | #!/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) |