| # Copyright 2018 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """ |
| This script takes in a file created by js_library.py and any supplementary js |
| files to build an html file used for js unit tests. |
| """ |
| |
| from argparse import ArgumentParser |
| from js_binary import CrawlDepsTree |
| |
| def Flatten(deps): |
| """ |
| Recursively follows a list of dep files and returns source files in |
| dependency order. Ignores externs. |
| """ |
| sources, externs = CrawlDepsTree(deps) |
| return sources |
| |
| def main(): |
| parser = ArgumentParser() |
| parser.add_argument('-i', '--input', |
| help='Input dependency file generated by js_library.py') |
| parser.add_argument('-m', '--mocks', nargs='*', default=[], |
| help='List of additional js files to load before others') |
| parser.add_argument('-o', '--output', |
| help='Generated html output with flattened dependencies') |
| parser.add_argument('-I', '--include_prefix', default='', |
| help='Prefix added to src= paths to find .js files') |
| args = parser.parse_args() |
| |
| uniquedeps = Flatten([args.input]) |
| with open(args.output, 'w') as out: |
| out.write('<!DOCTYPE html>\n<html>\n<body>\n') |
| out.write( |
| """ |
| <script> |
| // Basic include checker. |
| window.addEventListener('error', function(e) { |
| if ((e.target instanceof HTMLScriptElement)) { |
| console.log('ERROR loading <script> element (does it exist?):\\n\\t' + |
| e.srcElement.src + '\\n\\tIncluded from: ' + |
| e.srcElement.baseURI); |
| } |
| }, true /* useCapture */); |
| </script> |
| |
| """) |
| for file in args.mocks: |
| out.write('<script src="%s%s"></script>\n' % (args.include_prefix, file)) |
| for file in uniquedeps: |
| out.write('<script src="%s%s"></script>\n' % (args.include_prefix, file)) |
| out.write('</body>\n</html>\n') |
| |
| if __name__ == '__main__': |
| main() |