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))