1ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com# Copyright (c) 2012 The Chromium Authors. All rights reserved. 2ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com# Use of this source code is governed by a BSD-style license that can be 3ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com# found in the LICENSE file. 4ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com 5ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com 6ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com""" 7ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.comVerify that the bench_pictures.cfg file is sane. 8ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com""" 9ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com 10ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com 11ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.comimport os 12ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.comimport sys 13ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com 14ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com 153b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.comdef ThrowIfNotAString(obj): 163b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.com """ Raise a TypeError if obj is not a string. """ 173b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.com if str(obj) != obj: 183b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.com raise TypeError('%s is not a string!' % str(obj)) 193b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.com 203b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.com 21ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.comdef Main(argv): 223b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.com """ Verify that the bench_pictures.cfg file is sane. 233b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.com 243b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.com - Exec the file to ensure that it uses correct Python syntax. 253b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.com - Make sure that every element is a string, because the buildbot scripts will 263b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.com fail to execute if this is not the case. 273b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.com 283b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.com This test does not verify that the well-formed configs are actually valid. 293b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.com """ 30ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com vars = {'import_path': 'tools'} 31ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com execfile(os.path.join('tools', 'bench_pictures.cfg'), vars) 32ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com bench_pictures_cfg = vars['bench_pictures_cfg'] 33ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com 34ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com for config_name, config_list in bench_pictures_cfg.iteritems(): 353b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.com ThrowIfNotAString(config_name) 36ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com for config in config_list: 37ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com for key, value in config.iteritems(): 383b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.com ThrowIfNotAString(key) 39ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com if type(value).__name__ == 'list': 40ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com for item in value: 413b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.com ThrowIfNotAString(item) 42b00d670114c29151f182256d7e915a874ebb2877borenet@google.com elif not value is True: 433b98bfd4023b0cdd853013a3d52a052551ecdbb8borenet@google.com ThrowIfNotAString(value) 44ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com 45ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.comif __name__ == '__main__': 46ddf36e73ac02b823bbe18b62c9d72128c5d81511borenet@google.com sys.exit(Main(sys.argv))