mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 02:09:05 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			101 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			101 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)
 |