|  | # Copyright (c) 2012 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. | 
|  |  | 
|  |  | 
|  | """ | 
|  | Verify that the bench_pictures.cfg file is sane. | 
|  | """ | 
|  |  | 
|  |  | 
|  | import os | 
|  | import sys | 
|  |  | 
|  |  | 
|  | def ThrowIfNotAString(obj): | 
|  | """ Raise a TypeError if obj is not a string. """ | 
|  | if str(obj) != obj: | 
|  | raise TypeError('%s is not a string!' % str(obj)) | 
|  |  | 
|  |  | 
|  | def Main(argv): | 
|  | """ Verify that the bench_pictures.cfg file is sane. | 
|  |  | 
|  | - Exec the file to ensure that it uses correct Python syntax. | 
|  | - Make sure that every element is a string, because the buildbot scripts will | 
|  | fail to execute if this is not the case. | 
|  |  | 
|  | This test does not verify that the well-formed configs are actually valid. | 
|  | """ | 
|  | vars = {'import_path': 'tools'} | 
|  | execfile(os.path.join('tools', 'bench_pictures.cfg'), vars) | 
|  | bench_pictures_cfg = vars['bench_pictures_cfg'] | 
|  |  | 
|  | for config_name, config_list in bench_pictures_cfg.iteritems(): | 
|  | ThrowIfNotAString(config_name) | 
|  | for config in config_list: | 
|  | for key, value in config.iteritems(): | 
|  | ThrowIfNotAString(key) | 
|  | if type(value).__name__ == 'list': | 
|  | for item in value: | 
|  | ThrowIfNotAString(item) | 
|  | elif not value is True: | 
|  | ThrowIfNotAString(value) | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | sys.exit(Main(sys.argv)) |