run_layout_tests.py revision d210fd26b2f32fec26c2e7bb355de8b5b3e25b79
15fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski#!/usr/bin/python
25fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski
35fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski"""Run layout tests on the device.
45fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski
55fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  It runs the specified tests on the device, downloads the summaries to the temporary directory
6d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block  and optionally shows the detailed results the host's default browser.
75fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski
85fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  Usage:
9d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block    run_layout_tests.py --show-results-in-browser test-relative-path
105fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski"""
115fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski
12d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Blockimport logging
13d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Blockimport optparse
145fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowskiimport os
15d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Blockimport sys
165fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowskiimport subprocess
175fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowskiimport tempfile
18d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Blockimport webbrowser
195fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski
205fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski#TODO: These should not be hardcoded
21bdebd0621b2a4422a30bea21ea549afd20a9e918Steve BlockRESULTS_ABSOLUTE_PATH = "/sdcard/layout-test-results/"
225fb9ff420d378c5c83e116efadefb669791098d5Maksymilian OsowskiDETAILS_HTML = "details.html"
235fb9ff420d378c5c83e116efadefb669791098d5Maksymilian OsowskiSUMMARY_TXT = "summary.txt"
245fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski
25d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Blockdef main(options, args):
26d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block  if args:
27d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block    path = " ".join(args);
285fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  else:
29d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block    path = "";
305fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski
315fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  logging.basicConfig(level=logging.INFO, format='%(message)s')
325fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski
335fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  tmpdir = tempfile.gettempdir()
345fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski
355fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  # Run the tests in path
365fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  cmd = "adb shell am instrument "
375fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  cmd += "-e class com.android.dumprendertree2.scriptsupport.Starter#startLayoutTests "
385fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  cmd += "-e path \"" + path + "\" "
395fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  cmd +="-w com.android.dumprendertree2/com.android.dumprendertree2.scriptsupport.ScriptTestRunner"
405fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski
415fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  logging.info("Running the tests...")
425fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
435fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski
445fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  logging.info("Downloading the summaries...")
455fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski
465fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  # Download the txt summary to tmp folder
475fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  summary_txt_tmp_path = os.path.join(tmpdir, SUMMARY_TXT)
485c27bc1c64a06ccec64da81bd0217b7aa3592786Steve Block  cmd = "rm -f " + summary_txt_tmp_path + ";"
495c27bc1c64a06ccec64da81bd0217b7aa3592786Steve Block  cmd += "adb pull " + RESULTS_ABSOLUTE_PATH + SUMMARY_TXT + " " + summary_txt_tmp_path
505fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
515fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski
525fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  # Download the html summary to tmp folder
535fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  details_html_tmp_path = os.path.join(tmpdir, DETAILS_HTML)
545c27bc1c64a06ccec64da81bd0217b7aa3592786Steve Block  cmd = "rm -f " + details_html_tmp_path + ";"
555c27bc1c64a06ccec64da81bd0217b7aa3592786Steve Block  cmd += "adb pull " + RESULTS_ABSOLUTE_PATH + DETAILS_HTML + " " + details_html_tmp_path
565fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
575fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski
585fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  # Print summary to console
595fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  logging.info("All done.\n")
605fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  cmd = "cat " + summary_txt_tmp_path
615fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  os.system(cmd)
625fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  logging.info("")
635fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski
645fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski  # Open the browser with summary
65d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block  if options.show_results_in_browser != "false":
66d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block    webbrowser.open(details_html_tmp_path)
675fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski
685fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowskiif __name__ == "__main__":
69d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block  option_parser = optparse.OptionParser(usage="Usage: %prog [options] test-relative-path")
70d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block  option_parser.add_option("", "--show-results-in-browser", default="true",
71d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block                           help="Show the results the host's default web browser, default=true")
72d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block  options, args = option_parser.parse_args();
73d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block  main(options, args);
74