1*6777b538SAndroid Build Coastguard Worker#!/usr/bin/env python3 2*6777b538SAndroid Build Coastguard Worker# Copyright 2017 The Chromium Authors 3*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 4*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 5*6777b538SAndroid Build Coastguard Worker 6*6777b538SAndroid Build Coastguard Workerimport logging 7*6777b538SAndroid Build Coastguard Workerimport json 8*6777b538SAndroid Build Coastguard Workerimport unittest 9*6777b538SAndroid Build Coastguard Workerimport check_gn_headers 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Workerninja_input = r''' 13*6777b538SAndroid Build Coastguard Workerobj/a.o: #deps 1, deps mtime 123 (VALID) 14*6777b538SAndroid Build Coastguard Worker ../../a.cc 15*6777b538SAndroid Build Coastguard Worker ../../dir/path/b.h 16*6777b538SAndroid Build Coastguard Worker ../../c.hh 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Workerobj/b.o: #deps 1, deps mtime 123 (STALE) 19*6777b538SAndroid Build Coastguard Worker ../../b.cc 20*6777b538SAndroid Build Coastguard Worker ../../dir2/path/b.h 21*6777b538SAndroid Build Coastguard Worker ../../c2.hh 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Workerobj/c.o: #deps 1, deps mtime 123 (VALID) 24*6777b538SAndroid Build Coastguard Worker ../../c.cc 25*6777b538SAndroid Build Coastguard Worker ../../build/a.h 26*6777b538SAndroid Build Coastguard Worker gen/b.h 27*6777b538SAndroid Build Coastguard Worker ../../out/Release/gen/no.h 28*6777b538SAndroid Build Coastguard Worker ../../dir3/path/b.h 29*6777b538SAndroid Build Coastguard Worker ../../c3.hh 30*6777b538SAndroid Build Coastguard Worker''' 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Workergn_input = json.loads(r''' 34*6777b538SAndroid Build Coastguard Worker{ 35*6777b538SAndroid Build Coastguard Worker "others": [], 36*6777b538SAndroid Build Coastguard Worker "targets": { 37*6777b538SAndroid Build Coastguard Worker "//:All": { 38*6777b538SAndroid Build Coastguard Worker }, 39*6777b538SAndroid Build Coastguard Worker "//:base": { 40*6777b538SAndroid Build Coastguard Worker "public": [ "//base/p.h" ], 41*6777b538SAndroid Build Coastguard Worker "sources": [ "//base/a.cc", "//base/a.h", "//base/b.hh" ], 42*6777b538SAndroid Build Coastguard Worker "visibility": [ "*" ] 43*6777b538SAndroid Build Coastguard Worker }, 44*6777b538SAndroid Build Coastguard Worker "//:star_public": { 45*6777b538SAndroid Build Coastguard Worker "public": "*", 46*6777b538SAndroid Build Coastguard Worker "sources": [ "//base/c.h", "//tmp/gen/a.h" ], 47*6777b538SAndroid Build Coastguard Worker "visibility": [ "*" ] 48*6777b538SAndroid Build Coastguard Worker } 49*6777b538SAndroid Build Coastguard Worker } 50*6777b538SAndroid Build Coastguard Worker} 51*6777b538SAndroid Build Coastguard Worker''') 52*6777b538SAndroid Build Coastguard Worker 53*6777b538SAndroid Build Coastguard Worker 54*6777b538SAndroid Build Coastguard Workerwhitelist = r''' 55*6777b538SAndroid Build Coastguard Worker white-front.c 56*6777b538SAndroid Build Coastguard Workera/b/c/white-end.c # comment 57*6777b538SAndroid Build Coastguard Worker dir/white-both.c #more comment 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Worker# empty line above 60*6777b538SAndroid Build Coastguard Workera/b/c 61*6777b538SAndroid Build Coastguard Worker''' 62*6777b538SAndroid Build Coastguard Worker 63*6777b538SAndroid Build Coastguard Worker 64*6777b538SAndroid Build Coastguard Workerclass CheckGnHeadersTest(unittest.TestCase): 65*6777b538SAndroid Build Coastguard Worker def testNinja(self): 66*6777b538SAndroid Build Coastguard Worker headers = check_gn_headers.ParseNinjaDepsOutput( 67*6777b538SAndroid Build Coastguard Worker ninja_input.split('\n'), 'out/Release', False) 68*6777b538SAndroid Build Coastguard Worker expected = { 69*6777b538SAndroid Build Coastguard Worker 'dir/path/b.h': ['obj/a.o'], 70*6777b538SAndroid Build Coastguard Worker 'c.hh': ['obj/a.o'], 71*6777b538SAndroid Build Coastguard Worker 'dir3/path/b.h': ['obj/c.o'], 72*6777b538SAndroid Build Coastguard Worker 'c3.hh': ['obj/c.o'], 73*6777b538SAndroid Build Coastguard Worker } 74*6777b538SAndroid Build Coastguard Worker self.assertEqual(headers, expected) 75*6777b538SAndroid Build Coastguard Worker 76*6777b538SAndroid Build Coastguard Worker def testGn(self): 77*6777b538SAndroid Build Coastguard Worker headers = check_gn_headers.ParseGNProjectJSON(gn_input, 78*6777b538SAndroid Build Coastguard Worker 'out/Release', 'tmp') 79*6777b538SAndroid Build Coastguard Worker expected = set([ 80*6777b538SAndroid Build Coastguard Worker 'base/a.h', 81*6777b538SAndroid Build Coastguard Worker 'base/b.hh', 82*6777b538SAndroid Build Coastguard Worker 'base/c.h', 83*6777b538SAndroid Build Coastguard Worker 'base/p.h', 84*6777b538SAndroid Build Coastguard Worker 'out/Release/gen/a.h', 85*6777b538SAndroid Build Coastguard Worker ]) 86*6777b538SAndroid Build Coastguard Worker self.assertEqual(headers, expected) 87*6777b538SAndroid Build Coastguard Worker 88*6777b538SAndroid Build Coastguard Worker def testWhitelist(self): 89*6777b538SAndroid Build Coastguard Worker output = check_gn_headers.ParseWhiteList(whitelist) 90*6777b538SAndroid Build Coastguard Worker expected = set([ 91*6777b538SAndroid Build Coastguard Worker 'white-front.c', 92*6777b538SAndroid Build Coastguard Worker 'a/b/c/white-end.c', 93*6777b538SAndroid Build Coastguard Worker 'dir/white-both.c', 94*6777b538SAndroid Build Coastguard Worker 'a/b/c', 95*6777b538SAndroid Build Coastguard Worker ]) 96*6777b538SAndroid Build Coastguard Worker self.assertEqual(output, expected) 97*6777b538SAndroid Build Coastguard Worker 98*6777b538SAndroid Build Coastguard Worker 99*6777b538SAndroid Build Coastguard Workerif __name__ == '__main__': 100*6777b538SAndroid Build Coastguard Worker logging.getLogger().setLevel(logging.DEBUG) 101*6777b538SAndroid Build Coastguard Worker unittest.main(verbosity=2) 102