Commit 448e1b37 authored by dpapad's avatar dpapad Committed by Commit Bot

WebUI: Add support for producing/consuming grdp files in generate_grd.py

This will be leveraged in follow up CLs, to auto-generate parts of
webui_resources.grd.

Bug: 1132403
Change-Id: I5bd5f8a411c2cbc1f023220a779d74be209e902c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2489920Reviewed-by: default avatarRebekah Potter <rbpotter@chromium.org>
Commit-Queue: dpapad <dpapad@chromium.org>
Cr-Commit-Position: refs/heads/master@{#820148}
parent c83214c4
...@@ -10,18 +10,29 @@ template("generate_grd") { ...@@ -10,18 +10,29 @@ template("generate_grd") {
deps = invoker.deps deps = invoker.deps
} }
inputs = invoker.manifest_files inputs = []
outputs = [ invoker.out_grd ] outputs = [ invoker.out_grd ]
args = [ args = [
"--out-grd", "--out-grd",
rebase_path(invoker.out_grd, root_build_dir), rebase_path(invoker.out_grd, root_build_dir),
"--grd-prefix", "--grd-prefix",
invoker.grd_prefix, invoker.grd_prefix,
"--root-gen-dir", "--root-gen-dir",
rebase_path(root_gen_dir, root_build_dir), rebase_path(root_gen_dir, root_build_dir),
"--manifest-files", ]
] + rebase_path(invoker.manifest_files, root_build_dir)
if (defined(invoker.manifest_files)) {
inputs += invoker.manifest_files
args += [ "--manifest-files" ] +
rebase_path(invoker.manifest_files, root_build_dir)
}
if (defined(invoker.grdp_files)) {
inputs += invoker.grdp_files
args +=
[ "--grdp-files" ] + rebase_path(invoker.grdp_files, root_build_dir)
}
if (defined(invoker.input_files)) { if (defined(invoker.input_files)) {
args += [ args += [
......
...@@ -71,6 +71,9 @@ GRD_END_TEMPLATE = ' </includes>\n'\ ...@@ -71,6 +71,9 @@ GRD_END_TEMPLATE = ' </includes>\n'\
' </release>\n'\ ' </release>\n'\
'</grit>\n' '</grit>\n'
GRDP_BEGIN_TEMPLATE = '<?xml version="1.0" encoding="UTF-8"?>\n'\
'<grit-part>\n'
GRDP_END_TEMPLATE = '</grit-part>\n'
# Generates an <include .... /> row for the given file. # Generates an <include .... /> row for the given file.
def _generate_include_row(grd_prefix, filename, pathname, \ def _generate_include_row(grd_prefix, filename, pathname, \
...@@ -90,19 +93,31 @@ def _generate_include_row(grd_prefix, filename, pathname, \ ...@@ -90,19 +93,31 @@ def _generate_include_row(grd_prefix, filename, pathname, \
type=type) type=type)
def _generate_part_row(filename):
return ' <part file="%s" />\n' % filename
def main(argv): def main(argv):
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument('--manifest-files', required=True, nargs="*") parser.add_argument('--manifest-files', nargs="*")
parser.add_argument('--out-grd', required=True) parser.add_argument('--out-grd', required=True)
parser.add_argument('--grd-prefix', required=True) parser.add_argument('--grd-prefix', required=True)
parser.add_argument('--root-gen-dir', required=True) parser.add_argument('--root-gen-dir', required=True)
parser.add_argument('--input-files', nargs="*") parser.add_argument('--input-files', nargs="*")
parser.add_argument('--input-files-base-dir') parser.add_argument('--input-files-base-dir')
parser.add_argument('--grdp-files', nargs="*")
parser.add_argument('--resource-path-rewrites', nargs="*") parser.add_argument('--resource-path-rewrites', nargs="*")
args = parser.parse_args(argv) args = parser.parse_args(argv)
grd_file = open(os.path.normpath(os.path.join(_CWD, args.out_grd)), 'w') grd_file = open(os.path.normpath(os.path.join(_CWD, args.out_grd)), 'w')
grd_file.write(GRD_BEGIN_TEMPLATE.format(prefix=args.grd_prefix)) begin_template = GRDP_BEGIN_TEMPLATE if args.out_grd.endswith('.grdp') else \
GRD_BEGIN_TEMPLATE
grd_file.write(begin_template.format(prefix=args.grd_prefix))
if args.grdp_files != None:
for grdp_file in args.grdp_files:
grdp_path = os.path.relpath(grdp_file, os.path.dirname(args.out_grd))
grd_file.write(_generate_part_row(grdp_path))
resource_path_rewrites = {} resource_path_rewrites = {}
if args.resource_path_rewrites != None: if args.resource_path_rewrites != None:
...@@ -119,19 +134,22 @@ def main(argv): ...@@ -119,19 +134,22 @@ def main(argv):
args.grd_prefix, filename, '${root_src_dir}/' + filepath, args.grd_prefix, filename, '${root_src_dir}/' + filepath,
resource_path_rewrites)) resource_path_rewrites))
for manifest_file in args.manifest_files: if args.manifest_files != None:
manifest_path = os.path.normpath(os.path.join(_CWD, manifest_file)) for manifest_file in args.manifest_files:
with open(manifest_path, 'r') as f: manifest_path = os.path.normpath(os.path.join(_CWD, manifest_file))
data = json.load(f) with open(manifest_path, 'r') as f:
base_dir= os.path.normpath(os.path.join(_CWD, data['base_dir'])) data = json.load(f)
for filename in data['files']: base_dir= os.path.normpath(os.path.join(_CWD, data['base_dir']))
filepath = os.path.join(base_dir, filename).replace('\\', '/') for filename in data['files']:
rebased_path = os.path.relpath(filepath, args.root_gen_dir) filepath = os.path.join(base_dir, filename).replace('\\', '/')
grd_file.write(_generate_include_row( rebased_path = os.path.relpath(filepath, args.root_gen_dir)
args.grd_prefix, filename, '${root_gen_dir}/' + rebased_path, grd_file.write(_generate_include_row(
resource_path_rewrites)) args.grd_prefix, filename, '${root_gen_dir}/' + rebased_path,
resource_path_rewrites))
grd_file.write(GRD_END_TEMPLATE)
end_template = GRDP_END_TEMPLATE if args.out_grd.endswith('.grdp') else \
GRD_END_TEMPLATE
grd_file.write(end_template)
return return
......
...@@ -17,7 +17,7 @@ pathToHere = os.path.relpath(_HERE_DIR, _CWD) ...@@ -17,7 +17,7 @@ pathToHere = os.path.relpath(_HERE_DIR, _CWD)
class GenerateGrdTest(unittest.TestCase): class GenerateGrdTest(unittest.TestCase):
def setUp(self): def setUp(self):
self._out_folder = None self._out_folder = tempfile.mkdtemp(dir=_HERE_DIR)
def tearDown(self): def tearDown(self):
shutil.rmtree(self._out_folder) shutil.rmtree(self._out_folder)
...@@ -26,31 +26,40 @@ class GenerateGrdTest(unittest.TestCase): ...@@ -26,31 +26,40 @@ class GenerateGrdTest(unittest.TestCase):
assert self._out_folder assert self._out_folder
return open(os.path.join(self._out_folder, file_name), 'rb').read() return open(os.path.join(self._out_folder, file_name), 'rb').read()
def _run_test_(self, grd_expected, manifest_files, input_files=None, def _run_test_(self, grd_expected,
input_files_base_dir=None, resource_path_rewrites=None): out_grd='test_resources.grd',
assert not self._out_folder manifest_files=None, input_files=None,
self._out_folder = tempfile.mkdtemp(dir=_HERE_DIR) input_files_base_dir=None, grdp_files=None,
resource_path_rewrites=None):
args = [ args = [
'--out-grd', os.path.join(self._out_folder, 'test_resources.grd'), '--out-grd', os.path.join(self._out_folder, out_grd),
'--grd-prefix', 'test', '--grd-prefix', 'test',
'--root-gen-dir', os.path.join(_CWD, pathToHere, 'tests'), '--root-gen-dir', os.path.join(_CWD, pathToHere, 'tests'),
'--manifest-files', ]
] + manifest_files
if manifest_files != None:
args += [
'--manifest-files',
] + manifest_files
if grdp_files != None:
args += [
'--grdp-files',
] + grdp_files
if (input_files_base_dir): if (input_files_base_dir):
args += [ args += [
'--input-files-base-dir', '--input-files-base-dir',
input_files_base_dir, input_files_base_dir,
'--input-files', '--input-files',
] ] + input_files
args += input_files
if (resource_path_rewrites): if (resource_path_rewrites):
args += [ '--resource-path-rewrites' ] + resource_path_rewrites args += [ '--resource-path-rewrites' ] + resource_path_rewrites
generate_grd.main(args) generate_grd.main(args)
actual_grd = self._read_out_file('test_resources.grd') actual_grd = self._read_out_file(out_grd)
expected_grd = open( expected_grd = open(
os.path.join(_HERE_DIR, 'tests', grd_expected), 'rb').read() os.path.join(_HERE_DIR, 'tests', grd_expected), 'rb').read()
self.assertEquals(expected_grd, actual_grd) self.assertEquals(expected_grd, actual_grd)
...@@ -58,7 +67,7 @@ class GenerateGrdTest(unittest.TestCase): ...@@ -58,7 +67,7 @@ class GenerateGrdTest(unittest.TestCase):
def testSuccess(self): def testSuccess(self):
self._run_test_( self._run_test_(
'expected_grd.grd', 'expected_grd.grd',
[ manifest_files = [
os.path.join(pathToHere, 'tests', 'test_manifest_1.json'), os.path.join(pathToHere, 'tests', 'test_manifest_1.json'),
os.path.join(pathToHere, 'tests', 'test_manifest_2.json'), os.path.join(pathToHere, 'tests', 'test_manifest_2.json'),
]) ])
...@@ -66,21 +75,35 @@ class GenerateGrdTest(unittest.TestCase): ...@@ -66,21 +75,35 @@ class GenerateGrdTest(unittest.TestCase):
def testSuccessWithInputFiles(self): def testSuccessWithInputFiles(self):
self._run_test_( self._run_test_(
'expected_grd_with_input_files.grd', 'expected_grd_with_input_files.grd',
[ manifest_files = [
os.path.join(pathToHere, 'tests', 'test_manifest_1.json'), os.path.join(pathToHere, 'tests', 'test_manifest_1.json'),
os.path.join(pathToHere, 'tests', 'test_manifest_2.json'), os.path.join(pathToHere, 'tests', 'test_manifest_2.json'),
], ],
[ 'images/test_svg.svg', 'test_html_in_src.html' ], input_files = [ 'images/test_svg.svg', 'test_html_in_src.html' ],
'test_src_dir') input_files_base_dir = 'test_src_dir')
def testSuccessWithGrdpFiles(self):
self._run_test_(
'expected_grd_with_grdp_files.grd',
grdp_files = [
os.path.join(self._out_folder, 'foo_resources.grdp'),
os.path.join(self._out_folder, 'foo', 'bar_resources.grdp'),
])
def testSuccessGrdpWithInputFiles(self):
self._run_test_(
'expected_grdp_with_input_files.grdp',
out_grd = 'test_resources.grdp',
input_files = [ 'images/test_svg.svg', 'test_html_in_src.html' ],
input_files_base_dir = 'test_src_dir')
def testSuccessWithRewrites(self): def testSuccessWithRewrites(self):
self._run_test_( self._run_test_(
'expected_grd_with_rewrites.grd', 'expected_grd_with_rewrites.grd',
[ manifest_files = [
os.path.join(pathToHere, 'tests', 'test_manifest_1.json'), os.path.join(pathToHere, 'tests', 'test_manifest_1.json'),
os.path.join(pathToHere, 'tests', 'test_manifest_2.json'), os.path.join(pathToHere, 'tests', 'test_manifest_2.json'),
], ],
input_files=None, input_files_base_dir=None,
resource_path_rewrites=[ resource_path_rewrites=[
'test.rollup.js|test.js', 'test.rollup.js|test.js',
'dir/another_element_in_dir.js|dir2/another_element_in_dir_renamed.js', 'dir/another_element_in_dir.js|dir2/another_element_in_dir_renamed.js',
......
<?xml version="1.0" encoding="UTF-8"?>
<grit latest_public_release="0" current_release="1" output_all_resource_defines="false">
<outputs>
<output filename="grit/test_resources.h" type="rc_header">
<emit emit_type='prepend'></emit>
</output>
<output filename="grit/test_resources_map.cc"
type="resource_file_map_source" />
<output filename="grit/test_resources_map.h"
type="resource_map_header" />
<output filename="test_resources.pak" type="data_package" />
</outputs>
<release seq="1">
<includes>
<part file="foo_resources.grdp" />
<part file="foo/bar_resources.grdp" />
</includes>
</release>
</grit>
<?xml version="1.0" encoding="UTF-8"?>
<grit-part>
<include name="IDR_TEST_IMAGES_TEST_SVG_SVG" file="${root_src_dir}/test_src_dir/images/test_svg.svg" resource_path="images/test_svg.svg" use_base_dir="false" type="BINDATA" />
<include name="IDR_TEST_TEST_HTML_IN_SRC_HTML" file="${root_src_dir}/test_src_dir/test_html_in_src.html" resource_path="test_html_in_src.html" use_base_dir="false" type="chrome_html" />
</grit-part>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment