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