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") {
deps = invoker.deps
}
inputs = invoker.manifest_files
inputs = []
outputs = [ invoker.out_grd ]
args = [
"--out-grd",
rebase_path(invoker.out_grd, root_build_dir),
"--grd-prefix",
invoker.grd_prefix,
"--root-gen-dir",
rebase_path(root_gen_dir, root_build_dir),
"--manifest-files",
] + rebase_path(invoker.manifest_files, root_build_dir)
"--out-grd",
rebase_path(invoker.out_grd, root_build_dir),
"--grd-prefix",
invoker.grd_prefix,
"--root-gen-dir",
rebase_path(root_gen_dir, 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)) {
args += [
......
......@@ -71,6 +71,9 @@ GRD_END_TEMPLATE = ' </includes>\n'\
' </release>\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.
def _generate_include_row(grd_prefix, filename, pathname, \
......@@ -90,19 +93,31 @@ def _generate_include_row(grd_prefix, filename, pathname, \
type=type)
def _generate_part_row(filename):
return ' <part file="%s" />\n' % filename
def main(argv):
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('--grd-prefix', required=True)
parser.add_argument('--root-gen-dir', required=True)
parser.add_argument('--input-files', nargs="*")
parser.add_argument('--input-files-base-dir')
parser.add_argument('--grdp-files', nargs="*")
parser.add_argument('--resource-path-rewrites', nargs="*")
args = parser.parse_args(argv)
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 = {}
if args.resource_path_rewrites != None:
......@@ -119,19 +134,22 @@ def main(argv):
args.grd_prefix, filename, '${root_src_dir}/' + filepath,
resource_path_rewrites))
for manifest_file in args.manifest_files:
manifest_path = os.path.normpath(os.path.join(_CWD, manifest_file))
with open(manifest_path, 'r') as f:
data = json.load(f)
base_dir= os.path.normpath(os.path.join(_CWD, data['base_dir']))
for filename in data['files']:
filepath = os.path.join(base_dir, filename).replace('\\', '/')
rebased_path = os.path.relpath(filepath, args.root_gen_dir)
grd_file.write(_generate_include_row(
args.grd_prefix, filename, '${root_gen_dir}/' + rebased_path,
resource_path_rewrites))
grd_file.write(GRD_END_TEMPLATE)
if args.manifest_files != None:
for manifest_file in args.manifest_files:
manifest_path = os.path.normpath(os.path.join(_CWD, manifest_file))
with open(manifest_path, 'r') as f:
data = json.load(f)
base_dir= os.path.normpath(os.path.join(_CWD, data['base_dir']))
for filename in data['files']:
filepath = os.path.join(base_dir, filename).replace('\\', '/')
rebased_path = os.path.relpath(filepath, args.root_gen_dir)
grd_file.write(_generate_include_row(
args.grd_prefix, filename, '${root_gen_dir}/' + rebased_path,
resource_path_rewrites))
end_template = GRDP_END_TEMPLATE if args.out_grd.endswith('.grdp') else \
GRD_END_TEMPLATE
grd_file.write(end_template)
return
......
......@@ -17,7 +17,7 @@ pathToHere = os.path.relpath(_HERE_DIR, _CWD)
class GenerateGrdTest(unittest.TestCase):
def setUp(self):
self._out_folder = None
self._out_folder = tempfile.mkdtemp(dir=_HERE_DIR)
def tearDown(self):
shutil.rmtree(self._out_folder)
......@@ -26,31 +26,40 @@ class GenerateGrdTest(unittest.TestCase):
assert self._out_folder
return open(os.path.join(self._out_folder, file_name), 'rb').read()
def _run_test_(self, grd_expected, manifest_files, input_files=None,
input_files_base_dir=None, resource_path_rewrites=None):
assert not self._out_folder
self._out_folder = tempfile.mkdtemp(dir=_HERE_DIR)
def _run_test_(self, grd_expected,
out_grd='test_resources.grd',
manifest_files=None, input_files=None,
input_files_base_dir=None, grdp_files=None,
resource_path_rewrites=None):
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',
'--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):
args += [
'--input-files-base-dir',
input_files_base_dir,
'--input-files',
]
args += input_files
] + input_files
if (resource_path_rewrites):
args += [ '--resource-path-rewrites' ] + resource_path_rewrites
generate_grd.main(args)
actual_grd = self._read_out_file('test_resources.grd')
actual_grd = self._read_out_file(out_grd)
expected_grd = open(
os.path.join(_HERE_DIR, 'tests', grd_expected), 'rb').read()
self.assertEquals(expected_grd, actual_grd)
......@@ -58,7 +67,7 @@ class GenerateGrdTest(unittest.TestCase):
def testSuccess(self):
self._run_test_(
'expected_grd.grd',
[
manifest_files = [
os.path.join(pathToHere, 'tests', 'test_manifest_1.json'),
os.path.join(pathToHere, 'tests', 'test_manifest_2.json'),
])
......@@ -66,21 +75,35 @@ class GenerateGrdTest(unittest.TestCase):
def testSuccessWithInputFiles(self):
self._run_test_(
'expected_grd_with_input_files.grd',
[
manifest_files = [
os.path.join(pathToHere, 'tests', 'test_manifest_1.json'),
os.path.join(pathToHere, 'tests', 'test_manifest_2.json'),
],
[ 'images/test_svg.svg', 'test_html_in_src.html' ],
'test_src_dir')
input_files = [ 'images/test_svg.svg', 'test_html_in_src.html' ],
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):
self._run_test_(
'expected_grd_with_rewrites.grd',
[
manifest_files = [
os.path.join(pathToHere, 'tests', 'test_manifest_1.json'),
os.path.join(pathToHere, 'tests', 'test_manifest_2.json'),
],
input_files=None, input_files_base_dir=None,
resource_path_rewrites=[
'test.rollup.js|test.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