#!/usr/bin/env python3 # Copyright 2017 The Chromium Authors # 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.assertEqual(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.assertEqual(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.assertEqual(output, expected) if __name__ == '__main__': logging.getLogger().setLevel(logging.DEBUG) unittest.main(verbosity=2)