Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Side by Side Diff: chrome/test/chromedriver/embed_networks_in_cpp.py

Issue 1004843002: [chromedriver] Add Network Presets to Network Throttling feature (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nits Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright 2015 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 """Embeds standalone JavaScript snippets in C++ code.
7
8 The script requires the devtools/front_end/toolbox/OverridesUI.js file from
9 WebKit that lists the preset network conditions to be passed in as the only
10 argument. The list of network conditions will be written to a C-style string to
11 be parsed with JSONReader.
12 """
13
14 import optparse
15 import os
16 import re
17 import subprocess
18 import sys
19
20 import cpp_source
21
22 UNLIMITED_THROUGHPUT = ('WebInspector.OverridesSupport'
23 '.NetworkThroughputUnlimitedValue')
24
25
26 def quotizeKeys(s, keys):
27 """Returns the string s with each instance of each key wrapped in quotes.
28
29 Args:
30 s: a string containing keys that need to be wrapped in quotes.
31 keys: an iterable of keys to be wrapped in quotes in the string.
32 """
33 for key in keys:
34 s = re.sub('%s: ' % key, '"%s": ' % key, s)
35 return s
36
37 def evaluateMultiplications(s):
38 """Returns the string s with each bare multiplication evaluated.
39
40 Since the source is JavaScript, which includes bare arithmetic, and the
41 output must be JSON format, we must evaluate all expressions.
42
43 Args:
44 s: a string containing bare multiplications that need to be evaluated.
45 """
46 def evaluateBinaryMultiplication(match):
47 return str(float(match.group(1)) * float(match.group(2)))
48
49 return re.sub('([0-9\.]+) \* ([0-9\.]+)', evaluateBinaryMultiplication, s)
50
51
52 def main():
53 parser = optparse.OptionParser()
54 parser.add_option(
55 '', '--directory', type='string', default='.',
56 help='Path to directory where the cc/h files should be created')
57 options, args = parser.parse_args()
58
59 networks = '['
60 file_name = args[0]
61 inside_list = False
62 with open(file_name, 'r') as f:
63 for line in f:
64 if not inside_list:
65 if 'WebInspector.OverridesUI._networkConditionsPresets = [' in line:
66 inside_list = True
67 else:
68 if line.strip() == '];':
69 inside_list = False
70 continue
71 line = line.replace(UNLIMITED_THROUGHPUT, "-1")
72 networks += line.strip()
73
74 output_dir = 'chrome/test/chromedriver/chrome'
75 networks += ']'
76 networks = quotizeKeys(networks, ['id', 'title', 'throughput', 'latency'])
77 networks = evaluateMultiplications(networks)
78 cpp_source.WriteSource('network_list',
79 output_dir,
80 options.directory, {'kNetworks': networks})
81
82 clang_format = ['clang-format', '-i']
83 subprocess.Popen(clang_format + ['%s/network_list.cc' % output_dir])
84 subprocess.Popen(clang_format + ['%s/network_list.h' % output_dir])
85
86
87 if __name__ == '__main__':
88 sys.exit(main())
OLDNEW
« no previous file with comments | « chrome/test/chromedriver/client/chromedriver.py ('k') | chrome/test/chromedriver/test/run_py_tests.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698